Как использовать тег в 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.