En mi implementación, me gustaría usar un Reclamo de volumen persistente en combinación con un montaje de mapa de configuración. Por ejemplo, me gustaría lo siguiente:

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

¿Es este un camino posible y viable? ¿Hay alguna forma mejor de abordar esa situación?

1
LoreV 17 abr. 2020 a las 10:48

2 respuestas

La mejor respuesta

Como no dio su caso de uso, mi respuesta se basará en si es posible o no. De hecho: Sí, lo es.

¡Supongo que desea montar el archivo desde un configMap en un punto de montaje que ya contiene otros archivos, y su enfoque para usar subPath es correcto!

Cuando necesite montar diferentes volúmenes en la misma ruta, debe especificar subPath o el contenido del directorio original estará oculto .

En otras palabras, si desea conservar ambos archivos (desde el punto de montaje y desde configMap) debe usar subPath.

Para ilustrar esto, lo probé con el siguiente código de implementación. Allí monte el hostPath /mnt que contiene un archivo llamado filesystem-file.txt en mi pod y el archivo /mnt/configmap-file.txt de mi mapa de configuración test-pd-plus-cfgmap:

Nota: estoy usando Kubernetes 1.18.1

Mapa de configuración:

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

Implementación:


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

Como resultado de la implementación, puede ver el siguiente contenido en /mnt del pod:

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

Puede consultar este problema con el mismo debate.

Aquí puede leer un poco más sobre los volúmenes {{X0} }.

1
LoreV 19 abr. 2020 a las 14:08

Puedes ir con el siguiente enfoque.

En su archivo de plantilla deployment.yaml puede configurar:

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

Y su archivo values.yaml puede definir cualquier fuente de volumen:

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

De esta manera, no tiene que preocuparse por la fuente del volumen. Puede agregar cualquier tipo de fuentes en su archivo values.yaml y desea actualizar la plantilla implementación.yaml

¡Espero que esto ayude!

1
Kalpesh Chaudhari 17 abr. 2020 a las 13:35