Estaba considerando usar secretos para montar un solo archivo, pero parece que solo puede montar el directorio que sobrescribirá todo el resto del contenido. ¿Cómo puedo compartir un solo archivo de configuración sin montar un directorio?
Respuestas:
Por ejemplo, tiene un mapa de configuración que contiene 2 archivos de configuración:
kubectl create configmap config --from-file <file1> --from-file <file2>
Puede usar subPath como este para montar un solo archivo en un directorio existente:
---
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"
---
Ejemplo completo aquí
Comenzaría con este ejemplo de trabajo desde aquí . Asegúrese de que está utilizando al menos Kubernetes 1.3.
Simplemente cree un ConfigMap como este:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Y luego crea un pod como este:
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
Actualmente (v1.0, v1.1) no hay forma de montar un solo archivo de configuración por volumen. La estructura Secreta es naturalmente capaz de representar múltiples secretos, lo que significa que debe ser un directorio.
Cuando obtenemos objetos de configuración, se deben admitir archivos individuales.
Mientras tanto, puede montar un directorio y un enlace simbólico a él desde su imagen, ¿tal vez?
Supongamos que desea montar un nuevo log4j2.xml en una implementación en ejecución para mejorar el registro
# 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"}]}]}}}}'