Встановлення масштабованого Jenkins на Kubernetes

Установку Jenkins master на Kubernetes можна знайти за наступним посиланням.

Запуск Jenkins master на Kubernetes не є рекомендованим методом для pipeline. Можливо, ваші навантаження наразі не дуже великі. Однак коли ваші навантаження збільшаться в майбутньому, щоб уникнути проблем, запускати агенти Jenkins на Kubernetes буде найкращим варіантом.

Які ж переваги цього підходу?

  • Автоматичне відновлення: Якщо ваш build або агент не працює, вам не потрібно турбуватися — Jenkins видалить несправний екземпляр і створить новий.
  • Паралельний запуск build’ів: Більше не потрібно планувати і обмежувати виконавців; замість цього Jenkins створить екземпляр агента і запустить ваш build всередині нього.
  • Розподіл навантаження: Kubernetes добре управляє навантаженнями і забезпечує запуск агентів Jenkins на найкращих доступних серверах, що робить ваші build’и швидшими і ефективнішими.

Щоб запустити агентів Jenkins на Kubernetes, дотримуйтесь наведених нижче кроків.

Jenkins Agent

Ми будемо слідувати документації для запуску Jenkins agent на Kubernetes. Спершу переконайтеся, що Docker встановлений.

docker --version

Почнемо з рекомендації — створимо Dockerfile для Jenkins.

FROM jenkins/jenkins:lts-slim-jdk17  
# Pipelines з Blue Ocean UI та Kubernetes  
RUN jenkins-plugin-cli --plugins kubernetes

Після створення Dockerfile, виконуємо побудову образу.

docker build -t my-jenkins-image:1.1 .

Після створення Docker image перевіряємо.

docker images

У списку має з'явитися my-jenkins-image:1.1.

Далі виконуємо установку Jenkins на Kubernetes. Використовуючи шлях з посилання, ви зможете запустити Jenkins master на Kubernetes. Єдина відмінність — потрібно оновити файл deployment.yaml, як описано нижче.

  • Jenkins на Kubernetes Якщо ви вже налаштовували Jenkins Master за цим шляхом, вам потрібно лише оновити файл deployment.yaml та додати наступний код.

Оновимо файл deployment.yaml наступним чином.

apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: jenkins  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: jenkins  
 template:  
 metadata:  
 labels:  
 app: jenkins  
 spec:  
 containers:  
 - name: jenkins  
 image: my-jenkins-image:1.1  
 ports:  
 - containerPort: 8080  
 volumeMounts:  
 - name: jenkins-home  
 mountPath: /var/jenkins_home  
 volumes:  
 - name: jenkins-home  
 emptyDir: {}
  • image: my-jenkins-image:1.1: Використовуємо Docker image для запуску Jenkins agent на Kubernetes.

Після оновлення файлу deployment.yaml запустимо Jenkins agent на Kubernetes за допомогою наступної команди.

Для використання локальних образів у Minikube використовуйте команду:

eval $(minikube docker-env)

Потім створимо deployment за допомогою команди:

kubectl apply -f deployment.yaml

Конфігурація Jenkins Master

Після того, як Jenkins master запущено на Kubernetes, потрібно налаштувати Jenkins master.
Щоб налаштувати Jenkins master, дотримуйтесь наведених нижче кроків.

Для налаштування агентів Jenkins потрібно знати URL контролера Kubernetes та внутрішній URL Jenkins pod. URL контролера Kubernetes можна отримати за допомогою наступної команди.

kubectl cluster-info

Ви повинні отримати вивід, схожий на цей:

Kubernetes control plane is running at https://192.168.49.2:8443  
KubeDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Якщо ви використовуєте стандартну конфігурацію, Jenkins працює на порту 8080.

Щоб отримати URL Jenkins pod, спершу потрібно отримати його pod id.

kubectl get pods -n devops-tools

Вивід повинен бути схожим на цей:

NAME READY STATUS RESTARTS AGE  
jenkins-867cf56b4f-8c7jw 1/1 Running 0 2m

Після отримання pod id, за допомогою наступної команди ви можете отримати URL Jenkins pod:

kubectl describe pod jenkins-867cf56b4f-8c7jw -n devops-tools

У виводі нас цікавить IP-адреса:

…..  
IP: 10.244.0.25  
…..

Тепер ми можемо налаштувати Jenkins Master. Для цього зайдіть в Jenkins UI та дотримуйтесь наступних кроків:

Зайдіть в Jenkins UI та виберіть

Manage Jenkins → Clouds → New cloud

У полі для назви Cloud введіть Kubernetes і натисніть на Kubernetes.

У полі Kubernetes URL введіть URL контролера Kubernetes:

kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443

У полі Jenkins URL введіть URL Jenkins pod:

kubectl svc -n devops-tools
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE  
jenkins-service NodePort 10.103.234.229  8080:32001/TCP 28h

Для URL Jenkins використовуйте наступний формат:

http://192.168.49.2:32001

pic

  • Якщо ви використовуєте HTTPS, обов'язково виберіть опцію WebSocket. Інакше агенти Jenkins не працюватимуть.
  • Якщо ви плануєте використовувати власний образ, створіть власний Dockerfile і запустіть агента Jenkins на Kubernetes. Це дозволить працювати агентам Jenkins на Kubernetes і зробить ваш Jenkins master більш ефективним та швидким.

Після завершення реєстрації вас перенаправить на сторінку Cloud. Тут виберіть створений Kubernetes Cloud та зліва натисніть на

  • Pod templates.
  • Заповніть форму для Add Pod template.

Можна вказати будь-яку назву, яка буде використовуватись як префікс для імен автоматично створених агентів Jenkins. Ці агенти будуть автоматично запускатись під час виконання build.

pic

Установка завершена.
Тепер давайте протестуємо.

Ми створимо два плани побудови (build plan).

  • Перший план побудови працюватиме на Jenkins master.
  • Другий план побудови працюватиме на Jenkins agent.

Щоб створити перший план побудови, дотримуйтесь наступних кроків:

  • Увійдіть у Jenkins UI і
  • виберіть New Item → Freestyle project.
  • У розділі General
  • введіть Display Name: Jenkins Master.
  • У розділі Build Steps
  • виберіть опцію Execute shell і введіть наступний код:
  • echo "Hello from Jenkins Master".
  • Натисніть кнопку Save.

Щоб створити другий план побудови, дотримуйтесь наступних кроків:

  • Увійдіть у Jenkins UI і
  • виберіть New Item → Freestyle project.
  • У розділі General
  • введіть Display Name: Jenkins Agent.
  • У розділі Build Steps
  • виберіть опцію Execute shell і введіть наступний код:
  • echo "Hello from Jenkins Agent".
  • У розділі Restrict where this project can be run
  • введіть Label Expression: jenkins-agent.
  • Натисніть кнопку Save.

Тепер ви можете запускати агентів Jenkins на Kubernetes і зробити ваш Jenkins master більш ефективним та швидким.

Результат

Запуск агентів Jenkins на Kubernetes зробить ваш Jenkins master більш ефективним та швидким. Це покращить продуктивність вашого Jenkins master, коли агенти працюватимуть на Kubernetes.

Перекладено з: Kubernetes Üzerinde Ölçeklenebilir Jenkins Kurulumu

Leave a Reply

Your email address will not be published. Required fields are marked *