使用 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: {}