Tổng quan về ConfigMap
ConfigMap là một đối tượng API dùng để lưu trữ dữ liệu không bí mật dưới dạng cặp khóa-giá trị. Pod có thể sử dụng chúng như biến môi trường, tham số dòng lệnh hoặc tệp cấu hình trong storage.
Lưu ý: ConfigMap không cung cấp tính năng mã hóa. Để lưu trữ dữ liệu nhạy cảm, hãy sử dụng Secret hoặc công cụ bên thứ ba.
ConfigMap có giới hạn kích thước 1 MiB. Đối với dữ liệu lớn hơn, hãy xem xét sử dụng volume storage hoặc các dịch vụ cơ sở dữ liệu riêng biệt.
Cấu trúc ConfigMap
Khác với các đối tượng Kubernetes khác, ConfigMap sử dụng các trường:
data: Lưu chuỗi UTF-8binaryData: Lưu dữ liệu nhị phân dưới dạng base64
ConfigMap không thể thay đổi
Tính năng này cho phép đánh dấu ConfigMap là immutable, mang lại lợi ích:
- Bảo vệ ứng dụng khỏi cập nhật không mong muốn
- Giảm tải cho kube-apiserver
Kích hoạt bằng cách thiết lập trường immutable: true:
apiVersion: v1
kind: ConfigMap
metadata:
name: immutable-config
binaryData:
binary.file: ...
data:
text.file: ...
<strong>immutable: true</strong>
Phương thức cấu hình
- Tham số dòng lệnh container
- Biến môi trường container
- Tệp cấu hình trong volume chỉ đọc
- Truy cập trực tiếp Kubernetes API
Cấu hình qua tham số
Các trường command và args trong Kubernetes tương ứng với:
ENTRYPOINTvàCMDtrong Dockerfile- Tùy chỉnh này sẽ ghi đè giá trị mặc định của image
Cấu hình qua biến môi trường
Sử dụng trường env trong container specification:
env:
- name: DEBUG_MODE
value: "1"
Kiểm tra biến môi trường:
kubectl exec -it pod-name -- printenv
Tạo ConfigMap
1. Tạo từ cặp khóa-giá trị
kubectl create configmap web-config --from-literal=port=8080
2. Tạo từ tệp
kubectl create configmap nginx-conf --from-file=nginx.conf
3. Tạo từ thư mục
kubectl create configmap multi-config --from-file=./conf-dir/
Mount ConfigMap qua Volume
Mount toàn bộ volume
Tạo ConfigMap từ thư mục cấu hình:
kubectl create configmap nginx-conf --from-file=./nginx-conf/
Pod manifest tham chiếu ConfigMap:
apiVersion: v1
kind: Pod
metadata:
name: webapp-pod
spec:
containers:
- image: nginx:latest
name: nginx-server
volumeMounts:
- name: conf-volume
mountPath: /etc/nginx/conf.d
volumes:
- name: conf-volume
configMap:
name: nginx-conf
Xác định khóa cụ thể
Sử dụng trường items để chọn tệp cụ thể:
volumes:
- name: ssl-config
configMap:
name: tls-config
items:
- key: server.key
path: tls.key
- key: server.crt
path: tls.crt
Mount khóa đơn lẻ
Sử dụng subPath để mount tệp riêng lẻ:
volumeMounts:
- name: config-volume
mountPath: /app/config.yaml
subPath: app-config.yaml