Установка 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
EOF5. Создаём 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
EOFkubectl get deploy kubectl get po