Tôi đã xem xét sử dụng bí mật để gắn kết một tệp duy nhất nhưng có vẻ như bạn chỉ có thể gắn kết thư mục sẽ ghi đè tất cả nội dung khác. Làm cách nào để chia sẻ một tệp cấu hình duy nhất mà không cần gắn thư mục?
Câu trả lời:
Ví dụ: bạn có một sơ đồ cấu hình chứa 2 tệp cấu hình:
kubectl create configmap config --from-file <file1> --from-file <file2>
Bạn có thể sử dụng subPath như thế này để gắn kết một tệp vào thư mục hiện có:
---
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"
---
Đầy đủ ví dụ ở đây
Tôi sẽ bắt đầu với ví dụ làm việc này từ đây . Đảm bảo rằng bạn đang sử dụng ít nhất Kubernetes 1.3.
Đơn giản chỉ cần tạo một Bản đồ cấu hình như sau:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Và sau đó tạo một nhóm như thế này:
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
Hiện tại (v1.0, v1.1) không có cách nào để gắn khối lượng một tệp cấu hình duy nhất. Cấu trúc Bí mật đương nhiên có khả năng đại diện cho nhiều bí mật, có nghĩa là nó phải là một thư mục.
Khi chúng tôi nhận được các đối tượng cấu hình, các tệp đơn lẻ sẽ được hỗ trợ.
Trong thời gian ngắn, bạn có thể gắn một thư mục và liên kết biểu tượng vào nó từ hình ảnh của bạn, có thể không?
Giả sử bạn muốn gắn một log4j2.xml mới vào một triển khai đang chạy để tăng cường ghi nhật ký
# 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"}]}]}}}}'