CrashLoopBackOff 表示容器不断崩溃重启,通常由以下原因导致:
kubectl describe pod <mysql-pod-name>
kubectl logs <mysql-pod-name>
可能问题: - 持久化卷声明(PVC)未正确绑定 - 已有数据与新配置不兼容 - 权限问题
解决方案:
# 确保存储类存在且可用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard # 根据集群实际情况修改
检查 MySQL 配置文件:
env:
- name: MYSQL_ROOT_PASSWORD
value: "your-secure-password"
- name: MYSQL_DATABASE
value: "mydb"
- name: MYSQL_USER
value: "user"
- name: MYSQL_PASSWORD
value: "password"
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1"
确保 service 配置正确:
ports:
- port: 3306
targetPort: 3306
对于已有数据卷,可能需要添加初始化参数:
args: ["--ignore-db-dir=lost+found"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "your-secure-password"
- name: MYSQL_DATABASE
value: "mydb"
- name: MYSQL_USER
value: "user"
- name: MYSQL_PASSWORD
value: "password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1"
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
kubectl get pods
kubectl describe pod <mysql-pod-name>
kubectl logs <mysql-pod-name> -p # 查看前一个容器的日志(如果已重启)
kubectl logs <mysql-pod-name> # 查看当前容器日志
kubectl exec -it <mysql-pod-name> -- /bin/bash
通过以上步骤,通常可以定位到具体问题原因并解决 CrashLoopBackOff 问题。