Вы можете настроить свой модуль с периодом отсрочки (например, 30 секунд или более, в зависимости от времени запуска контейнера и размера образа) и установить "imagePullPolicy: "Always"
. И пользуйся kubectl delete pod pod_name
. Будет создан новый контейнер и автоматически загружен последний образ, после чего старый контейнер будет остановлен.
Пример:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
В настоящее время я использую Jenkins для автоматизированных сборок и тегов изображений, и это выглядит примерно так:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Еще один трюк - запустить:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
а потом:
kubectl set image deployment/my-deployment mycontainer=myimage
Фактически это будет запускать скользящее обновление, но убедитесь, что вы также imagePullPolicy: "Always"
установили.
Обновить:
Еще один трюк, который я обнаружил, когда вам не нужно изменять имя изображения, - это изменить значение поля, которое будет запускать скользящее обновление, например terminationGracePeriodSeconds
. Вы можете сделать это с помощью kubectl edit deployment your_deployment
или kubectl apply -f your_deployment.yaml
или используя такой патч:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Просто убедитесь, что вы всегда меняете числовое значение.
kubectl set image
команду, кубернетес будет выполнять скользящее обновление. Например, допустим, вы развернули «repo / myimage: latest». Тем временем ваше изображение было изменено и отправлено в репо с тегом «v0.2». Вы можете выполнить обновление, запустив.kubectl set image deployment/my-deployment mycontainer=myimage:v0.2
Этот образ также будет иметь тег «последний».ОБНОВЛЕНИЕ 2019-06-24
Основываясь на комментарии @Jodiug, если у вас есть
1.15
версия, вы можете использовать команду:Подробнее по теме:
https://github.com/kubernetes/kubernetes/issues/13488
Что ж, есть интересная дискуссия на эту тему в проекте kubernetes GitHub. См. Проблему: https://github.com/kubernetes/kubernetes/issues/33664
Из описанных там решений я бы предложил одно из двух.
Первый
1. подготовить развертывание
2.Deploy
Второй (один лайнер):
Конечно, в
imagePullPolicy: Always
обоих случаях требуется.источник
Это текущий способ запустить непрерывное обновление и оставить старые наборы реплик на месте для других операций, обеспечиваемых
kubectl rollout
аналогичными откатами.источник
undo
команды или эквивалента.Я использую Gitlab-CI для создания образа, а затем развертываю его непосредственно в GCK. Если использовать небольшой аккуратный трюк для достижения непрерывного обновления без изменения каких-либо реальных настроек контейнера, который меняет метку на текущий commit-short-sha.
Моя команда выглядит так:
Где вы можете использовать любое имя и любое значение для метки, если она меняется с каждой сборкой.
Радоваться, веселиться!
источник
Похоже, что k8s ожидает от нас предоставления разных тегов изображения для каждого развертывания. Моя стратегия по умолчанию - заставить систему CI генерировать и отправлять образы докеров, помечая их номером сборки:
xpmatteo/foobar:456
.Для локальной разработки может быть удобно использовать скрипт или make-файл, например:
Команда
sed
заменяет заполнитель в документе развертывания фактически созданным тегом изображения.источник
Я использую Azure DevOps для развертывания контейнерных приложений, мне легко удается решить эту проблему с помощью идентификатора сборки.
Каждый раз, когда он строит и генерирует новый идентификатор сборки, я использую этот идентификатор сборки в качестве тега для изображения докера, вот пример
ImageName: buildID
как только ваш образ будет успешно построен (CI), в конвейере компакт-диска в файле развертывания yml я дал имя изображения как
ImageName: окр: buildID
здесь evn: buildid - это переменная azure DevOps, имеющая значение идентификатора сборки.
так что теперь каждый раз у меня есть новые изменения для сборки (CI) и развертывания (CD).
прокомментируйте, если вам нужно определение сборки для CI / CD.
источник