3

Я использую контейнеры init, так как они стали доступными и находят их супер полезными. Мое основное изображение (ниже как web-dev) не сильно меняется, но мой образ контейнера-контейнера (ниже как web-data-dev) часто изменяется.Развертывание, не обнаруживающее изменения тега изображения контейнера в контейнере-контейнере

В контейнере-контейнере используется изображение контейнера с номером версии. Я изменить номер версии до последней величины, а затем сделать kubectl применить -F deployment.yaml

Например, я изменить eu.gcr.io/project/web-data-dev:187 к eu.gcr.io/project/web-data-dev:188 перед запуском kubectl.

Когда я это делаю, развертывание не происходит, если я вношу какие-либо изменения в образ, который использует контейнер init, развертывание все равно не произойдет. Я предполагаю, что это происходит потому, что изменения контейнера init-container не обнаруживаются.

Затем я попытался просто поставить какую-то фигню в поле изображения, как это: «образ»: «thisIsNotAnImage» и запустить kubectl применить -f снова, но обновление до сих пор не применяется.

Мой вопрос: - Как сделать применение kubectl -f обнаружить изменение тега изображения в контейнере-init? я делаю что-то не так, это ошибка, или это просто еще не реализовано, потому что контейнеры init-Alpha?

Полное развертывание YAML находится ниже.

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: {} 

ответ

6

Если вы используете Kubernetes 1.4, попытайтесь изменить pod.alpha.kubernetes.io/init-containers к pod.beta.kubernetes.io/init-containers.

Я не могу найти подходящую проблему для GitHub, но поведение этих двух аннотаций отличается. Я могу сделать kubectl apply -f со вторым, и развертывание будет обновлено.

Вы можете проверить его на примере ниже:

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 и увидеть результат:

$ 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:

$ 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 
+0

Спасибо, это сработало - должно быть, глюк с альфа-версией - ура! – IaMaCuP

Смежные вопросы