使用gitlab在一个容器中的多个容器中安装kubernetes卷

时间:2019-06-19 11:37:36

标签: kubernetes gitlab gitlab-ci minikube persistent-volumes

我第一次设置一个由单节点kubernetes(minikube)组成的CI / CD环境。

在此节点上,我创建了一个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

和PVC

NAME                STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-volume-claim   Bound    data-volume   1Gi        RWO            manual         19m

现在,我想创建一个具有多个访问此卷的容器的容器。

您在哪里以及如何建议使用gitlab管道gitlab-ci等进行设置?多个存储库可能最适合该项目。

2 个答案:

答案 0 :(得分:2)

这是部署清单文件的完整工作示例,在Pod的规范中,使用相同的PV定义了两个容器(基于不同的nginx docker映像),它们分别在其中从端口80/81提供自定义静态html内容: / p>

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

答案 1 :(得分:1)

是的,您可以在一个容器中运行多个容器,共享一个PVC。

在CI / CD中,如果您有多个存储库,并且在一个存储库中包含提交,它将创建新的Docker映像并将其推送到注册表并部署到k8s集群。

在CI / CD中,如果您计划使用latest标签进行图像标记,则可以在pod中使用多容器。如果仅在一个存储库中进行提交,则将易于管理部署。

如果计划将SHA:hash用于CI / CD标记映像,那么如何管理具有两个容器配置的部署文件。

相关问题