Назад | Перейти на главную страницу

Автоматически запускать последовательное обновление развертывания Kubernetes при наличии новой версии образа контейнера

У меня есть развертывание 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 и затем он будет повторно развернут.