如何在 Kubernetes 的 Pod 中重新拉取镜像?

108

我是kubernetes的新手。我的pod出现问题。当我运行命令时

 kubectl get pods

结果:

NAME                   READY     STATUS             RESTARTS   AGE
mysql-apim-db-1viwg    1/1       Running            1          20h
mysql-govdb-qioee      1/1       Running            1          20h
mysql-userdb-l8q8c     1/1       Running            0          20h
wso2am-default-813fy   0/1       ImagePullBackOff   0          20h

由于"wso2am-default-813fy"节点出现问题,我需要重新启动它。有什么建议吗?

8个回答

244

如果没有yaml文件:

kubectl get pod POD名称 -n 命名空间 -o yaml | kubectl replace --force -f -

注:这个命令将获取pod的YAML配置并强制更新到当前运行的pod上。

75

通常在"ImagePullBackOff"的情况下,会在几秒钟/几分钟后重试。如果您想手动再次尝试,则可以删除旧的pod并重新创建pod。删除并重新创建pod的一行命令为:

kubectl delete pod [pod-name] && kubectl get pod [pod-name]

kubectl replace --force -f <yml_file_describing_pod>

7
如果您有副本集/控制器管理此Pod,那么在杀死该Pod后,应自动创建一个新的Pod。 - Hem
绝对没错。如果杀死 pod 后它永远消失了,我会非常担心的。 - Damien Roche
3
我认为 kubectl replace --force -f ... 相当于先删除再创建。 - Oliver
1
如果您的 Pod 是通过 Deployment 创建的,那么只需删除一个 Pod - 新的 Pod 将自动创建。 - Illidan
为什么需要使用 --force 选项? - mchawre

19
$ kubectl replace --force -f <resource-file>

如果一切顺利,您应该会看到类似以下的内容:

<resource-type> <resource-name> deleted
<resource-type> <resource-name> replaced

有关此信息的详细内容可以在 Kubernetes 文档的 "manage-deployment" 和 kubectl-cheatsheet 页面中找到。


我该如何知道 Pod 的资源文件应该长什么样?我看到了 ./pod.json 文件,但是链接中并没有提到任何模板或类似的东西。 - Dominique Paul

11

如果PodDeploymentService的一部分,则删除它将重新启动Pod,并有可能将其放置在另一个节点上:

$ kubectl delete po $POD_NAME

如果它是独立的Pod,则使用replace命令进行替换:

$ kubectl get po -n $namespace $POD_NAME -o yaml | kubectl replace -f -


4

尝试通过删除pod来重新拉取镜像。

kubectl delete pod <pod_name> -n <namespace_name>


0

还有可能是拉取策略未定义或Kubernetes配置为从中心拉取但由于网络问题而失败。尝试设置本地安全注册表并执行拉取操作。这样会起作用。


0

首先尝试查看 Pod 是否出现了问题:

kubectl logs -p <your_pod>

在我的情况下,这是一个YAML文件的问题。

所以,我需要纠正配置文件并替换它:

kubectl replace --force -f <yml_file_describing_pod>

0

很可能ImagePullBackOff的问题是由于镜像不存在或Pod YAML文件存在问题。

我会这样做

kubectl get pod -n $namespace $POD_NAME --export > pod.yaml | kubectl -f apply -

我也想看一下pod.yaml文件,看看为什么之前的pod无法工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接