Рубрики
Uncategorized

CI/CD для Kubernetes с использованием действий GitHub и Keel

В этой статье цель состоит в том, чтобы показать, как настроить контейнерное приложение в Kubernetes с помощью v … С тегами Kubernetes, Docker, Go, DevOps.

В этой статье цель состоит в том, чтобы показать, как настроить контейнерное приложение в 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://: 9300/v1/webhooks/dockerhub . Теперь нажатие нового изображения 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»