You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次搭建单节点Minikube CI/CD,如何用GitLab流水线实现多容器共享PV/PVC?

我来帮你一步步搞定这个需求——用GitLab流水线部署一个多容器共享已有PVC的Pod,还适配多仓库架构的场景,具体如下:

1. 编写多容器共享存储的Pod配置文件

首先你需要定义一个包含多个容器的Pod YAML(比如命名为multi-container-pod.yaml),核心是让所有容器挂载同一个PVC对应的卷:

apiVersion: v1
kind: Pod
metadata:
  name: shared-storage-pod
  namespace: gitlab-managed-apps  # 注意和你的PVC所在namespace一致
spec:
  containers:
  - name: first-container
    image: nginx:alpine
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html  # 第一个容器的挂载路径
  - name: second-container
    image: busybox:latest
    command: ["sleep", "3600"]
    volumeMounts:
    - name: shared-data
      mountPath: /data  # 第二个容器的挂载路径,和第一个可以不同
  volumes:
  - name: shared-data
    persistentVolumeClaim:
      claimName: data-volume-claim  # 引用你已有的PVC

这里要注意:

  • 确保Pod的namespace和你的PVC(data-volume-claim)所在的命名空间一致(从你的PV信息看是gitlab-managed-apps)
  • 每个容器的mountPath可以自定义,但都要关联同一个shared-data卷
2. 配置GitLab CI流水线(.gitlab-ci.yml)

接下来在你的项目仓库里创建.gitlab-ci.yml,实现自动部署这个Pod到minikube集群:

首先,你需要确保GitLab Runner有权限访问你的K8s集群:

  • 如果用的是K8s类型的Runner,它默认会用集群内的service account,你可以给这个service account添加edit权限(或者更精细的权限)到gitlab-managed-apps命名空间:
kubectl create rolebinding runner-edit --clusterrole=edit --serviceaccount=gitlab-runner:gitlab-runner --namespace=gitlab-managed-apps

然后编写.gitlab-ci.yml:

stages:
  - deploy

deploy-pod:
  stage: deploy
  image: bitnami/kubectl:latest  # 用带kubectl的镜像
  script:
    # 如果是集群内部的Runner,下面的上下文配置可以直接跳过
    - kubectl config set-cluster minikube --server=https://<你的minikube API地址> --certificate-authority=/path/to/ca.crt
    - kubectl config set-credentials gitlab-runner --token=<你的service account token>
    - kubectl config set-context minikube --cluster=minikube --user=gitlab-runner --namespace=gitlab-managed-apps
    - kubectl config use-context minikube
    - kubectl apply -f multi-container-pod.yaml
  only:
    - main  # 按需设置触发分支

小提示:如果你的GitLab Runner是部署在minikube集群内部的,那不需要手动配置kubectl上下文,直接就能访问集群,脚本里可以简化成只保留kubectl apply -f multi-container-pod.yaml这一行。

3. 多仓库架构下的适配方案

如果你的项目采用多仓库(比如Pod配置仓库和业务代码仓库分离),可以用以下两种方式处理:

方式一:用GitLab子模块

把存储Pod配置的仓库作为业务仓库的子模块,这样流水线可以拉取到配置文件:

  • 在业务仓库执行:git submodule add <Pod配置仓库地址> k8s-configs
  • 然后在.gitlab-ci.yml的脚本里先初始化子模块:
script:
  - git submodule init
  - git submodule update
  - kubectl apply -f k8s-configs/multi-container-pod.yaml

方式二:跨仓库触发流水线

如果希望修改Pod配置时自动触发部署,或者业务代码变更时触发部署,可以用GitLab的跨项目流水线触发:

  • 在Pod配置仓库的.gitlab-ci.yml里添加触发业务仓库部署的步骤,或者反过来
  • 比如在业务仓库的流水线里,通过trigger关键字调用配置仓库的部署任务:
deploy-from-config:
  stage: deploy
  trigger:
    project: <你的Pod配置仓库路径>
    branch: main

最后验证一下:流水线执行成功后,你可以通过kubectl exec -it shared-storage-pod -c first-container -- ls /usr/share/nginx/html和kubectl exec -it shared-storage-pod -c second-container -- ls /data来确认两个容器能访问同一个存储卷的内容。

内容的提问来源于stack exchange,提问作者fparaggio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:26:44