Kubectl查看Pod显示ErrImageNeverPull错误:MySQL Kubernetes部署问题求助
解决Kubernetes Pod状态为
0/1 ErrImageNeverPull的问题 首先咱们拆解下这个错误的核心原因:你的Deployment配置里设置了imagePullPolicy: Never,这个参数的作用是完全禁止从远程镜像仓库拉取镜像,只能使用本地已经存在的镜像。但显然你的Docker环境里还没有mysql:5.6这个镜像,所以Pod启动时找不到镜像就报错了。
另外我还发现一个潜在的配置问题:你的Secret名字是kazi-db,但Deployment里引用的Secret名称是db-secret,这个不匹配的问题后续也会导致Pod启动失败,我会一起给出解决方法。
方法一:如果你确实要使用本地镜像(不想从Docker Hub拉取)
- 第一步,先在你的Docker环境中拉取
mysql:5.6镜像:docker pull mysql:5.6 - 第二步,删除当前处于错误状态的Pod,让Deployment自动重新创建一个新Pod:
kubectl delete pod kazi-db-758b978ccc-7m29n - 第三步,等待片刻后用
kubectl get pods查看状态,Pod应该就能正常启动了。
方法二:允许从远程仓库拉取镜像(更适合大多数场景)
- 第一步,修改你的
deployment.yml文件中的imagePullPolicy配置,推荐改成IfNotPresent(优先使用本地镜像,本地没有时再从远程拉取):containers: - image: mysql:5.6 name: mysql imagePullPolicy: IfNotPresent # 替换原来的Never # 其他配置保持不变 - 第二步,重新应用Deployment配置:
kubectl apply -f deployment.yml - 第三步,同样删除错误状态的Pod,让Deployment重新创建Pod:
kubectl delete pod kazi-db-758b978ccc-7m29n
必须修正的Secret名称不匹配问题
你的Secret配置文件db-secret.yml中,Secret的名字是kazi-db,但Deployment里引用的Secret名称是db-secret,这会导致Pod无法获取到MySQL的root密码,进而启动失败。你需要二选一修改:
选项1:修改Deployment中的Secret引用
把deployment.yml里的secretKeyRef.name改成kazi-db:
env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: kazi-db # 原来的是db-secret,改成kazi-db key: password
然后重新应用配置:kubectl apply -f deployment.yml
选项2:修改Secret的名称
把db-secret.yml里的metadata.name改成db-secret:
apiVersion: v1 kind: Secret metadata: name: db-secret # 原来的是kazi-db,改成db-secret type: kubernetes.io/basic-auth stringData: password: xcvas
然后重新应用Secret配置:kubectl apply -f db-secret.yml
完成以上步骤后,你的MySQL Pod应该就能正常启动并运行了。
内容的提问来源于stack exchange,提问作者emoleumassi
相关产品推荐
相关产品推荐

