Saya sedang mempertimbangkan untuk menggunakan rahasia untuk memasang satu file tetapi tampaknya Anda hanya dapat memasang direktori yang akan menimpa semua konten lainnya. Bagaimana saya bisa berbagi satu file konfigurasi tanpa memasang direktori?
Jawaban:
Misalnya Anda memiliki configmap yang berisi 2 file konfigurasi:
kubectl create configmap config --from-file <file1> --from-file <file2>
Anda dapat menggunakan subPath seperti ini untuk memasang file tunggal ke direktori yang ada:
---
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"
---
Contoh lengkapnya di sini
Saya akan mulai dengan contoh kerja ini dari sini . Pastikan Anda menggunakan setidaknya Kubernetes 1.3.
Cukup buat ConfigMap seperti ini:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Dan kemudian buat pod seperti ini:
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
Saat ini (v1.0, v1.1) tidak ada cara untuk memasang volume satu file konfigurasi. Struktur Rahasia secara alami mampu merepresentasikan banyak rahasia, yang artinya harus berupa direktori.
Ketika kita mendapatkan objek config, file tunggal harus didukung.
Sementara itu, Anda dapat memasang direktori dan menghubungkannya dengan gambar Anda, mungkin?
Katakanlah Anda ingin memasang log4j2.xml baru ke dalam penerapan yang sedang berjalan untuk meningkatkan logging
# 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"}]}]}}}}'