Tek bir dosyayı bağlamak için sır kullanmayı düşünüyordum, ancak görünen o ki, yalnızca diğer tüm içeriğin üzerine yazacak bir dizini bağlayabilirsiniz. Bir dizini bağlamadan tek bir yapılandırma dosyasını nasıl paylaşabilirim?
Yanıtlar:
Örneğin, 2 yapılandırma dosyası içeren bir yapılandırma haritanız var:
kubectl create configmap config --from-file <file1> --from-file <file2>
Tek bir dosyayı mevcut dizine bağlamak için subPath'i şu şekilde kullanabilirsiniz:
---
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"
---
Tam örnek burada
Bu çalışma örneğiyle buradan başlayacağım . En az Kubernetes 1.3 kullandığınızdan emin olun.
Bunun gibi bir ConfigMap oluşturun:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Ve sonra bunun gibi bir bölme oluşturun:
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
Şu anda (v1.0, v1.1) tek bir yapılandırma dosyasını birim bağlamanın bir yolu yoktur. Gizli yapı, doğal olarak birden çok sırrı temsil edebilir, bu da onun bir dizin olması gerektiği anlamına gelir.
Yapılandırma nesneleri aldığımızda, tek dosyalar desteklenmelidir.
Bu arada görüntünüzden bir dizin bağlayabilir ve ona sembolik bağlantı kurabilirsiniz, belki?
Günlük kaydını geliştirmek için çalışan bir dağıtıma yeni bir log4j2.xml eklemek istediğinizi varsayalım
# 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"}]}]}}}}'