Современная разработка программного обеспечения требует быстрых циклов развертывания, масштабируемости и устойчивости. Kubernetes стал основной платформой для оркестрации, обеспечивая управление масштабируемыми контейнеризованными приложениями. В сочетании с конвейерами CI/CD GitLab развертывания Kubernetes становятся автоматизированными, повторяемыми и надежными.
В этой статье рассматриваются технические детали настройки конвейеров CI/CD для Kubernetes с использованием GitLab CI.
Предварительные требования
Перед настройкой вашего конвейера CI/CD убедитесь, что выполнены следующие требования:
- Учетная запись GitLab: Доступ к репозиторию GitLab, в котором будет настроен конвейер CI/CD.
- Кластер Kubernetes: Существующий кластер Kubernetes, такой как Minikube (для локального тестирования) или управляемые кластеры, такие как Google Kubernetes Engine (GKE), Amazon EKS или Azure AKS.
- kubectl: Инструмент командной строки Kubernetes должен быть установлен и настроен для взаимодействия с кластером.
- Helm (по желанию): Менеджер пакетов Kubernetes для развертывания и управления приложениями.
- GitLab Runner: Убедитесь, что GitLab Runner установлен и зарегистрирован в вашем проекте для выполнения заданий CI/CD.
- Docker: Необходим для сборки и отправки образов контейнеров в реестр контейнеров.
Настройка интеграции Kubernetes с GitLab
Подключение к кластеру Kubernetes
Интеграция Kubernetes с GitLab позволяет без проблем выполнять развертывание и управлять ресурсами непосредственно из вашего конвейера. Следуйте этим шагам:
- Перейдите на панель управления вашего проекта в GitLab.
- Перейдите в раздел Инфраструктура > Кластеры Kubernetes.
- Нажмите Добавить кластер Kubernetes и либо подключите существующий кластер, либо создайте новый, используя облачных провайдеров.
- Назначьте правильные разрешения GitLab, используя управление доступом на основе ролей (RBAC).
Настройка RBAC
RBAC определяет разрешения доступа к ресурсам Kubernetes. Ниже приведен пример конфигурации YAML для настройки RBAC:
apiVersion v1
kind ServiceAccount
metadata
name gitlab-sa
namespace default
---
apiVersion rbac.authorization.k8s.io/v1
kind ClusterRoleBinding
metadata
name gitlab-cluster-admin
roleRef
apiGroup rbac.authorization.k8s.io
kind ClusterRole
name cluster-admin
subjects
kind ServiceAccount
name gitlab-sa
namespace default
Применение конфигурации
Примените файл YAML, используя kubectl
:
kubectl apply -f gitlab-rbac.yaml
Генерация токена для аутентификации
Извлеките токен учетной записи службы, необходимый для GitLab:
kubectl -n default get secret $(kubectl -n default get sa/gitlab-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
Вставьте этот токен в настройки конфигурации Kubernetes GitLab.
Настройка конвейера GitLab CI/CD
Определите .gitlab-ci.yml
Файл конфигурации GitLab CI определяет этапы конвейера, переменные и команды. Ниже приведен пример конфигурации:
image docker20.10
stages
build
test
deploy
variables
KUBE_NAMESPACE default
KUBECONFIG"/root/.kube/config"
IMAGE_TAG $CI_COMMIT_SHA
REGISTRY registry.gitlab.com/username/project
services
docker:dind
before_script
apk add --no-cache curl jq bash git
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.0/bin/linux/amd64/kubectl
chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
"$KUBE_CONFIG" | base64 -d > $KUBECONFIG echo
chmod 600 $KUBECONFIG
build
stage build
script
docker build -t $REGISTRY:$IMAGE_TAG .
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker push $REGISTRY:$IMAGE_TAG
unit-test
stage test
script
"Running tests..." echo
./run-tests.sh
deploy
stage deploy
script
kubectl set image deployment/my-app my-app=$REGISTRY:$IMAGE_TAG -n $KUBE_NAMESPACE
only
main
Объяснение конфигурации
- Этапы: Конвейер разделен на этапы сборки, тестирования и развертывания для модульного выполнения.
- Переменные: Переменные окружения, такие как теги изображений и пространства имен, упрощают управление конфигурацией.
- before_script: Устанавливает зависимости и настраивает аутентификацию Kubernetes.
- Тегирование изображений: Использует SHA коммита для уникальной идентификации каждой версии изображения.
- Развертывание: Обновляет развертывание Kubernetes, устанавливая изображение контейнера.
Управление секретами
GitLab CI поддерживает безопасное управление секретами с помощью переменных:
- Перейдите в Настройки > CI/CD > Переменные.
- Добавьте необходимые переменные, такие как
KUBE_CONFIG
,CI_REGISTRY_USER
иCI_REGISTRY_PASSWORD
.
Закодируйте kubeconfig
перед добавлением его в качестве переменной:
cat ~/.kube/config | base64 | tr -d '\n'
Добавьте результат как KUBE_CONFIG
в GitLab.
Развертывание с Helm
Helm упрощает развертывания Kubernetes с помощью повторно используемых чартов. Пример конфигурации Helm:
apiVersion v2
name my-app
version1.0.0
appVersion1.0.0
image
repository registry.gitlab.com/username/project
tag latest
service
type ClusterIP
port80
Добавьте команды Helm в конвейер:
deploy
stage deploy
script
helm upgrade --install my-app ./helm-chart --set image.tag=$IMAGE_TAG
Мониторинг и отладка
Следите за статусом конвейера в GitLab в разделе CI/CD > Конвейеры. Используйте такие инструменты, как:
- Prometheus и Grafana: Для метрик и визуализации.
- Панель управления Kubernetes: Управление кластером.
- kubectl logs: Получить логи развертывания.
kubectl logs -f deployment/my-app
Заключение
Эта статья описывает настройку CI/CD пайплайнов для Kubernetes с помощью GitLab CI. В ней рассматриваются предварительные требования, конфигурации YAML, управление секретами, развертывания Helm и инструменты мониторинга. С этой настройкой разработчики могут эффективно и надежно создавать, тестировать и развертывать контейнеризованные приложения.
Source:
https://dzone.com/articles/cicd-pipelines-for-kubernetes-using-gitlab-ci