Установку 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
FROM jenkins/jenkins:lts-slim-jdk17
: Офіційний образ Jenkins. Буде працювати з версією LTS та JDK 17.- Офіційний образ Jenkins Docker
RUN jenkins-plugin-cli --plugins kubernetes
: Використовується для встановлення плагіна Jenkins Kubernetes.- Jenkins плагін 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
- Якщо ви використовуєте HTTPS, обов'язково виберіть опцію WebSocket. Інакше агенти Jenkins не працюватимуть.
- Якщо ви плануєте використовувати власний образ, створіть власний Dockerfile і запустіть агента Jenkins на Kubernetes. Це дозволить працювати агентам Jenkins на Kubernetes і зробить ваш Jenkins master більш ефективним та швидким.
Після завершення реєстрації вас перенаправить на сторінку Cloud. Тут виберіть створений Kubernetes Cloud та зліва натисніть на
- Pod templates.
- Заповніть форму для Add Pod template.
Можна вказати будь-яку назву, яка буде використовуватись як префікс для імен автоматично створених агентів Jenkins. Ці агенти будуть автоматично запускатись під час виконання build.
Установка завершена.
Тепер давайте протестуємо.
Ми створимо два плани побудови (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