Облачная платформа Google (GCP): монтирование нескольких томов кубернет - PullRequest
2 голосов
/ 20 сентября 2019

Я настраиваю контейнер с помощью движка kubernetes облачной платформы Google (GCP).У меня есть требование монтировать несколько томов, так как контейнеры создаются таким образом.Эти объемы должны быть постоянными, и поэтому я пошел с подходом NFS.У меня есть виртуальная машина, на которой работает служба NFS, и она экспортирует несколько каталогов.

Ниже приведены примеры файлов yaml.

deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-branch
  labels:
    component: myapp-branch
spec:
  template:
    metadata:
      labels:
        component: myapp-branch
    spec:
      imagePullSecrets:
       - name: myprivatekey
      containers:
        - name: myapp-branch
          image: mydockerrepo/myapp/webapp:6.6
          command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 100 ; done"]
          env:
          - name: myapp_UID
            value: "1011"
          - name: myapp_GID
            value: "1011"
          - name: myapp_USER 
            value: "myapp_branch"
          - name: myapp_XMS_G
            value: "1"
          - name: myapp_XMX_G
            value: "6"
          volumeMounts:
          - mountPath: /mypath1/path1
            name: pvstorestorage
          - mountPath: /mypath2/path2
            name: mykeys
      volumes:
      - name: pvstorestorage
        persistentVolumeClaim:
          claimName: standalone
      - name: mykeys
        persistentVolumeClaim:
          claimName: conf

PVAndPVC.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: standalone
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: standalone
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: conf
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path2"

---    

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: conf
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi

после их применения я вижу, что оба тома-монтирования контейнера (/ mypath1 / path1 и / mypath2 / path2) монтируются в одно и то жеточка монтирования nfs (/ exports / path2, второй).Это происходит с persistentVolumeClaim, я пробовал EmptyDir, он работает нормально.Если бы кто-то попробовал этот подход и знал решение, это было бы очень полезно.

1 Ответ

1 голос
/ 20 сентября 2019

Вы должны добавить правило в определения PVC (PersistentVolumeClaim), чтобы они соответствовали их правильному соответствующему PV (PersistentVolume).

Одного имени недостаточно,

Измените PVи определения PVC в нечто вроде (не проверено):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: standalone
  labels:
    type: standalone
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path1"
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: conf
  labels:
    type: conf
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path2"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: standalone
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      type: standalone
---    

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: conf
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      type: conf

(обычно я добавляю metadata.labels.type в PV и spec.selector.matchLabels в PVC)

Такжеиспользуйте kubectl get pv и kubectl get pvc, чтобы увидеть, как это работает, и упростить отладку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...