在 Digital Ocean Kubernetes 集群上,我尝试使用从 Docker Hub 提取的 Docker 镜像创建一个 pod,但它不断出现 CrashLoopBackOff 并重新启动失败。该镜像是 docker 容器中的 Rails 应用程序,非常大。我怀疑 Kubernetes 在镜像加载之前重新启动了 pod。
错误如下:
kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE exactpos-deployment-864c768bff-zr86t 0/1 CrashLoopBackOff 10 27m 10.244.66.4 sleepy-nobel-3v8a nginx-deployment-7d69d57649-97w92 1/1 Running 0 40m 10.244.66.7 sleepy-nobel-3v8a
事件:类型原因年龄来自消息
---- ------ ---- ---- ------- 正常计划 27m 默认调度程序已成功将 default/exactpos-deployment-864c768bff-zr86t 分配给 sleepy-nobel-3v8a正常拉取 26 分钟(x4 超过 27 分钟)kubelet、sleepy-nobel-3v8a 成功拉取镜像“index.docker.io/markhorrocks/exactpos_web:prod”
正常 创建时间 26 分钟(x4 共 27 分钟) kubelet、sleepy-nobel-3v8a 创建容器
正常启动 26 分钟(x4 超过 27 分钟) kubelet、sleepy-nobel-3v8a 启动容器
正常拉动 26m(x5 超过 27m)kubelet,sleepy-nobel-3v8a 拉动图像“index.docker.io/markhorrocks/exactpos_web:prod”
警告 BackOff 2m(x117 超过 27m)kubelet,sleepy-nobel-3v8a 后退重启失败的容器
这是我的 yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: exactpos-deployment
spec:
replicas: 1
selector:
matchLabels:
app: exactpos-deployment
template:
metadata:
labels:
app: exactpos-deployment
spec:
containers:
- name: exactpos
image: index.docker.io/markhorrocks/exactpos_web:prod
imagePullPolicy: Always
command: [ "echo", "SUCCESS" ]
imagePullSecrets:
- name: dockerhub-cred
答案1
我花大约 18 个小时甚至更长时间来解决这类问题。
解决方案很简单,像往常一样。只需检查您的 /etc/resolv.conf 即可工人有正确的 DNS 解析。像这样:
修改 /etc/resolv.conf
名称服务器 8.8.8.8 (新行) 名称服务器 8.8.4.4
通过删除损坏的 pod 来重新启动它们。
这是四年前的问题。但我从未在互联网上的任何地方看到过我的答案。