MySQL StatefulSet初始化失败(Init:CrashLoopBackOff)求助
查看Init容器的具体报错日志:
执行命令kubectl logs mysql-0 -c init-mysql,这是定位问题最直接的方式,日志会明确容器启动失败的具体原因,比如密码读取失败、脚本执行错误、依赖工具缺失等。验证Secret配置正确性:
确认存储root密码的Secret存在且内容无误,执行kubectl get secret <你的Secret名称> -o yaml,检查data字段下的密码值是否为正确的Base64编码结果,可通过echo <Base64字符串> | base64 -d解码验证。检查Init容器的初始化脚本:
若基于官方示例修改了初始化脚本,重点排查逻辑问题:比如是否尝试创建无权限的路径、脚本是否存在语法错误、私有镜像中是否包含脚本依赖的工具(如mysql客户端、mkdir等)。确认存储卷挂载状态:
执行kubectl get pvc,查看mysql-0对应的PVC是否处于Bound状态。如果存储卷未成功挂载,Init容器的脚本可能无法创建数据库数据目录,进而启动失败。验证私有镜像的可访问性:
确保集群节点能正常拉取私有镜像,可在节点上执行docker pull <私有镜像地址>测试。如果私有镜像需要认证,检查StatefulSet配置中是否正确添加了imagePullSecrets字段。检查资源限制是否合理:
查看kubectl describe pod mysql-0的Events部分,是否有OOMKilled事件。如果Init容器的CPU或内存限制过小,可能导致进程被系统杀死,引发CrashLoopBackOff。
内容的提问来源于stack exchange,提问作者Rafael Souza

