Вы можете настроить свой модуль с периодом отсрочки (например, 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}}}}'
Просто убедитесь, что вы всегда меняете числовое значение.