Je vais avoir deux cartes de configuration différentes test-configmap et common-config . J'ai essayé de les monter au même endroit, mais une carte de configuration a remplacé l'autre. Ensuite, j'ai lu à propos de subPath
et je n'ai pas travaillé.
deploy.yaml
apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: testing
spec:
replicas: 1
template:
metadata:
name: testing
labels:
app: testing
spec:
containers:
- name: testing-container
image: testing
imagePullPolicy: IfNotPresent
ports:
- containerPort: __PORT__
volumeMounts:
- name: commonconfig-volume
mountPath: /usr/src/app/config/test.config
subPath: test.config
volumes:
- name: commonconfig-volume
configMap:
name: test-configmap
- name: commonconfig-volume
configMap:
name: common-config
Erreur :
The Deployment "testing" is invalid: spec.template.spec.volumes[1].name: Duplicate value: "commonconfig-volume"
Je ne sais pas si la fusion de deux cartes de configuration est réalisable ou non. Et si oui, comment devrais-je le faire?.
Vous ne pouvez pas monter deux ConfigMaps au même emplacement.
Mais mentionner subPath
et key
pour chaque élément de chaque configmaps vous permettra d'obtenir des éléments des deux configmaps au même endroit. Vous devrez écrire les points de montage pour chaque fichier manuellement:
apiVersion: v1
kind: Pod
metadata:
name: config-single-file-volume-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", "cat /etc/special-key" ]
volumeMounts:
- name: config-volume-1
mountPath: /etc/special-key1
subPath: path/to/special-key1
- name: config-volume-2
mountPath: /etc/special-key2
subPath: path/to/special-key2
volumes:
- name: config-volume-1
configMap:
name: test-configmap1
items:
- key: data-1
path: path/to/special-key1
- name: config-volume-2
configMap:
name: test-configmap2
items:
- key: data-2
path: path/to/special-key2
restartPolicy: Never
Une autre méthode consiste à les monter dans le même répertoire, mais sous-chemin différent, de sorte que vous n'ayez pas à spécifier les éléments à la main. Mais ici, les clés de chaque configmap seront placées dans deux répertoires différents:
apiVersion: v1
kind: Pod
metadata:
name: config-single-file-volume-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", "cat /etc/special-key" ]
volumeMounts:
- name: config-volume-1
mountPath: /etc/special-keys
subPath: cm1
- name: config-volume-2
mountPath: /etc/special-keys
subPath: cm2
volumes:
- name: config-volume-1
configMap:
name: test-configmap1
- name: config-volume-2
configMap:
name: test-configmap2
restartPolicy: Never
cm1
et cm2
seront deux répertoires contenant des fichiers dérivés des clés dans test-configmap1
et test-configmap2
respectivement.
Vous devez utiliser des volumes spéciaux prévus pour y parvenir. Exemple de votre déploiement:
apiVersion: apps/v1
kind: Deployment
metadata:
name: testing
spec:
replicas: 1
selector:
matchLabels:
app: testing
template:
metadata:
name: testing
labels:
app: testing
spec:
containers:
- name: testing-container
image: testing
imagePullPolicy: IfNotPresent
ports:
- containerPort: __PORT__
volumeMounts:
- name: commonconfig-volume
mountPath: /usr/src/app/config
volumes:
- name: commonconfig-volume
projected:
sources:
- configMap:
name: test-configmap
- configMap:
name: common-config
Vous pouvez utiliser secret
identique à configMap
Une solution consiste à les monter à différents endroits, mais dans le même volume emptyDir
, en montant ce même volume dans un conteneur init et en incluant un court script dans le conteneur init pour fusionner les deux fichiers à l'aide des outils début du script. Les scripts peuvent facilement être inclus dans le manifeste de pod en utilisant la technique décrite dans this answer.