Kubernetes 集群中的一个 Pod 崩溃,但其他 Pod 没有崩溃

Man*_*dha 2 kubernetes google-kubernetes-engine

奇怪的是,kubernetes 集群中的一个 pod 崩溃了,而另一个却没有!

codingjediweb-6d77f46b56-5mffg   0/1     CrashLoopBackOff   3          81s
codingjediweb-6d77f46b56-vcr8q   1/1     Running            0          81s
Run Code Online (Sandbox Code Playgroud)

他们都应该有相同的形象,都应该工作。可能是什么原因?

我怀疑崩溃的吊舱有旧图像,但我不知道为什么。这是因为我解决了一个问题并希望代码能够正常工作(位于其中一个 pod 上)。

不同的豆荚有可能有不同的图像吗?有没有办法检查哪个 pod 正在运行哪个映像?即使有缓存,有没有办法“刷新”旧图像或强制 K8S 下载?

更新

听了法门的建议,我看了看图。我可以看到崩溃的容器似乎正在使用现有的图像(可能是旧的)。如何让 K8S 始终拉取图像?

manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl get pods
NAME                             READY   STATUS             RESTARTS   AGE
busybox                          1/1     Running            1          2d1h
codingjediweb-6d77f46b56-5mffg   0/1     CrashLoopBackOff   10         29m
codingjediweb-6d77f46b56-vcr8q   1/1     Running            0          29m
manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl describe pod codingjediweb-6d77f46b56-vcr8q | grep image
  Normal  Pulling    29m   kubelet, gke-codingjediweb-cluste-default-pool-69be8339-wtjt  Pulling image "docker.io/manuchadha25/codingjediweb:08072020v3"
  Normal  Pulled     29m   kubelet, gke-codingjediweb-cluste-default-pool-69be8339-wtjt  Successfully pulled image "docker.io/manuchadha25/codingjediweb:08072020v3"
manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl describe pod codingjediweb-6d77f46b56-5mffg | grep image
  Normal   Pulled     28m (x5 over 30m)    kubelet, gke-codingjediweb-cluste-default-pool-69be8339-p5hx  Container image "docker.io/manuchadha25/codingjediweb:08072020v3" already present on machine
manuchadha25@cloudshell:~ (copper-frame-262317)$
Run Code Online (Sandbox Code Playgroud)

此外,工作 Pod 有两个映像条目(拉取和拉取)。哪里有两个?

Kam*_*san 5

创建部署时,会在后台创建一个副本集。该副本集的每个 pod 具有相同的属性(即图像、内存)。

当您通过更新 Deployment 的 PodTemplateSpec 来应用任何更改时。一个新的 ReplicaSet 被创建,并且 Deployment 控制器以受控的速率管理 Pod 从旧 ReplicaSet 到新 ReplicaSet 的移动。此时,您可能会发现来自不同副本集的不同 pod 具有不同的属性。

要检查图像:

# get pod's yaml
$ kubectl get  pods -n <namespace> <pod-name> -o yaml

# get deployment's yaml
$ kubectl get deployments -n <namespace> <deployment-name> -o yaml
Run Code Online (Sandbox Code Playgroud)

在部署 yaml 中设置imagePullPolicyAlways,以通过强制拉取来使用更新的映像。