使用 gitlab 在 pod 中的多个容器中安装 kubernetes 卷
Mounting kubernetes volume in multiple containers within a pod with gitlab
我是第一次设置一个 CI/CD 环境,它由一个节点 kubernetes (minikube) 组成。
在这个节点上我创建了一个 PV
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
data-volume 1Gi RWO Retain Bound gitlab-managed-apps/data-volume-claim manual 20m
和聚氯乙烯
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-volume-claim Bound data-volume 1Gi RWO manual 19m
现在我想创建一个有多个容器访问此卷的 pod。
您建议在何处以及如何使用 gitlab 管道 gitlab-ci 等进行设置?多个存储库可能最适合该项目。
是的,你可能可以做到这一点 运行 一个 pod 中的多个容器共享一个 PVC。
在 CI/CD 中,如果您有多个回购协议,并且如果提交来自一个回购协议,它将构建新的 Docker 映像并将其推送到注册表并部署到 k8s 集群。
在 CI/CD 中,如果您打算使用 latest
标签进行图像标记,那么您可以在 pod 中使用 multi-container。如果只在一个存储库中提交,将很容易管理部署。
如果您计划将 SHA:hash 用于 CI/CD 标记图像,那么您将如何管理具有两个容器配置的部署文件。
这是部署清单文件的完整示例,在 Pod 的规范中定义了两个使用相同 PV 的容器(基于不同的 nginx docker 图像),它们从那里提供自定义静态 html 相应端口 80/81 上的内容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: null
generation: 1
labels:
run: nginx
name: nginx
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
run: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: nginx
spec:
volumes:
- name: my-pv-storage
persistentVolumeClaim:
claimName: my-pv-claim-nginx
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-pv-storage
subPath: html_custom
- image: custom-nginx
imagePullPolicy: IfNotPresent
name: custom-nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-pv-storage
subPath: html
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status: {}
我是第一次设置一个 CI/CD 环境,它由一个节点 kubernetes (minikube) 组成。
在这个节点上我创建了一个 PV
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
data-volume 1Gi RWO Retain Bound gitlab-managed-apps/data-volume-claim manual 20m
和聚氯乙烯
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-volume-claim Bound data-volume 1Gi RWO manual 19m
现在我想创建一个有多个容器访问此卷的 pod。
您建议在何处以及如何使用 gitlab 管道 gitlab-ci 等进行设置?多个存储库可能最适合该项目。
是的,你可能可以做到这一点 运行 一个 pod 中的多个容器共享一个 PVC。
在 CI/CD 中,如果您有多个回购协议,并且如果提交来自一个回购协议,它将构建新的 Docker 映像并将其推送到注册表并部署到 k8s 集群。
在 CI/CD 中,如果您打算使用 latest
标签进行图像标记,那么您可以在 pod 中使用 multi-container。如果只在一个存储库中提交,将很容易管理部署。
如果您计划将 SHA:hash 用于 CI/CD 标记图像,那么您将如何管理具有两个容器配置的部署文件。
这是部署清单文件的完整示例,在 Pod 的规范中定义了两个使用相同 PV 的容器(基于不同的 nginx docker 图像),它们从那里提供自定义静态 html 相应端口 80/81 上的内容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: null
generation: 1
labels:
run: nginx
name: nginx
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
run: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: nginx
spec:
volumes:
- name: my-pv-storage
persistentVolumeClaim:
claimName: my-pv-claim-nginx
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-pv-storage
subPath: html_custom
- image: custom-nginx
imagePullPolicy: IfNotPresent
name: custom-nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-pv-storage
subPath: html
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status: {}