ConfigMap подключен к утверждениям о постоянных томах - PullRequest
1 голос
/ 17 апреля 2020

В моем развертывании я хотел бы использовать Заявку на постоянный том в сочетании с подключением карты конфигурации. Например, я хотел бы следующее:

volumeMounts:
    - name: py-js-storage
        mountPath: /home/python
    - name: my-config
        mountPath: /home/python/my-config.properties
        subPath: my-config.properties
        readOnly: true
...
    volumes:
    - name: py-storage
    {{- if .Values.py.persistence.enabled }}
        persistentVolumeClaim:
        claimName: python-storage
    {{- else }}
        emptyDir: {}
    {{- end }}

Это возможный и жизнеспособный путь к go? Есть ли лучший способ подойти к такой ситуации?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы можете go при следующем подходе.

В своем файле шаблона deploy.yaml вы можете настроить:

...
{{- if .Values.volumeMounts }}
        volumeMounts:
{{- range .Values.volumeMounts }}
        - name: {{ .name }}
          mountPath: {{ .mountPath }}
{{- end }}
{{- end }}
...
{{- if .Values.volumeMounts }}
      volumes:
{{- range .Values.volumeMounts }}
      - name: {{ .name }}
{{ toYaml .volumeSource | indent 8 }}
{{- end }}
{{- end }}

И ваш Файл values.yaml позволяет определить любые источники томов:

volumeMounts:
  - name: volume-mount-1
    mountPath: /var/data
    volumeSource:
      persistentVolumeClaim:
        claimName: pvc-name
  - name: volume-mount-2
    mountPath: /var/config
    volumeSource:
      configMap:
        name: config-map-name

Таким образом, вам не нужно беспокоиться об источнике тома. Вы можете добавить любой тип источников в ваш файл values.yaml и вам нужно обновить deploy.yaml шаблон

Надеюсь, это поможет!

1 голос
/ 17 апреля 2020

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

Я полагаю, вы sh смонтируете файл из configMap в точке монтирования, которая уже содержит другие файлы, и ваш подход к используйте subPath правильно!

Когда вам нужно смонтировать разные тома по одному и тому же пути, вам нужно указать subPath, или содержимое исходного каталога будет скрыто .

Другими словами, если вы хотите сохранить оба файла (из точки монтирования и из configMap), вы должны использовать subPath.

Для проиллюстрируйте это, я протестировал с кодом развертывания ниже. Там я монтирую hostPath /mnt, который содержит файл с именем filesystem-file.txt в моем модуле и файл /mnt/configmap-file.txt из моей конфигурации test-pd-plus-cfgmap:

Примечание: I Я использую Kubernetes 1.18.1

Configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-pd-plus-cfgmap
data:
  file-from-cfgmap: file data

Развертывание:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-pv
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-pv
  template:
    metadata:
      labels:
        app: test-pv
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - mountPath: /mnt
          name: task-pv-storage
        - mountPath: /mnt/configmap-file.txt
          subPath: configmap-file.txt
          name: task-cm-file
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: task-pv-claim
        - name: task-cm-file
          configMap:
            name: test-pd-plus-cfgmap

В результате развертывания вы можете увидеть следующее содержимое в /mnt пакета:

$ kubectl exec test-pv-5bcb54bd46-q2xwm -- ls /mnt
configmap-file.txt
filesystem-file.txt

Вы можете проверить этот github issue с тем же обсуждением.

Здесь Вы можете прочитать немного больше о томах subPath.

...