Quản lý Cấu hình ứng dụng với ConfigMap trong Kubernetes

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-8
  • binaryData: Lưu dữ liệu nhị phân dưới dạng base64

ConfigMap không thể thay đổi

Kubernetes v1.21 [stable]

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

  1. Tham số dòng lệnh container
  2. Biến môi trường container
  3. Tệp cấu hình trong volume chỉ đọc
  4. Truy cập trực tiếp Kubernetes API

Cấu hình qua tham số

Các trường commandargs trong Kubernetes tương ứng với:

  • ENTRYPOINTCMD trong 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

Thẻ: Kubernetes ConfigMap K8s-cấu-hình container yaml

Đăng vào ngày 24 tháng 8 lúc 16:50