Как использовать тег в yaml-файле kubernetes, чтобы система знала, что отправлено новое изображение

Я пытаюсь настроить CI с помощью Azure DevOps и CD с помощью GitOps для моего кластера AKS. После завершения CI образ отправляется в реестр контейнеров Azure. Моя проблема заключается в том, что имя изображения в моем файле yaml: последнее. Когда я помещаю образ в реестр контейнеров, Flux CD не может определить, есть ли какие-либо изменения в образе, потому что имя образа остается прежним. Я попытался найти проблему в github и нашел ссылку ниже:https://github.com/GoogleCloudPlatform/cloud-builders/issues/22 Но я не знаю, как это реализовать. Кто-нибудь может мне помочь?

2 ответа

Решение

Из документации FluxCD здесь

Примечание. Flux работает только с неизменяемыми тегами изображений (:latest не поддерживается). Каждый тег изображения должен быть уникальным, для этого вы можете использовать Git commit SHA или semver при тегировании изображений.

Включите автоматизацию на основе отметки времени:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0

Приведенная выше конфигурация заставит Flux обновлять контейнер приложения, когда вы отправляете новый тег изображения, будь то my-app:1.0.1 или my-app:9e3bdaf.

Ограничьте обновления изображений с помощью sem ver:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
    fluxcd.io/tag.app: semver:~1.0
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0

Приведенная выше конфигурация заставит Flux обновлять изображение, когда вы нажимаете тег изображения, который соответствует выражению семантической версии, например my-app:1.0.1, но не my-app:1.2.0

Вы должны использовать Git commit SHA или semver при пометке изображений в задаче докера Azure DevOps Pipeline.

steps:
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    containerRegistry: dockerRegistryServiceConnection1
    repository: contosoRepository
    tags: |
      tag1
      tag2

У нас была аналогичная проблема, и мы исправили ее, добавив контрольную сумму в аннотацию в файле развертывания с уникальным генератором значений. У нас это работает так:

Создать шаблон Helm -> Манифест развертывания создается с уникальной контрольной суммой -> Запуск развертывания.

В нашем манифесте была включена функция RollingUpdate, которая устранила время простоя приложения. Ниже представлена ​​конфигурация нашего шаблона Helm. развертывание.yaml

  template:
    metadata:
      labels:
        app: {{ .Values.appName }}
      annotations:
        checksum/commonconfig: {{ .Values.CommonConfig | toJson | sha256sum | trunc 63 }}
        checksum/podconfig: {{ .Values.PodConfig | toJson | sha256sum | trunc 63 }}

У нас есть это в диаграмме управления, которая будет генерировать уникальное значение в манифесте развертывания. Это приведет к тому, что развертывание будет происходить каждый раз, когда даже последний тег изображения будет одинаковым. Кроме того, используйте imagePullPolicy as Always.

Другие вопросы по тегам