Это слишком долго.TL; DR: используйте руль и флюс .
Длинная версия:
Я думаю, что это приводит к тому, что слишком много вашего конвейера CI / CD попадает в Jenkins.Это может нормально работать, но намного чище, когда вы назначаете ответственность за CI Jenkins и используете выделенный сервис CD.Я рекомендую использовать Helm для развертываний и использовать Weave Flux для управления ими.
Helm - менеджер пакетов для Kuberentes.По сути, это просто способ параметризации ваших шаблонов Kubernetes и установки их с некоторыми значениями по умолчанию и некоторыми переопределениями.Использование одного руля, вероятно, вам очень поможет.
Flux - это способ развертывания ваших диаграмм руля и изображений докера.По сути это CD в CI / CD.На этой диаграмме с веб-сайта Flux показано, как Flux отслеживает ваше хранилище изображений для новых артефактов, созданных Jenkins, и конфигурационное хранилище (диаграммы вашего руля) для обновленной конфигурации развертывания.
Итак, теперь у вас есть Jenkins, создающий ваше приложение, Helm может развернуть вашу конфигурацию Kubernetes и Flux может отслеживать изменения, как вы работаете в нескольких средах с некоторыми общими и некоторыми пользовательскими значениями конфигурации?Вы можете поместить значения в 3 (или более мест).1) Ваш values.yaml, который определяет все значения, которые использует ваша диаграмма Хелма, 2) env-shared-values.yaml, это будет иметь значения, общие для нескольких сред, 3) service-env-values.yaml, который является конкретными значениями, необходимыми дляэкземпляр службы.
Структура папок может выглядеть следующим образом
- HelmChartRepo
- Диаграмма
- values.yaml
- templates
- все ваши шаблоны k8s здесь
- EnvValues
- dev-values.yaml
- qa-values.yaml
- Выпуски
- dev1-svc1.yaml
- dev1.svc2.yaml
- dev2-svc1.yaml
- dev2-svc2.yaml
- qa1-svc1.yaml
- и т. д.
Клей находится в папке Release там.Каждый файл является HelmRelease, который используется Flux для управления выпуском.Вот пример, который я использовал.Обратите внимание на несколько вещей.1) Он смотрит на репозиторий github для изменений графика.2) Он просматривает репозиторий Docker для изображений с тегом, содержащим определенный префикс.Вот как вы можете управлять различными средами.Просто попросите Дженкинса пометить сборку соответствующим образом, и Flux развернет новую версию.
---
apiVersion: flux.weave.works/v1beta1
kind: HelmRelease
metadata:
name: dev1-svc1
namespace: dev1
annotations:
flux.weave.works/automated: "true"
flux.weave.works/tag.chart-image: glob:dev1-*
spec:
releaseName: dev1-svc1
chart:
git: git@github.com:[your-user]/[your-chart-repo]
path: [path in git to your chart]
ref: master
values: (release specific values here)
image:
repository: [mydockerhubrepo/myimagename]
tag: dev1-versiontags
valuesFrom:
- chartFileRef:
path: EnvValues/dev-values.yaml
optional: false