В этой статье цель состоит в том, чтобы показать, как настроить контейнерное приложение в Kubernetes очень простым конвейером CI/CD для управления развертыванием с использованием действий GitHub и Keel.
Прежде чем мы начнем:
Kubernetes , также известная как K8S, представляет собой систему оркестровки контейнеров с открытым исходным кодом для автоматизации развертывания, масштабирования и управления.
Кил является оператором K8S для автоматизации обновлений Helm, Daemonset, Stateful и развертывания. Это с открытым исходным кодом, самостоятельно с нулевыми требованиями CLI/API и поставляется с красивой и проницательной панелью.
Действия GitHub Облегчает автоматизация всех ваших рабочих процессов программного обеспечения, теперь с CI/CD мирового класса. Создайте, тестируйте и разверните свой код прямо из GitHub.
Рабочий процесс:
В рабочем процессе в основном два шага.
- Вы проведете некоторые изменения в репо GitHub. Будет запускается рабочий процесс, который построит изображение Docker нашего приложения и выдвинет изображение в реестр Docker.
- Кил получит уведомление об обновленном изображении. На основании политики обновления развертывание будет обновлено в настроенном кластере.
Шаг 1:
На первом шаге мы подготовим репозиторие GitHub, чтобы вызвать рабочие процессы.
Репо, aka-achu/go-kube Содержит простое веб -приложение, написанное в Golang и Dockerfile, которое будет использоваться для создания изображения Docker приложения. Вы можете поддерживать любое количество средств для вашего приложения, таких как производство, QNA, постановка, разработка и т. Д. Для простоты мы будем поддерживать только две среды развертывания приложения. В репо есть только две ветви.
- Основной филиал (для производственной среды)
name: Stable Build on: push: tags: - "*.*.*" ... - name: Set tag in env run: echo "TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV ... tags: runq/go-kube:${{ env.TAG }}, runq/go-kube:latest
Стабильный рабочий процесс Будет инициировано, когда тег будет подтолкнут к GitHub. В рабочем процессе тег, связанный с коммитиром, будет использоваться в качестве тега изображения Docker.
- Dev Branch (для развития/постановки среды)
name: Development Build on: push: branches: [ dev ] ... - name: Set short commit hash in env run: echo "COMMIT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV ... tags: runq/go-kube:dev-${{ env.COMMIT_SHA }}
Dev Workflow Будет инициировано, когда любые изменения будут направлены в ветвь DEV. Для разработки, вместо метков GIT мы будем использовать хэш с коротким фиксом длины 7, который мы часто видим в GitHub. Тег изображения Docker изображения разработки будет dev-short_commit_sha .
Оба рабочего процесса направлены на интеграцию кода, возможно, запустить некоторые тесты, создать изображение Docker и обновить реестр изображений. До этого момента мы завершили непрерывную интеграцию и непрерывную доставку.
Шаг 2:
На этом этапе мы автоматизируем обновление нашего развертывания. Мы будем использовать сервис K8S LoadBalancer в нашем рабочем процессе. Итак, если вы используете локальный кластер, то вы можете использовать Metallb , которая является реализацией нагрузки-балансера для кластеров с голой металлы Kubernetes.
Установите киль:
Кил не нуждается в базе данных. Килю не нужен настойчивый диск. Он получает всю необходимую информацию от вашего кластера
kubectl apply -f https://sunstone.dev/keel?namespace=keel&username=admin&password=admin&tag=latest
Приведенная выше команда будет развернуть Keel в пространство имен Keel с базовой аутентификацией и административной панелью. Вы можете предоставить пароль администратора при применении манифеста или скачать Манифест и замените пароль по умолчанию.
# Basic auth (to enable UI/API) - name: BASIC_AUTH_USER value: admin - name: BASIC_AUTH_PASSWORD value: admin - name: AUTHENTICATED_WEBHOOKS value: "false"
Политика Киля:
В Keel мы используем политики для определения, когда мы хотим, чтобы наше приложение/развертывание было обновлено. Следующий Semver Лучшие практики позволяют безопасно автоматизировать обновления приложений. Кил поддерживает много разных Политики обновить ресурсы. На данный момент мы будем использовать только все
и глобус
Политики для обновления нашего развертывания.
- Все: обновляйте всякий раз, когда существует BUMP версии (1.0.0 -> 1.0.1) или новая предварительная обработка (т.е. 1.0.0 -> 1.0.1 -RC1)
- Glob: используйте подстановочные знаки, чтобы соответствовать версиям (например,
dev-*
в нашем сценарии)
Как будет уведомлен Кил:
- Webhooks- Когда новое изображение будет выдвинуто в реестр, Keel получит уведомление Add Webhook в Dockerhub, и на основе настроенной политики обновления развертывание будет обновлено.
- Опрос- когда используется изображение с тегом в стиле, т.е., последнее) Keel будет отслеживать SHA Digest. Если тег Semver — он будет отслеживать и уведомлять поставщиков, когда будут доступны новые версии.
Настройка WebHook:
Во -первых, нам нужно получить внешний IP -адрес службы Keel.
kubectl get all -n keel
Вывод будет что -то вроде этого: Теперь, что у нас есть внешний адрес Сервис/Кил
, мы добавим веб -крюк для нашего репозитория в Dockerhub. URL для крючка будет http://
. Теперь нажатие нового изображения Docker вызовет вызовов HTTP.
Если вы не хотите выставлять свой сервис Keel — рекомендуемое решение — webhookrelay который может доставлять веб -крючки в ваш внутренний сервис киля через контейнер по боковой автоматике. Здесь Как вы можете настроить коляску.
Настройка манифеста развертывания:
- Для настройки нашего постановки развертывания, которое запускает изображение с меткой
dev-short_commit_sha
, мы будем использоватьглобус
политика. Мы указам наше правило политики/обновления, используя аннотации в соответствии с метаданными манифестами развертывания. Нравиться-
... annotations: keel.sh/policy: "glob:dev-*" ...
- Чтобы настроить наше развертывание производства, которое запускает изображение с тегом Semver, мы будем использовать
все
политика. Это обновит наше развертывание производства, когда оно встретится с любой версией шишки в теге. Мы указам наше правило политики/обновления, используя аннотации в соответствии с метаданными манифестами развертывания. Нравиться-
... annotations: keel.sh/policy: all ...
Тестирование рабочего процесса:
Теперь, что мы закончили с настройкой, толчок к Dev
Branch, обновит развертывание постановки, а релиз с меткой обновит развертывание производства.
- Продвигать изменения в
Dev
ветка - Будет запускается рабочий процесс разработки, который создаст изображение Docker
- Изображение Docker с тегом
dev-short_commit_sha
будет подтолкнут в реестр DockerHub. - Кил получит уведомление Dockerhub, используя WebHook
- Кил проверит, удовлетворяет ли новый тег изображения указанную нами политику (все теги, начиная с
dev-
, будут претендовать на процесс обновления. Например:Dev-C722D00
,Dev-0CA740E
) - Если тег соответствует обновлению, Keel создаст новую Replicaset с новым изображением. Как только стручки будут готовы, Киль увеличит количество реплик в старом репликате до 0.
Выпуск тега вызовет аналогичный поток событий.
Визуализация с использованием инструментальной панели киля:
Вы можете получить доступ к приборной панели на внешнем IP: 9300 или с помощью NodePort. Используйте те же учетные данные, которые вы установили при настройке киля. Ты сможешь —
- Просмотреть ресурсы, управляемые Килем
- Получите аудит изменений, внесенных Килем
- Изменение/пауза обновлять политики ресурсов
- Утвердить обновления
Что дальше?
Проверьте документацию Keel, чтобы изучить больше функций.
- Включение разрешений на обновления
- Настройка трубопроводов уведомлений
- Поддерживаемые триггеры Webhook и опрос
- Используйте шаблон для обновления
- Обновление Daemonsets, Statefulsets и т. Д.
Здесь Все ли используются манифесты рабочего процесса и развертывания.
Оригинал: «https://dev.to/achu1612/ci-cd-for-kubernetes-using-github-actions-and-keel-4b7c»