Монтирование объема kubernetes в нескольких контейнерах в пакете с помощью gitlab - PullRequest
1 голос
/ 19 июня 2019

Я впервые настраиваю среду CI / CD, состоящую из одного узла kubernetes (миникуб).

На этом узле я создал 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 ]

2 голосов
/ 25 июня 2019

Вот полностью рабочий пример файла манифеста развертывания, в котором в спецификации Pod определены два контейнера (на основе разных образов докера nginx), использующих один и тот же PV, из которого они обслуживают пользовательский статический 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: {}
1 голос
/ 19 июня 2019

Да, вероятно, вы можете запустить несколько контейнеров в одном модуле, совместно используя один PVC.

В CI / CD, если у вас есть несколько репозиториев, и если коммит приходит в одном репо, он создаст новый образ Docker и отправит его в реестр и развернет в кластере k8s.

В CI / CD, если у вас есть план использовать тег latest для маркировки изображений, вы можете использовать несколько контейнеров в pod. будет легко управлять развертыванием, если коммит есть только в одном репозитории.

Если вы планируете использовать SHA: хэш для образов CI / CD-тегов, то как вы будете управлять файлом развертывания, имеющим конфигурацию из двух контейнеров.

...