helm chart 部署 mysql、redis 无法拉起排查思路

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-0pods 状态, pods 状态为 running

总结

helm chart 方式启动的应用无法启动一般通过kubectl describe pods或者kubectl logs pods取得日志信息即可解决

参考资料:
官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值