У меня есть развертывание Kubernetes, которое выглядит так:
apiVersion: apps/v1
kind: Deployment
metadata:
name: datacollector
spec:
replicas: 1
selector:
matchLabels:
pod-type: datacollector
template:
metadata:
labels:
pod-type: datacollector
spec:
imagePullSecrets:
- name: secret
containers:
- name: datacollector
image: "build.dorangg.dev/doranggdatacollector:latest"
imagePullPolicy: Always
В настоящее время я запускаю следующую команду всякий раз, когда хочу обновить развертывание, чтобы использовать новейшую версию образа из реестра докеров (build.dorangg.dev):
kubectl rollout restart deployment/datacollector
Я хочу инициировать последовательное обновление развертывания (что делает вышеуказанная команда) АВТОМАТИЧЕСКИ всякий раз, когда новая версия образа появляется в реестре докеров.
Можно ли это сделать с помощью конфигурации kubernetes? Если нет, можно ли сделать эту автоматизацию скриптом?
Честно говоря, я не думаю, что это можно настроить внутри Kubernetes. Потребуются дополнительные скрипты / триггеры.
Мне приходят в голову варианты, но вам нужно «поймать» новое нового изображения с помощью скрипта (например, имя нового изображения после успешного нажатия в репозиторий).
- Развертывание патча
$ kubectl patch deployment [your-deployment] -p \
'{"spec":{"template":{"spec":{"image":"[new-image-name:tag]"}}}}'
Kubernetes, если увидит некоторые изменения, он должен повторно развернуть развертывание.
- Создать скрипт с установкой нового изображения
$ kubectl set image deployment/[deployment-name] [image-name]=[new-image-name:tag]
После этого изменения кубернетам также следует повторно развернуть все поды.
- Используйте HELM
В качестве руля, используя диаграммы и шаблоны, вы можете создать скрипт, который изменит имя изображения в values.yaml
и повторно разверните его.
- Патч GracePeriod
Если вы хотите постоянно использовать одно и то же имя изображения, вы можете попробовать исправить GracePeriod
. Было описано Вот.
Надеюсь, это поможет.
Можно ли это сделать с помощью конфигурации kubernetes?
Я не знаю.
Если нет, можно ли сделать эту автоматизацию скриптом?
Да. Вы делаете docker pull
на изображении. Если докер извлекает новый образ, вы удаляете POD с помощью kubectl
и затем он будет повторно развернут.