Как обновить образ развертывания в Azure Kubernetes Service с таким же тегом изображения через конвейер Azure? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь обновлять в своем развертывании последние версии изображений в Azure Kubernetes Service каждый раз, когда какой-либо код добавляется в github. Я сделал этап в своем конвейере сборки, чтобы собрать и перенести образ на концентратор докеров, который работает отлично. однако в моем конвейере выпуска образ используется как артефакт и развертывается в службе Azure Kubernetes, но проблема заключается в том, что образ на AKS не обновляется в соответствии с образом, помещенным в Docker Hub с последним кодом.

Прямо сейчас каждый раз, когда происходит коммит, мне приходится вручную обновлять образ на AKS с помощью команды

kubectl set image развертывание / demo-microservice demo-microservice = customerandcontact: contact

Мой файл Yaml

enter image description here

Может ли кто-нибудь сообщить об ошибке / изменениях в моем файле yaml для автоматического обновления изображения на AKS.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Когда вы указываете свое изображение с определенным тегом изображения, Kubernetes будет использовать контейнер по умолчанию от imagePullPolicy до IfNotPresent, что означает, что изображение не будет извлечено снова, а ранее извлеченное изображение будет развернуто.

Kubernetes изменит политику на Always только в том случае, если тег отсутствует (что фактически совпадает с latest или если для тега установлено значение latest явно.

Проверьте, что является реальной политикой imagePull в вашем шаблоне развертываниядля конкретного контейнера.

kubectl get pod demo-microservice -o yaml | grep imagePullPolicy -A 1

Попробуйте установить исправления для развертывания

kubectl patch deployment demo-microservice -p 
 '{"spec": { "template" : 
  { "spec" : { "containers" : 
    [{"name" : "demo-microservice", 
    "image" : "repo/image:tag", 
    "imagePullPolicy": "Always" }]}}}}'

Убедитесь, что для imagePullPolicy для рассматриваемого контейнера установлено значение Always.

0 голосов
/ 03 ноября 2019

Когда вы отправляете новый образ в реестр контейнера под тем же тегом, это ничего не значит для Kubernetes. Если вы запустите kubectl apply -f ..., а имя и тег изображения останутся прежними, они все равно ничего не сделают, так как нет изменений конфигурации. Есть два варианта:

  1. Дайте новый тег для каждой сборки и замените :contact на новый тег в yaml и запустите kubectl apply

  2. Только для среды разработки (не делайте этого в Stage или Prod) оставьте тот же тег (обычно используется тег :latest) и после развертывания нового образа в реестре запустите kubectl delete pod demo-microservice. Поскольку вы установили политику извлечения изображений на Всегда, это приведет к тому, что Kubernetes извлечет новый образ из реестра и повторно развернет модуль.

Второй подход - это обходной путь только для тестирования.

...