Постоянство контейнера Jenkins в кластере Kubernetes - PersistentVolumeClaim (VMware / Vsphere) - PullRequest
0 голосов
/ 04 июля 2019

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

Я пытался использовать стандартный подход: использовал StorageClass, затем сделал PersistentVolumeClaim, на который есть ссылка в файле .ayml, который создаст развертывания.

хранение-class.yml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: mystorage
provisioner: kubernetes.io/vsphere-volume
parameters:
  diskformat: zeroedthick

стойкие-объемно-claim.yml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc0003
spec:
  storageClassName: mystorage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 15Gi

jenkins.yml:

---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-auto-ci
  labels:
    app: jenkins-auto-ci
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: jenkins-auto-ci
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins-auto-ci
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins-auto-ci
    spec:
      containers:
      - name: jenkins-auto-ci
        image: jenkins
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - name: http-port
          containerPort: 80
        - name: jnlp-port
          containerPort: 50000
        volumeMounts:
        - name: jenkins-home
          mountPath: "/var"
      volumes:
        - name: jenkins-home
          persistentVolumeClaim:
            claimName: pvc0003

Я ожидаю, что задания jenkins сохранятся при удалении и повторном создании развертываний.

1 Ответ

0 голосов
/ 04 июля 2019

Вы должны создать VMDK , который является диском виртуальной машины.

Вы можете сделать это, используя govc , то есть vSphere CLI.

govc datastore.disk.create -ds datastore1 -size 2G volumes/myDisk.vmdk

Или используя ESXi CLI с помощью ssh в хосте как root и выполнив:

vmkfstools -c 2G /vmfs/volumes/datastore1/volumes/myDisk.vmdk

Как только это будет сделано, вы должны создать PV, назовем его vsphere_pv.yaml, который может выглядеть следующим образом:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  vsphereVolume:
    volumePath: "[datastore1] volumes/myDisk"
    fsType: ext4

datastore1 в этом примере было создано в корневой папке vCenter, если вы располагаете его в другом месте, вам нужно изменить volumePath. Если он расположен в DatastoreCluster, тогда установите volumePath в "[DatastoreCluster/datastore1] volumes/myDisk".

Примените Ямл к Kubernetes kubectl apply -f vsphere_pv.yaml

Вы можете проверить, был ли он создан, описав его kubectl describe pv pv0001

Теперь вам нужен ПВХ, давайте назовем его vsphere_pvc.yaml для потребления ПВ.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc0001
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Примените Ямл к Кубернетам по kubectl apply -f vsphere_pvc.yaml

Вы можете проверить, был ли он создан, описав его kubectl describe pvc pv0001

Как только это будет сделано, ваш yaml может выглядеть следующим образом:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins-auto-ci
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins-auto-ci
    spec:
      containers:
      - name: jenkins-auto-ci
        image: jenkins
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - name: http-port
          containerPort: 80
        - name: jnlp-port
          containerPort: 50000
        volumeMounts:
        - name: jenkins-home
          mountPath: "/var"
      volumes:
        - name: jenkins-home
          persistentVolumeClaim:
            claimName: pvc0001

Все это хорошо объясняется на Vmware GitHub vsphere-storage-for-kubernetes .

...