Как интегрировать GitLab-Ci с Azure Kubernetes + Kubectl + ACR для развертываний? - PullRequest
0 голосов
/ 07 июня 2018

Наш предыдущий CI / CD на основе GitLab использовал запрос аутентифицированного скручивания к определенной конечной точке API REST, чтобы инициировать повторное развертывание обновленного контейнера в нашей службе, если вы используете нечто подобное для своего развертывания на основе Kubernetes, для которого этот Вопросyou.

Дополнительные сведения

Мы запускаем производственный сайт / приложение (на основе блога Ghost) в кластере Azure AKS.Прямо сейчас мы вручную помещаем наши обновленные контейнеры в частный ACR (реестр контейнеров Azure), а затем выполняем обновление из командной строки с помощью Kubectl.

При этом ранее мы использовали Docker Cloud для нашей оркестровки и полностью интегрированного повторного развертывания.наши производственные / промежуточные сервисы, использующие GitLab-Ci.

Именно интеграция с GitLab-Ci является целью, и «Почему» стоит за этим вопросом.

Мой вопрос

Поскольку мыранее использовавшееся Docker Cloud (до, должно быть, K8s с самого начала), как мы должны учитывать тот факт, что GitLab-Ci смог использовать Secrets, создал CLI Docker Cloud и затем прошел аутентификацию с помощью Docker Cloud API для запуска действий на нашемУзлы (т. Е. Повторное развертывание с новыми контейнерами и т. Д.).

Хотя я считаю, что мы можем создать контейнер (для использования нашим бегуном GitLab-Ci), который содержит Kubectl и Azure CLI, я знаю, чтоKubernetes также имеет похожий (для docker cloud) Rest API, который можно найти здесь (https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster) - специальнораздел, в котором говорится о подключении БЕЗ Kubectl, по-видимому, уместен (как и фрагмент о HTTP REST API).

Мой вопрос всем, кто подключается к Azure (или потенциально к другой управляемой службе Kubernetes):

Как ваш сервер Ci / CD проходит аутентификацию на сервере управления вашего провайдера услуг Kubernetes, а затем как вы в настоящее время инициируете обновление / повторное развертывание обновленного контейнера / службы?

Если вы использовали API Rest Kubernetes HTTP для повторного развертывания службы, ваши мысли особенно полезны!

Ресурсы Kubernetes, которые я проверяю

  1. Как следуетуправлять развертываниями с помощью kubernetes
  2. Kubernetes Deployments

Будет обновляться по мере прохождения процесса.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Создание интеграции

У меня была такая же проблема, как интегрировать GitLab CI / CD с моим кластером Azure AKS Kubernetes.Я создал этот вопрос , потому что у меня возникла ошибка, когда я пытался добавить свою информацию о Kubernetes cluester в GitLab.

Как их интегрировать:

  1. Внутри GitLabперейдите в меню «Операции»> «Kubernetes».
  2. Нажмите кнопку «Добавить кластер Kubernetes» в верхней части страницы
  3. Вам нужно будет заполнить некоторые поля формы, чтобы получитьсодержимое, которое вы должны поместить в эти поля, подключиться к вашей учетной записи Azure из интерфейса командной строки (для этого необходимо установить CLI Azure на вашем ПК) с помощью команды az login, а затем выполнить эту другую команду, чтобы получить учетные данные кластера Kubernetes: az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
  4. Предыдущая команда создаст файл ~/.kube/config, откройте этот файл, содержимое полей, которые вы должны заполнить в форме GitLab «Добавить кластер Kubernetes», находится внутри этого .kube/config файла

Это поля:

  1. Имя кластера Kubernetes: Это имя вашего кластера в Azure, оно также находится в файле .kube/config.
  2. URL-адрес API: Это URL-адрес в поле server файла .kube/config.
  3. Сертификат CA: Это поле certificate-authority-data файла .kube/config, но вам придется декодировать его с помощью base64.

После того, как вы его расшифруете, оно должно выглядеть примерно так:

-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
Токен: Это строка шестнадцатеричных символов в поле token файла .kube/config (может также потребоваться расшифровка с помощью base 64?).Вам нужно использовать токен, принадлежащий учетной записи с привилегиями cluster-admin , чтобы GitLab мог использовать его для аутентификации и установки чего-либо в кластере.Самый простой способ добиться этого - создать новую учетную запись для GitLab: создать файл YAML с определением учетной записи службы (пример можно увидеть здесь в разделе Создать учетную запись службы gitlab в пространстве имен по умолчанию) и примените его к кластеру с помощью kubectl apply -f serviceaccount.yml. Пространство имен проекта (необязательно, уникально): Я оставляю его пустым, пока не знаю для чего илигде можно использовать это пространство имен.

Нажмите «Сохранить», и все готово.Теперь ваш проект GitLab должен быть подключен к вашему кластеру Kubernetes.

Развертывание

В вашем задании развертывания (в конвейере) вам понадобятся некоторые переменные среды для доступа к кластеру с помощью kubectl команда, вот список всех доступных переменных:

https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables

Чтобы эти переменные были внедрены в ваше задание на развертывание, есть несколько условий:

  • Вы, должно быть, правильно добавили кластер Kubernetes в свой проект GitLab, меню «Операции»> «Kubernetes» и эти шаги, которые я описал выше
  • Ваша работа должна быть «задачей развертывания», в GitLab CI,чтобы считаться заданием развертывания, в вашем определении задания (в вашем .gitlab-ci.yml) должна быть клавиша environment (взгляните на строку 31 в этом примере ), а имя среды должно соответствоватьимя, которое вы использовали в меню «Операции»> «Среды».

Вот пример .gitlab-ci.yml с тремя этапами:

  • Сборка: сборкаСоздайте образ докера и отправьте его в личный реестр gitlab
  • Тест: он еще ничего не делает, просто введите exit 0, чтобы изменить его позже
  • Развернуть: загрузить стабильную версию kubectl, скопировать файл .kube/config, чтобы иметь возможность запускать команды kubectl в кластере, и выполнить kubectl cluster-info, чтобы убедиться, что он работает.В моем проекте я не закончил писать свой сценарий развертывания, чтобы действительно выполнить развертывание.Но эта kubectl cluster-info команда выполняется нормально.

Совет: , чтобы взглянуть на все переменные среды и их значения (у Дженкинса есть страница с этим представлением, GitLab CIнет) вы можете выполнить команду env в сценарии этапа развертывания.Это очень помогает при отладке работы.

0 голосов
/ 07 июня 2018

Сегодня я вошел в наш бэкэнд GitLab-Ci и увидел кнопку «Kubernetes» - вместе с предложением сэкономить 500 долларов на GCP.

$500 at GCP with GitLab-Ci Kubernetes

GitLab Kubernetes

URL для попадания на страницу Kubernetes GitLab вашего репо: https://gitlab.com/^your-repo^/clusters

Как яработать через процесс интеграции, я буду обновлять этот ответ (но также приветствую!).

Официальные документы по интеграции GitLab Kubernetes

https://docs.gitlab.com/ee/user/project/clusters/index.html

...