djt*_*djt 5 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:
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: {}
Run Code Online (Sandbox Code Playgroud)
但是,如果我随后将一个新容器推送到我的图像存储库并使用以下命令更新 pod,Jenkins 会重新上线,但要求我从头开始(输入管理员密码,我的 Jenkins 工作都不在那里,没有插件等)
kubectl apply -f kubernetes (where my manifests are stored)
kubectl set image deployment/jenkins-deployment jenkins=1234567.dkr.ecr.us-east-1.amazonaws.com/mycompany/jenkins:$VERSION
Run Code Online (Sandbox Code Playgroud)
我是否误解了这个卷安装是如何工作的?
顺便说一句,我还有备份和恢复脚本,这些脚本将 Jenkins 主目录备份到 s3,然后再次下载,但这有点超出了这个问题的范围。
您已指定卷类型EmptyDir。这实际上会在运行 pod 的 kube 节点上安装一个空目录。每次重新启动部署时,pod 都可能在 kube 主机之间移动,并且不存在空目录,因此您的数据在重新启动后不会保留。
我看到您正在从 ECR 存储库中提取映像,因此我假设您正在 AWS 中运行 k8s。
您需要为 AWS 配置 StorageClass。如果您使用 kops 之类的工具配置了 k8s,那么它就已经配置好了。您可以通过执行以下操作来确认这一点kubectl get storageclass- 配置程序应配置为 EBS:
NAME PROVISIONER
gp2 (default) kubernetes.io/aws-ebs
Run Code Online (Sandbox Code Playgroud)
然后,您需要指定持久卷声明:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: gp2 # must match your storageclass from above
resources:
requests:
storage: 30Gi
Run Code Online (Sandbox Code Playgroud)
您现在可以在您的部署中声明 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7262 次 |
| 最近记录: |