0

我以为我已经知道如何在 Google Container Engine 中更新 Docker 映像,但现在它只是恢复到映像的原始版本。这是我所做的:

原始图像

docker build -t gcr.io/jupiter-1068/jupiter .
gcloud docker push gcr.io/jupiter-1068/jupiter
kubectl create -f rc.yaml

v2

docker build -t gcr.io/jupiter-1068/jupiter:2 .
gcloud docker push gcr.io/jupiter-1068/jupiter:2
kubectl rolling-update staging --image=gcr.io/jupiter-1068/jupiter:2

这行得通。但后来我尝试以与 v2 相同的方式更新到 v3,它似乎正在运行原始图像代码。这是怎么回事?

更新

再试一次:latest。输出kubectl describe rc staging

Name:       staging
Namespace:  default
Image(s):   gcr.io/jupiter-1068/jupiter:latest
Selector:   app=jupiter,deployment=f400f87308696febbe567614f3cc3428,version=1
Labels:     run=staging
Replicas:   1 current / 1 desired
Pods Status:    1 Running / 0 Waiting / 0 Succeeded / 0 Failed
No events.

输出kubectl describe pod <podname>

Name:               staging-b4c7103521d97ef91f482db729da9584-0va8i
Namespace:          default
Image(s):           gcr.io/jupiter-1068/jupiter:latest
Node:               gke-staging-4adcf7c5-node-ygf7/10.240.251.174
Labels:             app=jupiter,deployment=f400f87308696febbe567614f3cc3428,version=1
Status:             Running
Reason:
Message:
IP:             10.8.0.24
Replication Controllers:    staging (1/1 replicas created)
Containers:
  jupiter:
    Image:  gcr.io/jupiter-1068/jupiter:latest
    Limits:
      cpu:      100m
    State:      Running
      Started:      Tue, 15 Sep 2015 21:08:32 -0500
    Ready:      True
    Restart Count:  1
Conditions:
  Type      Status
  Ready     True
Events:
  FirstSeen             LastSeen            Count   From                        SubobjectPath               Reason      Message
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {scheduler }                                        scheduled   Successfully assigned staging-b4c7103521d97ef91f482db729da9584-0va8i to gke-staging-4adcf7c5-node-ygf7
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    implicitly required container POD   pulled      Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    implicitly required container POD   created     Created with docker id 13cd80e199a4
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    implicitly required container POD   started     Started with docker id 13cd80e199a4
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    spec.containers{jupiter}        created     Created with docker id 724fdedd11be
  Tue, 15 Sep 2015 21:07:05 -0500   Tue, 15 Sep 2015 21:07:05 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    spec.containers{jupiter}        started     Started with docker id 724fdedd11be
  Tue, 15 Sep 2015 21:08:32 -0500   Tue, 15 Sep 2015 21:08:32 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    spec.containers{jupiter}        created     Created with docker id 2022b9f5f054
  Tue, 15 Sep 2015 21:08:32 -0500   Tue, 15 Sep 2015 21:08:32 -0500 1   {kubelet gke-staging-4adcf7c5-node-ygf7}    spec.containers{jupiter}        started     Started with docker id 2022b9f5f054
4

3 回答 3

2

docker 中的标签 :latest 有点令人困惑。这并不意味着最新上传,它是您未指定标签时设置的默认名称。

在您的场景中, :latest 指向您的原始图像,因为这是您未指定标签的唯一上传。

于 2015-09-16T14:31:56.923 回答
1

要弄清楚发生了什么,请尝试 running kubectl describe rc staging,它将向您显示复制控制器的详细信息,包括它认为正在运行的图像以及与之相关的任何事件。如果输出显示 rc 正在运行新映像,则检查 pod(使用kubectl describe pods <pod-name>)以查看它们正在运行的映像以及是否有任何事件。

这两个命令应该可以启发您了解正在发生的事情,但如果没有,请用输出回复!

于 2015-09-16T02:44:49.830 回答
0

我手动删除并重新创建了 rc/pod,现在一切正常,包括滚动更新。来自支持:

Container Registry 中似乎存在一个问题,阻止了镜像的 v2 被拉取,但由于镜像和 pod 被删除,我们将无法进一步调查。

如果您遇到此问题,请考虑与他们联系,以便他们在删除您的 pod 之前调查此问题。

于 2015-09-16T20:54:42.357 回答