使用Kubernetes和Docker Destop for Windows设置永久卷

时间:2020-05-20 16:32:49

标签: docker jenkins kubernetes

我正在尝试为Docker Desktop for Windows中运行的K8设置永久卷。最终目标是我想运行Jenkins,并且如果docker / K8s旋转下来,也不会丢失任何工作。

我尝试了几件事,但是我误解了这样做的能力,或者我设置了错误的东西。目前,我的环境设置如下:

我在Docker中为Jenkins设置了一个卷。我所做的只是创建卷,不确定是否需要在此处进行更多配置。

docker volume inspect jenkins-pv
[
    {
        "CreatedAt": "2020-05-20T16:02:42Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/jenkins-pv/_data",
        "Name": "jenkins-pv",
        "Options": {},
        "Scope": "local"
    }
]

我还在K8中创建了一个持久卷,该持久卷指向Docker卷中的安装点并进行了部署。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv-volume
  labels:
    type: hostPath
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  hostPath:
    path: "/var/lib/docker/volumes/jenkins-pv/_data"

我还创建了一个pv声明并将其部署。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

最后,我为Jenkins创建了一个部署。我确认它可以正常使用,并且可以访问该应用程序。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-app
  template:
    metadata:
      labels:
        app: jenkins-app
    spec:
      containers:
      - name: jenkins-pod
        image: jenkins/jenkins:2.237-alpine
        ports:
        - containerPort: 50000
        - containerPort: 8080
        volumeMounts:
        - name: jenkins-pv-volume
          mountPath: /var/lib/docker/volumes/jenkins-pv/_data
      volumes:
      - name: jenkins-pv-volume
        persistentVolumeClaim:
          claimName: jenkins-pv-claim

但是,数据不会持续退出Docker,并且每次启动时我都必须重新配置Jenkins。我错过了什么吗?或者我想怎么做?有更好或更容易的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我想出了我的问题,这是两方面的。

  1. 我试图从运行Jenkins的Pod中的错误位置保存数据。
  2. 我从未将数据写回到docker共享文件夹中。

要使其正常工作,我在Docker(C:\ DockerShare)中创建了一个共享文件夹。 然后,我在“永久卷”中更新了主机路径。 格式为 / host_mnt / path_to_docker_shared_folder_location 由于我使用C:\ DockerShare,因此我的路径是: / host_mnt / c / DockerShare

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins
  labels:
    type: hostPath
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /host_mnt/c/DockerShare/jenkins

我还必须更新Jenkins部署,因为我实际上没有保存任何配置。 我应该一直从 / var / jenkins_home 保存数据。

部署看起来像这样:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-app
  template:
    metadata:
      labels:
        app: jenkins-app
    spec:
      containers:
      - name: jenkins-pod
        image: jenkins/jenkins:2.237-alpine
        ports:
        - containerPort: 50000
        - containerPort: 8080
        volumeMounts:
        - name: jenkins
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins
        persistentVolumeClaim:
          claimName: jenkins

无论如何,它现在都可以正常工作,希望在建立PV方面对其他人有所帮助。