Kubernetes ConfigMap の概要

構成マップ

ServiceこれはKubernetesシステムの非常に重要な中心概念です。今日はもう 1 つの非常に重要なリソース オブジェクトを学習しましょう: ConfigMap、多くのアプリケーションが構成ファイル、コマンド ライン パラメーター、または環境変数から構成情報を読み取ることがよくあることはわかっています。これは間違いなく直接書き込まれるわけではありません。アプリケーション プログラム。たとえば、アプリケーションをサービスに接続しredis、次回それを置き換えたい場合は、コードを再度変更して新しいイメージを作成する必要があります。これは絶対にお勧めできません。これにより、ConfigMapインジェクション機能が提供されます。構成情報をコンテナに保存します。これは、単一の属性を保存するだけでなく、構成ファイル全体を保存するためにも使用できます。たとえば、サービスのアクセス アドレスを構成したり、構成ドキュメント全体を保存したりするために使用できますredisredis

作成

ConfigMapリソース オブジェクトは、key-valueフォームのキーと値のペアを使用してデータを構成します。これらのデータはPodその中で使用できます。これはConfigMap、後で説明する内容と似ています。Secrets大きな違いは、ConfigMap一部の機密性のないデータをより便利に処理できることです。パスワードなどをSecrets管理するために使用する必要があります。ConfigMap使用方法を説明するために例を示します。

kind: ConfigMap
apiVersion: v1
metadata:
  name: cm-demo
  namespace: default
data:
  data.1: hello
  data.2: world
  config: |
    property.1=value-1
    property.2=value-2
    property.3=value-3

構成データはdataプロパティで構成され、最初の 2 つは 1 つのプロパティを保存するために使用され、後者は構成ファイルを保存するために使用されます。

もちろん、同じものを使用してkubectl create -f xx.yaml上記のConfigMapオブジェクトを作成することもできますが、作成方法がわからない場合は、私たちの最良の教師になることをConfigMap忘れないでください。作成に関するヘルプ情報を表示するために使用できます。kubectlkubectl create configmap -hConfigMap

Examples:
  # Create a new configmap named my-config based on folder bar
  kubectl create configmap my-config --from-file=path/to/bar
  
  # Create a new configmap named my-config with specified keys instead of file basenames on disk
  kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
  
  # Create a new configmap named my-config with key1=config1 and key2=config2
  kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

指定されたディレクトリからオブジェクトを作成できることがわかりますConfigMap。たとえば、次のような構成ファイルと接続情報をtestcm含むディレクトリがあります。redismysql

$ ls testcm
redis.conf
mysql.conf

$ cat testcm/redis.conf
host=127.0.0.1
port=6379

$ cat testcm/mysql.conf
host=127.0.0.1
port=3306

次に、from-fileキーワードを使用して、このディレクトリを含むすべての構成ファイルを作成できますConfigMap

$ kubectl create configmap cm-demo1 --from-file=testcm
configmap "cm-demo1" created

ディレクトリ内のパラメーターで指定されたすべてのファイルは、キーと値のペアの作成に使用されます。キーの名前はファイル名、値はファイルの内容ですfrom-fileConfigMap

作成が完了したら、次のコマンドを使用してConfigMapリストを表示することもできます。

$ kubectl get configmap
NAME       DATA      AGE
cm-demo1   2         17s

cm-demo1オブジェクトが作成されたことがわかりConfigMapdescribeコマンドを使用して詳細を表示できます。

kubectl describe configmap cm-demo1
Name:         cm-demo1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
mysql.conf:
----
host=127.0.0.1
port=3306

redis.conf:
----
host=127.0.0.1
port=6379

Events:  <none>

2 つはディレクトリ配下のファイル名で、対応するkeyがファイルの内容であることがわかりますが、ファイル内の構成情報が大きい場合、対応する値が表示されない場合があることに注意してください。キー値 その場合は、次のコマンドを使用できます。testcmvaluedescribe

$ kubectl get configmap cm-demo1 -o yaml
apiVersion: v1
data:
  mysql.conf: |
    host=127.0.0.1
    port=3306
  redis.conf: |
    host=127.0.0.1
    port=6379
kind: ConfigMap
metadata:
  creationTimestamp: 2018-06-14T16:24:36Z
  name: cm-demo1
  namespace: default
  resourceVersion: "3109975"
  selfLink: /api/v1/namespaces/default/configmaps/cm-demo1
  uid: 6e0f4d82-6fef-11e8-a101-525400db4df7

ファイル ディレクトリを介して作成することに加えて、指定されたファイルを使用して を作成することもできますConfigMap。同様に、上記の構成ファイルを例として、構成のredis別個のオブジェクトを作成します。ConfigMap

$ kubectl create configmap cm-demo2 --from-file=testcm/redis.conf
configmap "cm-demo2" created
$ kubectl get configmap cm-demo2 -o yaml
apiVersion: v1
data:
  redis.conf: |
    host=127.0.0.1
    port=6379
kind: ConfigMap
metadata:
  creationTimestamp: 2018-06-14T16:34:29Z
  name: cm-demo2
  namespace: default
  resourceVersion: "3110758"
  selfLink: /api/v1/namespaces/default/configmaps/cm-demo2
  uid: cf59675d-6ff0-11e8-a101-525400db4df7

redis.confファイル構成情報に関連付けられたオブジェクトが正常に作成されたことがわかります。このパラメータは複数回使用できることConfigMapにも注目してください。たとえば、ここでは指定ファイルを別々に作成するために 2 回使用しています。これは次と同じ効果があります。ディレクトリ全体を直接指定します。--from-fileredis.confmysql.conf

さらに、ヘルプ ドキュメントを見ると、文字列を直接使用して作成し、パラメーターを通じて構成情報を渡すこともできることがわかります。--from-literal同様に、このパラメーターは複数回使用でき、形式は次のとおりです。

$ kubectl create configmap cm-demo3 --from-literal=db.host=localhost --from-literal=db.port=3306
configmap "cm-demo3" created
$ kubectl get configmap cm-demo3 -o yaml
apiVersion: v1
data:
  db.host: localhost
  db.port: "3306"
kind: ConfigMap
metadata:
  creationTimestamp: 2018-06-14T16:43:12Z
  name: cm-demo3
  namespace: default
  resourceVersion: "3111447"
  selfLink: /api/v1/namespaces/default/configmaps/cm-demo3
  uid: 06eeec7e-6ff2-11e8-a101-525400db4df7

使用

ConfigMap作成は成功しましたが、Podこれをどのように使用すればよいでしょうか? これらの構成データは、主に次のようなConfigMapさまざまな方法で使用できると言われています。Pod

  • 環境変数の値を設定する
  • コンテナにコマンドラインパラメータを設定する
  • データボリュームに設定ファイルを作成する

まず、ConfigMap環境変数に以下を設定します。

apiVersion: v1
kind: Pod
metadata:
  name: testcm1-pod
spec:
  containers:
    - name: testcm1
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.host
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.port
      envFrom:
        - configMapRef:
            name: cm-demo1

ポッドが実行されると、次の行が出力されます。

$ kubectl logs testcm1-pod
......
DB_HOST=localhost
DB_PORT=3306
mysql.conf=host=127.0.0.1
port=3306
redis.conf=host=127.0.0.1
port=6379
......

DB_HOSTDB_PORTの環境変数はここに直接注入したため、キー値全体が出力cm-demo1れており、これも期待どおりです。

ConfigMapさらに、次のように、コマンド ライン パラメーターの設定に使用でき、ConfigMapコンテナー内のコマンドまたはパラメーター値の設定にも使用できますPod

apiVersion: v1
kind: Pod
metadata:
  name: testcm2-pod
spec:
  containers:
    - name: testcm2
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(DB_HOST) $(DB_PORT)" ]
      env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.host
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.port

これを実行すると、Pod次の情報が出力されます。

$ kubectl logs testcm2-pod
localhost 3306

もう 1 つは非常に一般的なConfigMap使用方法です。データ ボリュームを介して使用し、データ ボリュームで使用しますConfigMap。ファイルをデータ ボリュームに埋め込みます。このファイルでは、キーはファイル名で、キーの値はファイルです。コンテンツ:

apiVersion: v1
kind: Pod
metadata:
  name: testcm3-pod
spec:
  containers:
    - name: testcm3
      image: busybox
      command: [ "/bin/sh", "-c", "cat /etc/config/redis.conf" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: cm-demo2

これを実行しPod、ログを確認します。

$ kubectl logs testcm3-pod
host=127.0.0.1
port=6379

もちろん、以下に定義されてConfigMapいるように、値がマップされるデータ ボリューム内のパスを制御することもできますPod

apiVersion: v1
kind: Pod
metadata:
  name: testcm4-pod
spec:
  containers:
    - name: testcm4
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/path/to/msyql.conf" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: cm-demo1
        items:
        - key: mysql.conf
          path: path/to/msyql.conf

これを実行しPod、ログを確認します。

$ kubectl logs testcm4-pod
host=127.0.0.1
port=3306

なお、ConfigMapデータボリュームとしてマウントされている場合は、この時点で更新(または削除して再構築)Podされ内部にマウントされている構成情報がホットアップデートされることに注意してください。この時点で、構成ファイルの変更を監視するいくつかのスクリプトを追加し、サービスに対応させることができます。ConfigMapConfigMapPodreload


おすすめ

転載: blog.csdn.net/u010674953/article/details/129420003