475
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Настройка CI/CD в GitLab для Kubernetes: практические советы

Время чтения 18 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
475
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Привет! Меня зовут Константин Замков, я эксперт по управлению разработкой ПО. В современной разработке программного обеспечения микросервисная архитектура и контейнеризация стали стандартом. Однако, чтобы обеспечить эффективную и автоматизированную доставку приложений, необходимо настроить систему непрерывной интеграции и доставки (CI/CD). В этой статье мы рассмотрим настройку CI/CD в GitLab для Kubernetes, используя связку Kubernetes + Helm + GitLab + RabbitMQ.

Настройка CI/CD в GitLab для Kubernetes: практические советы

CI/CD позволяет автоматизировать процесс разработки, тестирования и развертывания приложений, что приводит к повышению производительности, сокращению ошибок и уменьшению времени рынка. Организации, которые используют CI/CD, могут сократить time to market на 50% и увеличить производительность на 30%.

Микросервисная архитектура подразумевает разделение приложения на множество независимых сервисов, каждый из которых может быть развернут и обновлен отдельно. Контейнеризация позволяет упаковать каждый сервис в отдельный контейнер, что обеспечивает изоляцию и переносимость.

В нашем примере мы имеем три среды: тестовая, предпромышленная и промышленная. Каждая среда имеет свою собственную версию приложения и сервисов.

GitLab предлагает полную платформу для CI/CD, включая автоматическую сборку, тестирование и развертывание приложений. Чтобы настроить CI/CD в GitLab для Kubernetes, нам необходимо выполнить следующие шаги:

  1. Создайте новый проект в GitLab и добавьте репозиторий с кодом приложения.
  2. Запустите базу данных PostgreSQL в кластере Kubernetes с созданием persistent volume для данных.
  3. Запустите очередь сообщений RabbitMQ
  4. В файле .gitlab-ci.yml настройте автоматическую сборку и тестирование приложения.
  5. Добавьте кластер Kubernetes в GitLab как источник для развертывания приложения.
  6. Настройте Helm для управления пакетами и развертыванием приложения в Kubernetes.

Далее рассмотрим выполнение этих шагов более подробно.

Шаг 1. Создание нового проекта в GitLab и добавление репозитория с кодом приложения

1.1. Зарегистрируйтесь на сайте GitLab и создайте новый проект.

1.2. Создайте репозиторий с кодом приложения и добавьте его в проект GitLab.

Шаг 2. Запуск базы данных PostgreSQL в кластере Kubernetes с созданием persistent volume для данных

2.1. Создайте файл postgres-deployment.yaml с конфигурацией деплоя PostgreSQL.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
 matchLabels:
   app: postgres
  template:
 metadata:
   labels:
     app: postgres
 spec:
   containers:
   - name: postgres
     image: postgres:13
     ports:
     - containerPort: 5432
     volumeMounts:
     - name: data
       mountPath: /var/lib/postgresql/data
   volumes:
   - name: data
     persistentVolumeClaim:
       claimName: postgres-pvc

 

2.2. Создайте файл postgres-pvc.yaml с конфигурацией persistent volume claim.


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
 - ReadWriteOnce
  resources:
 requests:
   storage: 1Gi

 

2.3. Примените конфигурацию деплоя и PVC в кластер Kubernetes.


kubectl apply -f postgres-deployment.yaml
kubectl apply -f postgres-pvc.yaml 

Шаг 3. Запуск очереди сообщений RabbitMQ

3.1. Создайте файл rabbitmq-deployment.yaml с конфигурацией деплоя RabbitMQ.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
spec:
  replicas: 1
  selector:
 matchLabels:
   app: rabbitmq
  template:
 metadata:
   labels:
     app: rabbitmq
 spec:
   containers:
   - name: rabbitmq
     image: rabbitmq:3-management
     ports:
     - containerPort: 5672
     - containerPort: 15672

 

3.2. Примените конфигурацию деплоя в кластер Kubernetes.


kubectl apply -f rabbitmq-deployment.yaml

Шаг 4. Настройка автоматической сборки и тестирования приложения в файле .gitlab-ci.yml

4.1. Создайте файл .gitlab-ci.yml в репозитории с кодом приложения.


image: docker:latest
 
stages:
  - build
  - test
  - deploy
 
build:
  stage: build
  script:
 - docker build -t my-app .
  artifacts:
 paths:
   - my-app.tar
 
test:
  stage: test
  script:
 - docker run -it my-app /bin/bash -c "make test"
  dependencies:
 - build
 
deploy:
  stage: deploy
  script:
 - kubectl apply -f deployment.yaml
  dependencies:
 - test

 

4.2. Добавьте команды сборки и тестирования в файл .gitlab-ci.yml.

Шаг 5. Добавление кластера Kubernetes в GitLab как источник для развертывания приложения

5.1. Войдите в панель управления GitLab и перейдите в раздел CI/CD → «Кластеры».

5.2. Нажмите на кнопку «Добавить кластер» и выберите тип кластера Kubernetes.

5.3. Введите адрес API кластера Kubernetes и другие параметры.

Шаг 6. Настройка Helm для управления пакетами и развертыванием приложения в Kubernetes

6.1. Установите Helm на кластер Kubernetes.


helm init

 

6.2. Создайте файл values.yaml с конфигурацией Helm.


replicaCount: 1
image:
  repository: my-app
  tag: latest

 

6.3. Создайте файл deployment.yaml с конфигурацией деплоя Helm.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
 matchLabels:
   app: my-app
  template:
 metadata:
   labels:
     app: my-app
 spec:
   containers:
   - name: my-app
     image: {{ .Values.image.repository }}:{{ .Values.image.tag }}

 

6.4. Примените конфигурацию Helm.

helm install my-app .

Теперь при каждом пуше в репозиторий с кодом приложения GitLab автоматически соберет, протестирует и развернет приложение в кластер Kubernetes с помощью Helm.

Пример микросервисной архитектуры

Предположим, у нас есть три среды: тестовая, предпромышленная и промышленная. У каждой среды собственная версия приложения и сервисов.

Тестовая среда:

  • Версия приложения: `v1`.
  • Версия базы данных PostgreSQL: `v1`.
  • Версия очереди сообщений RabbitMQ: `v1`.

Предпромышленная среда:

  • Версия приложения: `v2`.
  • Версия базы данных PostgreSQL: `v2`.
  • Версия очереди сообщений RabbitMQ: `v2`.

Промышленная среда:

  • Версия приложения: `v3`.
  • Версия базы данных PostgreSQL: `v3`.
  • Версия очереди сообщений RabbitMQ: `v3`.

В .gitlab-ci.yml можно настроить развертывание приложения в каждую среду отдельно.


stages:
  - deploy-test
  - deploy-preprod
  - deploy-prod
 
deploy-test:
  stage: deploy-test
  script:
 - helm install my-app-test .
  environment:
 name: test
 url: https://test.example.com
 
deploy-preprod:
  stage: deploy-preprod
  script:
 - helm install my-app-preprod .
  environment:
 name: preprod
 url: https://preprod.example.com
 
deploy-prod:
  stage: deploy-prod
  script:
 - helm install my-app-prod .
  environment:
 name: prod
 url: https://prod.example.com

 

В этом примере GitLab автоматически развернет приложение в каждую среду отдельно, используя Helm и конфигурацию values.yaml для каждой среды.

Надеюсь, это поможет настроить CI/CD в GitLab для Kubernetes!

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники