mysql 无法拉起
执行以下命令
kubectl get pods mysql
查看到 msql 的 pods 一直为 pending 状态,我们执行以下命令观察一下
kubectl describe pods mysql
可以观察到以下现象
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 3m26s (x66 over 93m) default-scheduler pod has unbound immediate PersistentVolumeClaims
意为 pods 没有绑定 PersistentVolumeClaim,所以我们可以给 pods 创建一个可用的 pv 及 pvc;
执行以下命令查看现有的 pv,pvc:
kubectl get pv,pvc | grep mysql
可以看到 pvc 一直 pending 状态
persistentvolumeclaim/mysql1 Pending
将它给删掉,我们分别创建一个 pv,pvc 给 mysql 的 pods 挂载
创建以下yaml文件:
touch pv-clain.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-test
spec:
storageClassName: mysql-test
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
touch pv-volue.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-test
labels:
type: local
spec:
storageClassName: mysql-test
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
以上为两个pv,pvc的配置,注意的是 storageClassName 需要一致,同时 metadata.name 需要与 mysql 的helm 创建名称一致 ,即 helm install mysql-test
这个名称要与 metadata.name 一致
ok,我们进入创建yaml文件的目录,分别执行以下命令创建 pv,pvc:
kubectl apply -f ./pv-clain.yaml
kubectl apply -f ./pv-volue.yaml
运行kubectl get pv,pvc
命令 ,可以看见 persistentvolume/mysql-test、persistentvolumeclaim/mysql-test 的状态都为 Bound,跟 pods 成功绑定
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mysql-test 10Gi RWO Retain Bound default/mysql-test mysql-test 33m
persistentvolume/task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 18h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mysql-test Bound mysql-test 10Gi RWO mysql-test 33m
persistentvolumeclaim/task-pv-claim Bound task-pv-volume 10Gi RWO manual 18h
我们再重新运行kubectl get pods
可以看到 mysql 的 pods 状态为 running
redis 无法拉起
同样的 redis 也需要指定持久卷,我们用上文的方式给它指定一个 pv 及 pvc。
然后发现 pods 是 crashloopbackoff 的状态。运行 kubectl logs pods redis-0-master -n default
:
redis INFO
nami INFO redis successfully initialized
INFO ==> Starting redis...
28:C 15 Apr 11:31:21.240 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
28:C 15 Apr 11:31:21.240 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=28, just started
28:C 15 Apr 11:31:21.240 # Configuration loaded
28:M 15 Apr 11:31:21.241 # Can't open the append-only file: Permission denied
查看 log 可知 redis的目录没有权限,我们在 pv 定义的存储目录执行以下命令:
sudo chown -R 1001:1001 /mnt/data/
即可。
重新查看 kubectl get pods redis-master-0
pods 状态, pods 状态为 running
总结
helm chart 方式启动的应用无法启动一般通过kubectl describe pods
或者kubectl logs pods
取得日志信息即可解决
参考资料:
官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/