Antworten:
Zum Beispiel haben Sie eine Konfigurationskarte, die 2 Konfigurationsdateien enthält:
kubectl create configmap config --from-file <file1> --from-file <file2>
Sie können subPath wie folgt verwenden, um eine einzelne Datei in ein vorhandenes Verzeichnis einzubinden:
---
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"
---
Vollständiges Beispiel hier
Ich würde von hier aus mit diesem Arbeitsbeispiel beginnen . Stellen Sie sicher, dass Sie mindestens Kubernetes 1.3 verwenden.
Erstellen Sie einfach eine ConfigMap wie folgt:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Und dann erstellen Sie einen Pod wie folgt:
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
Derzeit (v1.0, v1.1) gibt es keine Möglichkeit, eine einzelne Konfigurationsdatei auf einem Volume bereitzustellen. Die geheime Struktur kann natürlich mehrere Geheimnisse darstellen, was bedeutet, dass es sich um ein Verzeichnis handeln muss.
Wenn wir Konfigurationsobjekte erhalten, sollten einzelne Dateien unterstützt werden.
In der Zwischenzeit können Sie vielleicht ein Verzeichnis mounten und von Ihrem Image aus einen Symlink dazu erstellen?
Angenommen, Sie möchten eine neue log4j2.xml in eine laufende Bereitstellung einbinden , um die Protokollierung zu verbessern
# 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"}]}]}}}}'