Я розглядав можливість використання секретів для монтування одного файлу, але, схоже, ви можете монтувати лише каталог, який замінить весь інший вміст. Як я можу поділитися одним конфігураційним файлом без монтажу каталогу?
Відповіді:
Наприклад, у вас є конфігураційна карта, яка містить 2 конфігураційні файли:
kubectl create configmap config --from-file <file1> --from-file <file2>
Ви можете скористатися таким способом subPath, щоб підключити один файл до існуючого каталогу:
---
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"
---
Повний приклад тут
Я б почав з цього робочого прикладу звідси . Переконайтеся, що ви використовуєте принаймні Kubernetes 1.3.
Просто створіть ConfigMap таким чином:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
А потім створіть такий стручок:
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
Наразі (v1.0, v1.1) немає способу монтувати один конфігураційний файл. Структура Secret, природно, здатна представляти безліч секретів, а це означає, що вона повинна бути каталогом.
Коли ми отримуємо конфігураційні об’єкти, слід підтримувати окремі файли.
Тим часом ви можете змонтувати каталог і, можливо, символічне посилання на нього зі свого зображення?
Скажімо, ви хочете підключити новий log4j2.xml до запущеного розгортання для покращення ведення журналу
# 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"}]}]}}}}'