Jenkins 库伯内特斯岛詹金斯的容量增加
我试图将Jenkins设置为在Kubernetes上的容器中运行,但在持久化Jenkins主目录的卷时遇到问题 这是我的deployment.yml文件。图像基于Jenkins 库伯内特斯岛詹金斯的容量增加,jenkins,kubernetes,Jenkins,Kubernetes,我试图将Jenkins设置为在Kubernetes上的容器中运行,但在持久化Jenkins主目录的卷时遇到问题 这是我的deployment.yml文件。图像基于jenkins/jenkins apiVersion: extensions/v1beta1 kind: Deployment metadata: name: jenkins-deployment labels: app: jenkins spec: replicas: 1 selector: match
jenkins/jenkins
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins-deployment
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: 1234567.dkr.ecr.us-east-1.amazonaws.com/mycompany/jenkins
imagePullPolicy: "Always"
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: jenkins-home
emptyDir: {}
但是,如果我随后将一个新容器推送到我的图像存储库,并使用以下命令更新POD,Jenkins会重新联机,但会要求我从头开始(输入管理员密码,没有Jenkins作业,没有插件等)
我是不是误解了这个卷装是如何工作的
另外,我还有备份和还原脚本,可以将Jenkins主目录备份到s3,然后再次下载,但这在一定程度上超出了本问题的范围。如果希望数据在重新部署后仍能继续使用,则应将持久卷与状态集一起使用,而不是部署资源。重新启动pod。您已经指定了卷类型
清空dir
。这将在运行pod的kube节点上挂载一个空目录。每次重新启动部署时,pod可能会在kube主机之间移动,而空目录不存在,因此数据不会在重新启动时持久化
我看到您正在从ECR存储库中提取图像,所以我假设您正在AWS中运行k8s
您需要为AWS配置StorageClass。如果您已经使用类似kops的东西配置了K8,那么这将已经配置好。您可以通过执行kubectl get storageclass
来确认这一点-供应器应配置为EBS:
NAME PROVISIONER
gp2 (default) kubernetes.io/aws-ebs
然后,您需要指定persistentvolumeclaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: gp2 # must match your storageclass from above
resources:
requests:
storage: 30Gi
现在,您可以在部署中申请pv索赔:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins-deployment
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: 1234567.dkr.ecr.us-east-1.amazonaws.com/mycompany/jenkins
imagePullPolicy: "Always"
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
persistentVolumeClaim:
claimName: jenkins-data # must match the claim name from above
谢谢你的回复。就此解决方案与EBS卷(如另一个答案中所建议的)相比,有哪些优点/缺点?我认为EBS可以在节点故障下生存?这将使用使用动态资源调配的EBS,但当pod在其他节点上重新调度时,EBS卷将重新连接到部署。以防有人遇到与我相同的问题:k8s将卷装载为root,Jenkins可能无法向其写入。我在部署规范中添加了一个
securityContext:fsGroup:1000
,以装载组id为1000的卷。(该值取决于Dockerfile或docker图像。)
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins-deployment
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: 1234567.dkr.ecr.us-east-1.amazonaws.com/mycompany/jenkins
imagePullPolicy: "Always"
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
persistentVolumeClaim:
claimName: jenkins-data # must match the claim name from above