【Kubernetesリソース】ConfigMap構成管理センターの詳細説明

1. ConfigMap 構成センターの理論的知識

1. ConfigMap 構成センターの概要

中国の公式参考文書:

ConfigMap は、プレーンテキスト (非機密) データをキーと値のペアで保存するために使用される API オブジェクトです。環境変数、コマンド ライン パラメーター、またはストレージ ボリュームを使用して Pod に適用できます。ConfigMap は、次の構成ファイルと同等です。ポッド内のプログラム。ConfigMap コンテンツの変更を通じて、プログラムの構成を変更します。

2. ConfigMap の制限事項

ConfigMap は大量のデータを保存するように設計されていないため、ConfigMap に保存されるデータは 1MiB を超えることはできません。

2. ConfigMap を作成する 4 つの方法

1. 最初の方法: コマンド ラインを使用して ConfigMap を作成します。

mysql.confという名前の構成マップを作成します

kubectl create configmap mysql.conf --from-literal=datadir=/var/lib/mysql --from-literal=socket=/var/lib/mysql/mysql.sock

構成マップの詳細を表示します。

kubectl describe cm  mysql.conf

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-4sgFWDuK-1688205066564) (D:\MD Archives\IMG\image-20230627212430774.png) )]

2. 2 番目の方法: ファイルを指定して ConfigMap を作成する

まず、nginx.conf ファイルを作成し、nginx.conf ファイルの構成マップを作成します。

vim nginx.conf

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    
    
    worker_connections  1024;
}


http {
    
    
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

nginx.confという名前の構成マップを作成し、--from-fileパラメータを使用してファイルの場所を指定します

kubectl create configmap nginx.conf --from-file=www=./nginx.conf

詳細の表示: key=www、value=./nginx.conf でコンテンツを定義します。

kubectl describe cm nginx.conf

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-gsuEAdWO-1688205066566) (D:\MD Archives\IMG\image-20230627213525723)。 png)]

3. 3 番目の方法: ディレクトリを指定して ConfigMap を作成する

まず config ディレクトリを作成し、そのディレクトリ内に nginx および mysql 構成ファイルを作成し、--from-fileパラメータを使用して config ディレクトリを指定します。

mkdir config && cd config

vim nginx.conf

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    
    
    worker_connections  1024;
}


http {
    
    
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

vim my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d

configconfigmapを作成するディレクトリを指定してください

kubectl create cm config --from-file=./config

詳細を表示: キーの名前はディレクトリ内のファイル名に基づいて付けられます。

kubectl describe cm config

ここに画像の説明を挿入

4. 4 番目の方法: YAML リソース リストを使用して ConfigMap を作成します。

db-configconfigmap、定義master.cnf slave.cnfキーの作成

cat db-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: db-config
  labels:
    app: db
data:
  master.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=1
  slave.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=2

YAML ファイルを実行します。

kubectl apply -f db-config.yaml

構成マップの詳細を表示しますdb-config

kubectl describe cm db-config

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-CnNLBp2k-1688205066566) (D:\MD Archives\IMG\image-20230629113041746.png) )]

3. ConfigMap の 3 つの使用方法

上記はキー/値メソッドで設定ファイルの情報を定義する方法でしたが、設定ファイルを参照する方法を学びましょう。

1. 最初の方法: 環境変数を使用して -configMapKeyRef メソッドを導入します

nginx-config次の名前の構成マップを作成します。

cat nginx-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
  labels:
    app: nginx
    env: uat
data:
  nginx.conf: |
    user  nginx;
    worker_processes  auto;
    error_log  /var/log/nginx/nginx-error.log notice;
    pid        /var/run/nginx.pid;
    
    
    events {
    
    
        worker_connections  1024;
    }
    
    
    http {
    
    
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        include /etc/nginx/conf.d/*.conf;
    }
     

デプロイメントリソースを作成し、コンテナ内のnginx-config構成マップのnginx.confキーを参照します。

cat web-nginx.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-nginx
  labels:
    app: nginx
    env: uat
spec:
  replicas: 1
  selector:          # 关联标签
    matchLabels:
      app: nginx
      env: uat
  strategy:
    rollingUpdate:   # 更新策略
      maxSurge: 2
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: nginx
        env: uat
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        env:
        - name: nginxConfig    # 定义环境变量名称
          valueFrom:
            configMapKeyRef:
              name: nginx-config # 指定configmap名称
              key: nginx.conf    # 指定configmap中Key

YAML ファイルを実行します。

kubectl apply -f nginx-config.yaml
kubectl apply -f  web-nginx.yaml 

作成されたリソース情報を表示します。

kubectl get pods -l app=nginx
kubectl get configmap nginx-config

作成した Pod にコンテナーを入力して、変数情報を表示します。

kubectl exec -it web-nginx-84989c5546-6clp4  -- /bin/bash
printenv

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-938y5FRL-1688205066567) (D:\MD Archives\IMG\image-20230701161133785.png) )]

Pod リソースを作成するときにコマンドを使用して、変数を参照して操作を開始できます。たとえば、MongoDB の操作を開始するには、次のようにします。

command: ["/bin/mongod", "--bind_ip=$(变量名)"]

2. 2 番目の方法: 環境変数を使用して -envfrom メソッドを導入する

mysql-config2 つの KEY が定義された configmapを作成します。

cat mysql-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  master.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=1
  slave.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=2

デプロイメントを作成し、 envfrom メソッドを通じて configmap を指定します。このメソッドは、configmap 内のすべての KEY をシステム変数として参照します。envFromメソッドの特性を示すためだけであるため、ここではイメージのデモを使用します busybox。YAMLリソースリストは次のとおりです。

cat envfrom_demo.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: envfrom-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      name: envfrom-demo
  template:
    metadata:
      labels:
        name: envfrom-demo
    spec:
      containers:
      - name: envfrom-demo
        image: busybox:1.28.0
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 360000"]
        envFrom:
        - configMapRef:
            name: mysql-config    # 指定configmap名称

YAML ファイルを実行します。

kubectl apply -f mysql-config.yaml 
kubectl apply -f envfrom_demo.yaml 

作成されたリソース情報を表示します。

kubectl get pods -l name=envfrom-demo
kubectl get configmap mysql-config

コンテナーを入力して変数情報を表示します。

kubectl exec -it envfrom-demo-6cf79bf4bc-4xvcc -- /bin/sh
printenv

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-0oPQ7qXB-1688205066567) (D:\MD Archives\IMG\image-20230701165551344.png) )]

3. 3 番目の方法: ボリューム volume を使用してマウントします。

最初の 2 つは、環境変数を使用して構成を参照するために使用され、頻繁には使用されません。最も一般的に使用される方法は、ボリューム マウント方法を使用することです。

web次の名前の構成マップを作成します。

cat web-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: web
data:
  nginx_8080.conf: |
    server {
    listen 8080;
     location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         }
    }

nginx ミラーを使用し、デプロイメントを作成し、マウント構成マップを使用します。

cat web.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-nginx
spec:
  replicas: 1
  selector:      
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      volumes:
      - name: web-config
        configMap:           # 定义卷,使用名为web的configmap
          name: web
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: web-config  # 挂载卷
          mountPath: /etc/nginx/conf.d

YAML リソース マニフェストを実行します。

kubectl apply -f web-config.yaml
kubectl apply -f web.yaml

構成ファイルのポートを 8080 に変更し、検証として Nginx のポート 8080 をリクエストします。

kubectl get pods -o wide
curl 10.244.235.251:8080

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ww7wQP5p-1688205066567) (D:\MD Archives\IMG\image-20230701174553603. png)]

OK、上記はポート 8080 経由で nginx に正常にアクセスできます。このボリュームのマウント方法はディレクトリ用であることに注意してください。たとえば、以下に /etc/nginx をマウントすると、コンテナの /etc/nginx ディレクトリは以前のデータになります。マウントされたデータに置き換えられます。

4. 知識を広げる

1. ConfigMap を編集する

kubectl edit cm web

編集して保存した後、ボリューム マウント方式の場合、ホット ロード (約 10 秒) が有効になり、コンテナ構成に更新されますが、可変方式はサポートされていないため、削除して再度作成する必要があります。変更されたデータが有効になります。

2.ConfigMapを削除する

kubectl delete cm web

3. 変数を導入するための configMapKeyRef と envfrom の違いは何ですか?

  • configMapKeyRef は、ConfigMap 内のデータを環境変数としてコンテナーに挿入する方法です。これにより、Pod 定義の ConfigMap で特定のキーと値のペアを参照し、それらを環境変数としてコンテナに渡すことができます。このメソッドは、ConfigMap 内の構成データをコンテナー内のアプリケーションに直接公開するのに適しています。
  • envFrom は、ConfigMap 全体のデータを環境変数としてコンテナーに注入する方法です。これにより、Pod 定義で 1 つ以上の ConfigMap を参照し、それらのすべてのキーと値のペアを環境変数としてコンテナーに渡すことができます。この方法は、複数の関連する構成データをコンテナーに一度に注入するのに適しています。

おすすめ

転載: blog.csdn.net/weixin_45310323/article/details/131493146