溫馨提示×

centos k8s ConfigMap配置管理

小樊
40
2025-10-01 01:12:50
欄目: 智能運維

CentOS環境下Kubernetes ConfigMap配置管理指南

一、ConfigMap概述

ConfigMap是Kubernetes的核心配置管理資源,用于存儲非敏感配置數據(如應用參數、環境變量、配置文件內容),實現配置與容器鏡像解耦。其核心價值在于:

  • 動態配置:無需重新構建鏡像即可修改配置;
  • 多環境適配:通過不同ConfigMap支持開發、測試、生產等環境;
  • 集中管理:所有配置集中存儲在集群中,便于審計和維護。

二、ConfigMap創建方式

在CentOS主機上,可通過命令行YAML文件創建ConfigMap,以下是常見方法:

1. 命令行創建

(1)從字面值創建(--from-literal

適用于簡單鍵值對(如數據庫端口、應用模式):

kubectl create configmap my-config --from-literal=db_port=3306 --from-literal=app_mode=production

(2)從文件創建(--from-file

適用于單個配置文件(如Nginx配置、應用YAML):

echo "server { listen 80; }" > nginx.conf
kubectl create configmap nginx-config --from-file=nginx.conf

(3)從目錄創建(--from-file

適用于批量管理多個配置文件(如Spring Boot的application.yml、logback.xml):

mkdir -p /opt/app/config
echo "spring.application.name=myapp" > /opt/app/config/application.yml
echo "logging.level.root=INFO" >> /opt/app/config/application.yml
kubectl create configmap app-config --from-file=/opt/app/config

(4)從環境文件創建(--from-env-file

適用于.env格式的環境變量文件:

echo "DB_HOST=mysql-service DB_PORT=3306" > .env
kubectl create configmap env-config --from-env-file=.env

2. YAML文件創建

適用于復雜配置(如需要注釋、多鍵值對),步驟如下:

(1)編寫YAML文件(如my-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config  # ConfigMap名稱
  namespace: default  # 所屬命名空間(默認default)
data:
  db_host: mysql-service  # 鍵值對1(應用連接數據庫的主機名)
  db_port: "3306"         # 鍵值對2(端口需為字符串)
  log_level: INFO         # 鍵值對3(日志級別)

(2)應用YAML文件

kubectl apply -f my-config.yaml

3. 驗證ConfigMap

創建后,可通過以下命令檢查:

# 查看ConfigMap列表
kubectl get configmaps

# 查看ConfigMap詳情(包含所有鍵值對)
kubectl describe configmap my-config

# 查看ConfigMap的YAML格式內容
kubectl get configmap my-config -o yaml

三、ConfigMap在Pod中的使用方式

ConfigMap創建后,需通過Pod的spec字段將其配置注入容器,主要有三種方式:

1. 作為環境變量注入

通過envFromenv字段,將ConfigMap的鍵值對轉換為容器的環境變量:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest
    envFrom:  # 直接引用整個ConfigMap的所有鍵值對
    - configMapRef:
        name: my-config  # ConfigMap名稱
    # 或通過env字段引用單個鍵(需指定key)
    # env:
    # - name: DB_PORT  # 容器內環境變量名
    #   valueFrom:
    #     configMapKeyRef:
    #       name: my-config
    #       key: db_port

容器內可通過echo $DB_HOSTprintenv查看環境變量。

2. 掛載為文件/目錄

通過volumes字段,將ConfigMap的內容掛載到容器的指定路徑(每個鍵對應一個文件,值為文件內容):

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest
    volumeMounts:
    - name: config-volume  # 卷名稱(與volumes中的name一致)
      mountPath: /etc/app/config  # 容器內掛載路徑
      readOnly: true  # 只讀掛載
  volumes:
  - name: config-volume
    configMap:
      name: my-config  # ConfigMap名稱
      # 可選:僅掛載部分鍵(避免掛載不必要的配置)
      # items:
      # - key: db_host
      #   path: db_host.conf  # 容器內文件名(自定義)

容器內可通過cat /etc/app/config/db_host查看文件內容。

3. 作為命令行參數

通過args字段,將ConfigMap的值作為命令行參數傳遞給應用:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "echo 'Database Host: $(DB_HOST), Port: $(DB_PORT)'"]
    envFrom:
    - configMapRef:
        name: my-config

容器啟動后,會輸出Database Host: mysql-service, Port: 3306。

四、ConfigMap更新與管理

1. 更新ConfigMap

(1)修改YAML文件后重新應用

kubectl apply -f my-config.yaml  # 修改YAML中的data字段后重新apply

(2)命令行修改(kubectl edit

kubectl edit configmap my-config  # 直接編輯ConfigMap內容

修改后,集群會自動更新ConfigMap的etcd存儲。

2. 更新生效方式

  • Volume掛載:若ConfigMap以文件形式掛載,Kubernetes會自動同步更新(默認延遲約1分鐘,可通過kubectl rollout status檢查);
  • 環境變量:環境變量不會自動更新,需重啟Pod(kubectl delete pod my-pod)使新配置生效;
  • 命令行參數:同環境變量,需重啟Pod。

3. 刪除ConfigMap

kubectl delete configmap my-config  # 刪除指定ConfigMap

刪除前需確保無Pod依賴該ConfigMap(否則Pod會報錯)。

五、注意事項

  1. 命名空間限制:ConfigMap僅能被同一命名空間的Pod引用;
  2. 鍵名規范:鍵名需符合DNS子域名規范(如my.config.key,不能以數字開頭);
  3. 大小寫敏感:鍵名區分大小寫(DB_HOSTdb_host視為不同鍵);
  4. 敏感信息處理:ConfigMap不適合存儲敏感信息(如密碼、密鑰),此類信息應使用Secret資源;
  5. 容量限制:單個ConfigMap的data大小不超過1MB(避免性能問題)。

通過以上步驟,可在CentOS環境下高效使用Kubernetes ConfigMap實現應用配置管理,提升部署靈活性和環境適應性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女