☸️ Как установить Jenkins на Kubernetes

by itisgood

CI/CD (непрерывная интеграция / непрерывное развертывание) – это основная концепция мира DevOps.

Она помогает нам автоматизировать процессы разработки программного обеспечения: создание, тестирование и развертывание исходных кодов.

📜 Введение в GitLab CI / CD для начинающих

Среди многих инструментов CI/CD Jenkins – один из самых известных инструментов с открытым исходным кодом, который помогает настроить пайплайны для непрерывной интеграции и непрерывного развертывания.

Это руководство покажет вам, как установить Jenkins в кластере Kubernetes.

📜 Как создать свой первый пайплайн CI/CD в Jenkins?

Подготовка кластера Kubernetes

Есть много способов настроить кластер Kubernetes.

Вы можете использовать общедоступные облачные сервисы для создания собственного кластера на AWS, GCP, Linode и т. д.

Кроме того, самый простой способ – установить minikube на локальном компьютере.

☸️ Локальные Kubernetes для Linux — MiniKube или MicroK8s

Здесь у меня есть кластер Kubernetes с 5 нодами, подготовленными с помощью kubespray.

☸️ Разверните готовый кластер Kubernetes с помощью Ansible & Kubespray

$ kubectl get node

Установка Jenkins

Во-первых, мы создадим новое пространство имен, чтобы обеспечить механизм изоляции для управления средой CI:

$ kubectl create namespace jenkins
namespace/jenkins created

Убедитесь, что пространство имен jenkins было успешно создано, выполнив следующую команду:

$ kubectl get namespaces

Затем давайте создадим deployment Jenkins.

Вы можете использовать следующий файл манифеста для создания единого экземпляра Jenkins.

Создание файла `jenkins-deployment.yaml`:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts
        ports:
          - name: http-port
            containerPort: 8080
          - name: jnlp-port
            containerPort: 50000
        volumeMounts:
          - name: jenkins-vol
            mountPath: /var/jenkins_vol
      volumes:
        - name: jenkins-vol
          emptyDir: {}

Развертывание с использованием образа Docker `jenkins/jenkins:lts` предоставляет порты` 8080` и `50000`.

Примените приведенный выше манифест:

$ kubectl create -f jenkins-deployment.yaml --namespace jenkins
Чтобы скачать образ jenkins/jenkins:lts и запустить под, потребуется несколько минут.
Проверка того, что развертывание Jenkins было успешно развернуто:
$ kubectl get pod -n jenkins                                                                                                                                                      

NAME                                  READY     STATUS   RESTARTS   AGE
jenkins-deployment-794699f9bc-rln7x   1/1 	Running  0      	  66s

Развертывание службы Jenkins

После создания деплоймента Jenkins и запуска пода Jenkins вам необходимо предоставить соединение с работающим подом с помощью службы.

В этом руководстве мы будем использовать службы NodePort и ClusterIP.

Создадим файл jenkins-svc.yaml следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30000
  selector:
    app: jenkins

---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-jnlp
spec:
  type: ClusterIP
  ports:
    - port: 50000
      targetPort: 50000
  selector:
    app: jenkins

Теперь примените указанный выше манифест и создайте службу в пространстве имен jenkins:

$ kubectl create -f jenkins-svc.yaml --namespace jenkins

Убедитесь, что служба запущена:

$ kubectl get svc --namespace jenkins                                                                                                                                                   	
NAME       	  TYPE    	CLUSTER-IP 	 EXTERNAL-IP   PORT(S)      	  AGE
jenkins    	  NodePort	10.233.2.81	     	   8080:30000/TCP   30s
jenkins-jnlp  ClusterIP 10.233.53.44     	   50000/TCP    	  30s

С этого момента мы можем получить доступ к панели управления Jenkins с помощью службы NodePort.

Доступ к панели управления Jenkins

Служба NodePort доступна через порт 30000 на любой воркер ноды кластера Kubernetes:

$ kubectl get node -o wide

NAME	STATUS   ROLES	AGE	VERSION   INTERNAL-IP 	EXTERNAL-IP   OS-IMAGE         	KERNEL-VERSION   	CONTAINER-RUNTIME
node1   Ready	master   149m   v1.19.2   192.168.0.111       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node2   Ready	master   148m   v1.19.2   192.168.0.112       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node3   Ready	master   148m   v1.19.2   192.168.0.113       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node4   Ready	   147m   v1.19.2   192.168.0.114       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node5   Ready	   147m   v1.19.2   192.168.0.115       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
Например, откройте веб-браузер и перейдите по адресу: `http://192.168.0.111:30000`.
Чтобы получить пароль администратора, вы можете выполнить следующую команду:
$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins
Введите пароль администратора, затем выполните следующие шаги по настройке, и вы успешно получите доступ к панели управления Jenkins.

Заключение

Jenkins – действительно мощный инструмент CI/CD для любого разработчика DevOps, а также разработчика программного обеспечения.

В этом руководстве описаны все этапы развертывания Jenkins в кластере Kubernetes.

Благодаря Дженкинсу мы будем более продуктивными, и это поможет нам сократить время на сборку, тестирование и развертывание кода.

Спасибо за чтение и оставьте свое предложение в разделе комментариев ниже.

 

You may also like

Leave a Comment