首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署未检测到init-容器中容器图像标记的变化

部署未检测到init-容器中容器图像标记的变化
EN

Stack Overflow用户
提问于 2016-10-26 15:37:49
回答 1查看 1.6K关注 0票数 3

自从它们可用后,我就一直在使用init容器,并发现它们非常有用。我的核心图像(下面是web-dev)没有多大变化,但是我的init容器映像(下面是web dev)确实经常发生变化。

init容器使用带有版本号的容器映像。我将这个版本号更改为最新的值,然后执行kubectl应用-f deployment.yaml

例如,在运行kubectl应用程序之前,我将eu.gcr.io/project/web-data-dev:187更改为eu.gcr.io/project/web-data-dev:188

但是,当我这样做时,不会发生部署,如果我对init容器使用的映像进行任何更改,部署仍然不会发生。我认为这是因为没有检测到init容器的更改。

然后,我尝试在图像字段中添加一些垃圾,比如:”:"thisIsNotAnImage"并再次运行kubectl apply -f,但是更新仍然没有应用。

我的问题是-如何使kubectl应用-f检测init容器中的图像标记更改?我是不是做错了什么,这是一个bug,还是仅仅是因为init容器是Alpha而没有实现呢?

完整部署的YAML如下。

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: web
        tier: frontend
      annotations:
        pod.alpha.kubernetes.io/init-containers: '[
            {
                "name": "initialiser1",
                "image": "eu.gcr.io/project/web-data-dev:187",
                "command": ["cp", "-r", "/data-in/", "/opt/"],
                "volumeMounts": [
                    {
                        "name": "file-share",
                        "mountPath": "/opt/"
                    }
                ]
            }
        ]'
    spec:
      containers:

        - image: eu.gcr.io/project/web-dev:20
          name: web
          resources:
            requests:
              cpu: 10m
              memory: 40Mi
          ports:
            - containerPort: 80
              name: http
            - containerPort: 443
              name: https
          volumeMounts:
            - name: file-share
              mountPath: /opt/

      volumes:
        - name: file-share
          emptyDir: {}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 09:49:04

如果使用Kubernetes 1.4,请尝试将pod.alpha.kubernetes.io/init-containers更改为pod.beta.kubernetes.io/init-containers

我在GitHub上找不到合适的问题,但是这两个注释的行为是不同的。我可以使用第二种方法来执行kubectl apply -f,并且将更新部署。

可以使用下面的示例对其进行测试:

代码语言:javascript
复制
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx
spec:
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        pod.beta.kubernetes.io/init-containers: '[
            {
                "name": "install",
                "image": "busybox",
                "command": ["/bin/sh", "-c", "echo foo > /work-dir/index.html"],
                "volumeMounts": [
                  {
                    "name": "workdir",
                    "mountPath": "/work-dir"
                    }
                ]
            }
        ]'
    spec:
      volumes:
        - name: workdir
          emptyDir: {}
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
          volumeMounts:
            - name: workdir
              mountPath: /usr/share/nginx/html

尝试将foo更改为bar,并查看结果:

代码语言:javascript
复制
$ cat nginx.yaml | kubectl apply -f -
deployment "nginx" created
$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
foo
$ cat nginx.yaml | sed -e 's/foo/bar/g' | kubectl apply -f -
deployment "nginx" configured
$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
bar

使用pod.alpha.kubernetes.io/init-containers的同一件事

代码语言:javascript
复制
$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
foo
$ cat nginx.yaml | sed -e 's/foo/bar/g' | kubectl apply -f -
deployment "nginx" configured
$ curl $(minikube service nginx --url)
foo
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40266518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档