【发布时间】: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