Установка 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
kubectl get deploy kubectl get po