【问题标题】:Setting up a persitent volume with Kubernetes and Docker Destop for Windows使用 Kubernetes 和 Docker Desktop for Windows 设置持久卷
【发布时间】:2020-05-20 16:32:49
【问题描述】:

我正在尝试为在 Docker Desktop for Windows 中运行的 K8s 设置持久卷。最终目标是我想运行 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"
    }
]

我还在 K8s 中创建了一个持久化卷,指向 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。我是否错过了某些事情或我如何/我试图做的事情是不可能的?有没有更好或更简单的方法来做到这一点?

谢谢!

【问题讨论】:

  • 你可以通过在 PersistentVolume 中设置persistentVolumeReclaimPolicy:Retain 来检查吗?
  • @hoque 我尝试了你的建议,但没有骰子,当我再次启动 docker 时仍然需要重新配置 Jenkins。

标签: docker jenkins kubernetes


【解决方案1】:

我发现了我的问题,有两个问题。

  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。

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 2019-08-17
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多