Kubernetes pod/deploy/sts/ds example
March 4, 2023

Установка Jenkins с разными PV

Для установки Jenkins есть официальный мануал и официальный файл Deployment с PV emtydir. Но со стораджами Yandex такая конфигурация не работает.

Официальная документация: https://www.jenkins.io/doc/book/installing/kubernetes/

Готовый deployment с emtydir: https://raw.githubusercontent.com/jenkins-infra/jenkins.io/master/content/doc/tutorials/kubernetes/installing-jenkins-on-kubernetes/jenkins-deployment.yaml

cat <<EOF | kubectl apply -f -
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: jenkins/jenkins:lts-jdk11
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-home
        emptyDir: { }
EOF

Создаём Deployment c PV yc-network-ssd:

1. Создаём диск нужного объёма в той же зоне доступности, что и мастер кластера k8s. Это касается зональных мастеров.

yc compute disk create \
--zone ru-central1-a \
--name k8s-pv \
--type network-ssd \
--block-size 4K \
--size 4 \
--description "k8s pv for test" \
--async

2. Создаём PV на базе данного диска:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 4Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: "yc-network-ssd"
  csi:
    driver: disk-csi-driver.mks.ycloud.io
    fsType: ext4
    volumeHandle: fhmqiu41ibd4m7tmn30a
EOF

где в volumeHandle вписывается идентификатор созданного на первом этапе диска.

3. Устанавливаем тип StorageClass yc-network-ssd по-умолчанию:

kubectl patch storageclass yc-network-ssd \
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

Если не поменяем этот параметр, то при создании PVC будет автоматически создаваться запрос к yc-network-hdd, который мы не создавали.

4. Создаём PVC к созданному на втором этапе PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  volumeName: jenkins-pv
EOF

5. Создаём Deployment с Jenkins и приатачиваем к нему созданное хранилище:

cat <<EOF | kubectl apply -f -
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: jenkins/jenkins:lts-jdk11
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
       - name: jenkins-home
         persistentVolumeClaim:
           claimName: jenkins-pvc
      securityContext: 
        fsGroup: 1000 
        runAsUser: 0
EOF

6. Проверяем.

kubectl get deploy
kubectl get po