J'envisageais d'utiliser des secrets pour monter un seul fichier mais il semble que vous ne pouvez monter que le répertoire qui écrasera tout le reste du contenu. Comment puis-je partager un seul fichier de configuration sans monter un répertoire?
Réponses:
Par exemple, vous avez un configmap qui contient 2 fichiers de configuration:
kubectl create configmap config --from-file <file1> --from-file <file2>
Vous pouvez utiliser subPath comme celui-ci pour monter un seul fichier dans un répertoire existant:
---
volumeMounts:
- name: "config"
mountPath: "/<existing folder>/<file1>"
subPath: "<file1>"
- name: "config"
mountPath: "/<existing folder>/<file2>"
subPath: "<file2>"
restartPolicy: Always
volumes:
- name: "config"
configMap:
name: "config"
---
Exemple complet ici
Je commencerais par cet exemple de travail à partir d' ici . Assurez-vous d'utiliser au moins Kubernetes 1.3.
Créez simplement un ConfigMap comme celui-ci:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Et puis créez un pod comme celui-ci:
apiVersion: v1
kind: Pod
metadata:
name: test-pd-plus-cfgmap
spec:
containers:
- image: ubuntu
name: bash
stdin: true
stdinOnce: true
tty: true
volumeMounts:
- mountPath: /mnt
name: pd
- mountPath: /mnt/file-from-cfgmap
name: cfgmap
subPath: file-from-cfgmap
volumes:
- name: pd
gcePersistentDisk:
pdName: testdisk
- name: cfgmap
configMap:
name: test-pd-plus-cfgmap
Il n'y a actuellement (v1.0, v1.1) aucun moyen de monter en volume un seul fichier de configuration. La structure Secret est naturellement capable de représenter plusieurs secrets, ce qui signifie qu'elle doit être un répertoire.
Lorsque nous obtenons des objets de configuration, des fichiers uniques doivent être pris en charge.
En attendant, vous pouvez monter un répertoire et y créer un lien symbolique à partir de votre image, peut-être?
Supposons que vous souhaitiez monter un nouveau log4j2.xml dans un déploiement en cours pour améliorer la journalisation
# Variables
k8s_namespace=xcs
deployment_name=orders-service
container_name=orders-service
container_working_dir=/opt/orders-service
# Create config map and patch deployment
kubectl -n ${k8s_namespace} create cm log4j \
--from-file=log4j2.xml=./log4j2.xml
kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
-p '{"spec":{"template":{"spec":{"volumes":[{"configMap":{"defaultMode": 420,"name": "log4j"},"name": "log4j"}]}}}}'
kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
-p '{"spec":{"template":{"spec":{"containers":[{"name": "'${container_name}'","volumeMounts": [{ "mountPath": "'${container_working_dir}'/log4j2.xml","name": "log4j","subPath": "log4j2.xml"}]}]}}}}'