Cấu hình ConfigMap trong Kubernetes

Cấu hình ConfigMap trong KubernetesCuongquach.com | Khi bạn quản lý các ứng dụng Deployment/Pod trong Kubernetes, chắc chắn sẽ có nhu cầu cấu hình các biến môi trường cho Pod hoặc khởi tạo file config cho dịch vụ Container theo cách nào đấy linh động nếu ứng dụng của bạn có mặt ở nhiều môi trường khác nhau như UAT/QA/DEV/TESTING. Thì resource ConfigMap trong Kubernetes vô cùng tiện lợi để hỗ trợ bạn những công việc như vậy.

configmap-kubernetes

ConfigMap là gì trong Kubernetes ?

ConfigMap là một resource trong Kubernetes giúp bạn quản lý được file cấu hình ứng dụng, nội dung file cấu hình ứng dụng, các giá trị truyền cho lệnh command-line, port ứng dụng,… và rất nhiều thứ khác có thể hỗ trợ khi bạn khai báo các thành phần của 1 Pod.

ConfigMap giúp ứng dụng của bạn tách biệt phần code ứng dụng với nội dung cấu hình về hệ thống. Ví dụ như bạn dễ dàng thay đổi cấu hình về môi trường Dev/QA/UAT/Production như database connection string, domain, hostname, url,… mà không cần phải can thiệp vào code. Một trong những điều quan trọng của 12Factor (https://12factor.net/vi/config).

ConfigMap rất hữu ích để lưu trữ và chia sẻ thông tin cấu hình không nhạy cảm, không được mã hóa. Để sử dụng thông tin nhạy cảm trong cụm của bạn, bạn phải sử dụng Bí mật.

Khởi tạo ConfigMap trong Kubernetes

Bạn có vài cách khởi tạo ConfigMap như : khai báo cấu hình định dạng YAML rồi apply config hay tạo ConfigMap từ command line.

+ Command line

# kubectl create configmap <name> <data>

Trong đó:

  • name: là tên của ConfigMap.
  • data: dữ liệu của ConfigMap với 2 hình thức cung cấp dữ liệu như sau
    + –from-file: load dữ liệu key-value cho ConfigMap từ file
    + –from-literal: tạo key-value cho ConfigMap từ command arguments trực tiếp.

Ví dụ ta tạo trực tiếp ConfigMap từ command line, rồi coi thông tin ConfigMap mà ta đã tạo thử.

# kubectl create configmap cuongquach-settings --from-literal env=production --from-literal domain=cuongquach.com
configmap/cuongquach-settings created

# kubectl get configmap cuongquach-settings -o yaml
apiVersion: v1
data:
  domain: cuongquach.com
  env: production
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-11T08:51:52Z"
  name: cuongquach-settings
  namespace: default
  resourceVersion: "151390"
  selfLink: /api/v1/namespaces/default/configmaps/cuongquach-settings
  uid: 897a053d-3af1-416d-bcee-5924760bc68b

Rồi tạo một ConfigMap khác từ command line với input từ file nào.

# cat << EOF > config.properties
env=development
domain=cuongquach.com
password=helloguys
EOF

# kubectl create configmap cuongquach-settings-2 --from-file config.properties
configmap/cuongquach-settings-2 created

# kubectl get configmap cuongquach-settings-2 -o yaml
apiVersion: v1
data:
  config.properties: |
    env=development
    domain=cuongquach.com
    password=helloguys
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-11T09:12:55Z"
  name: cuongquach-settings-2
  namespace: default
  resourceVersion: "152916"
  selfLink: /api/v1/namespaces/default/configmaps/cuongquach-settings-2
  uid: ebecc338-d370-4a29-9647-acd6adecce5d

+ ConfigMap với YAML Manifest

Ok bạn cũng có thể tạo một file YAML Manifest để định nghĩa về tài nguyên ConfigMap trên hệ thống Kubernetes đấy.

# cat << EOF > cuongquach-configmap.yaml
kind: ConfigMap 
apiVersion: v1 
metadata:
  name: cuongquach-db1 
data:
  # Configuration values can be set as key-value properties
  database: mongodb
  database_uri: mongodb://localhost:27017
  mysqld_config: |-
    [mysqld]
    tmp_table_size = 128M
    max_heap_table_size = 32M
    key_buffer_size = 16M
    max_allowed_packet = 64M
    table_open_cache = 600
    table_cache = 1024
EOF

# kubectl create -f cuongquach-configmap.yaml
configmap/cuongquach-db1 created

# kubectl get configmap cuongquach-db1 -o yaml
apiVersion: v1
data:
  database: mongodb
  database_uri: mongodb://localhost:27017
  mysqld_config: |-
    [mysqld]
    tmp_table_size = 128M
    max_heap_table_size = 32M
    key_buffer_size = 16M
    max_allowed_packet = 64M
    table_open_cache = 600
    table_cache = 1024
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-11T09:39:36Z"
  name: cuongquach-db1
  namespace: default
  resourceVersion: "154856"
  selfLink: /api/v1/namespaces/default/configmaps/cuongquach-db1
  uid: 2c878a3f-238a-47f9-92d2-71de7f442ef2

Sử dụng ConfigMap với Pod Kubernetes

Mình không đề cập chi tiết cách sử dụng ConfigMap với Pod Kubernetes ở phần này, nhưng có 3 kiểu sử dụng ConfigMap với Pod :

  • Load toàn bộ key-value data của một ConfigMap thành biến môi trường trong 1 Pod app.
kind: Pod 
apiVersion: v1 
metadata:
  name: cuongquach-test-pod
spec:
  containers:
    - name: cuongquach-test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
        - configMapRef:
            name: cuongquach-db1
  • Load một giá trị biến môi trường được khai báo trong Pod từ ConfigMap key cụ thể.
apiVersion: v1
kind: Pod
metadata:
  name: cuongquach-test-pod
spec:
  containers:
    - name: cuongquach-test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: DATABASE_URI
          valueFrom:
            configMapKeyRef:
              name: cuongquach-db1
              key: database_uri
  restartPolicy: Never
  • Hoặc bạn cũng có thể mount volume file config trong app container từ ConfigMap đấy.
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql-cuongquach
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: mysql-cuongquach
    spec:
      containers:
      - image: mysql:5.7
        name: mysql-cuongquach
        imagePullPolicy: Always
        ports:
        - containerPort: 3306
        volumeMounts:
            - name: mysqld-config
              mountPath: /etc/mysql/conf.d
      volumes:
        - name: mysqld-config
          configMap:
             name: cuongquach-db1
             items:
              - key: mysqld_config
                path: my.cnf

Nguồn: https://cuongquach.com/

Previous articleHướng dẫn backup và restore Docker Container
Next articleTop 10 Trường Đại học Việt Nam đào tạo ngành An ninh mạng
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !