ConfigMaps trong Kubernetes

Tìm hiểu về ConfigMaps trong Kubernetes, một công cụ rất hữu ích để quản lý cấu hình ứng dụng một cách linh hoạt và dễ dàng.

1. ConfigMaps là gì?

Trong Kubernetes, ConfigMap là một tài nguyên giúp bạn lưu trữ dữ liệu cấu hình bên ngoài container.

Tức là thay vì bạn ghi cứng mấy cái config như DB_URL, API_KEY… vào trong image của container, thì bạn có thể bỏ nó ra ngoài, lưu vào ConfigMap. Nhờ vậy, khi cần chỉnh sửa gì, bạn chỉ cần đổi ở ConfigMap là xong – không phải build lại image container nữa.

Lưu ý: Khi bạn cập nhật ConfigMap, các Pod đang chạy không tự động nhận config mới đâu. Bạn phải restart Pod thì nó mới “nạp” lại config

ConfigMaps trong Kubernetes

2. Tại sao nên dùng ConfigMap?

Việc tách config ra ngoài giúp ích rất nhiều:

  • Dễ cập nhật: Thay đổi cấu hình mà không cần đụng vào container.
  • Quản lý rõ ràng: Dễ dàng kiểm soát và chỉnh sửa config cho ứng dụng.
  • Linh hoạt giữa môi trường: Có thể tạo nhiều ConfigMap cho các môi trường khác nhau như dev, staging, production…

3. Cách tạo và sử dụng ConfigMaps

  • Tạo ConfigMap với YAML: Bạn có thể tạo ConfigMap bằng cách sử dụng một file YAML mô tả các dữ liệu cần lưu trữ.Ví dụ file YAML:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: example-config
    data:
      key: value
    
  • Tạo ConfigMap với kubectl: Bạn cũng có thể tạo ConfigMap bằng cách sử dụng các câu lệnh kubectl từ file, thư mục hoặc giá trị trực tiếp:
    kubectl create configmap example-config --from-literal=key=value
    

4. Liên kết ConfigMap với Pod

Có hai cách để sử dụng ConfigMap trong Pod:

  • Môi trường biến: Bạn có thể gán dữ liệu ConfigMap vào các biến môi trường trong container.
  • Mount như một volume: Bạn cũng có thể mount ConfigMap vào container như một volume.

Ví dụ:

envFrom:
  - configMapRef:
      name: example-config

5. Các câu lệnh kubectl với ConfigMap

Câu lệnh Mô tả
kubectl get cm Liệt kê các ConfigMap trong namespace hiện tại.
kubectl get cm -o wide Liệt kê các ConfigMap với thông tin chi tiết hơn.
kubectl get cm -A Liệt kê tất cả ConfigMap từ tất cả các namespace.
kubectl get cm -n <namespace> Liệt kê ConfigMap trong một namespace cụ thể.
kubectl create cm <config-map-name> --from-literal=<key>=<value> Tạo ConfigMap từ các giá trị literal.
kubectl create cm <config-map-name> --from-file=<file-name> Tạo ConfigMap từ một file.
kubectl create cm <config-map-name> --from-file=<key>=<file-name> Tạo ConfigMap với tên key tùy chỉnh từ một file.
kubectl create cm <config-map-name> --from-file=<file1> --from-file=<file2> Tạo ConfigMap từ nhiều file.
kubectl create cm <config-map-name> --from-file=<directory-name>/ Tạo ConfigMap từ một thư mục.
kubectl create cm <config-map-name> --from-env-file=<env-file> Tạo ConfigMap từ file .env.
kubectl describe cm <config-map-name> Xem chi tiết ConfigMap.
kubectl get cm <config-map-name> -o yaml Xem ConfigMap dưới định dạng YAML.
kubectl get cm <config-map-name> -o json Xem ConfigMap dưới định dạng JSON.
kubectl delete cm <config-map-name> Xóa một ConfigMap.
kubectl create cm <config-map-name> --from-literal=<key>=<value> -L <label> Tạo ConfigMap với nhãn (label).
kubectl get cm -l <label>=<value> Lọc ConfigMap theo nhãn.
kubectl create cm <config-map-name> --from-literal=<key>=<value> -n <namespace> Tạo ConfigMap trong một namespace cụ thể.
kubectl edit cm <config-map-name> Chỉnh sửa ConfigMap.
kubectl get cm <config-map-name> -o=jsonpath='{.data.<key>}' Trích xuất giá trị từ ConfigMap.
kubectl patch cm <config-map-name> -p '{"data": {"<key>": "<new-value>"}}' Cập nhật giá trị trong ConfigMap.
kubectl create cm <config-map-name> --from-literal=<key>=<new-value> --dry-run=client -o yaml > config-map.yaml Thay thế ConfigMap bằng nội dung mới.
kubectl run <pod-name> --image=<image-name> --env-from=configmapref=<config-map-name> Tạo pod với ConfigMap như biến môi trường.
kubectl get cm -o yaml Xuất tất cả ConfigMaps từ namespace.
kubectl get cm --watch Theo dõi thay đổi của ConfigMap.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em