Установка Jenkins с помощью helm

kubectl create ns jenkins
helm install --name jenkins --namespace jenkins stable/jenkins -f ./values-autosys.yaml

В результате в неймспейсе jenkins создадутся все нужные объекты, однако pod будет в состоянии pending, потому что у него отсутсвует PersistentVolume, запрашиваемый при помощи PersistentVolumeClaim.

master:
  Name: jenkins-master
  overwriteConfig: true
  # hostNetworking: true
  ingress:
    enabled: true
    # For Kubernetes v1.14+, use 'networking.k8s.io/v1beta1'
    apiVersion: "extensions/v1beta1"
    labels: {}
    annotations:
      cert-manager.io/cluster-issuer: letsencrypt
      kubernetes.io/ingress.class: nginx
    hostName: jenkins.autosys.tk
    tls:
    - hosts:
      - jenkins.autosys.tk
      secretName: jenkins-autosys-tk-tls

persistence:
  enabled: true
  storageClass: jenkins

Сразу после разворачивания pod jenkins у меня находился в состоянии Init:0/1, а в статусе pod'а можно обнаружить такое:

message: 'containers with incomplete status: [copy-default-config]'

В это время в поде jenkins'а работает контейнер copy-default-config, который скачивает с jenkins.io различные компоненты, необходимые для работы (плагины). Ход этого процесса можно наблюдать так:

kubectl logs -n jenkins jenkins-.... -c copy-default-config -f

В контейнере этот процесс выполняется скриптом: /var/jenkins_config/apply_config.sh

Создадим StorageClass и PersistentVolume

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: jenkins
  namespace: jenkins
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: jenkins-pv
   namespace: jenkins
   labels:
     app: jenkins
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: jenkins
  hostPath:
    path: "/kubernetes_volumes/jenkins-home"
    type: Directory
  persistentVolumeReclaimPolicy: Retain

Пароль учетки admin

printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo

Jenkins URL

export SERVICE_IP=$(kubectl get svc --namespace default jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
echo http://$SERVICE_IP:8080/login

Дадим права на создание pod'ов

kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=jenkins:default

Конфигурация после установки

После установки нужно как минимум сконфигурировать параметры Jenkins Location:

  • Jenkins URL
  • System Admin e-mail address

Ссылки

Enter your comment. Wiki syntax is allowed:
 
  • devops/setup_jenkins_on_kubernetes.txt
  • Last modified: 2020/04/23 10:51
  • by admin