構成マップ
Service
これはKubernetes
システムの非常に重要な中心概念です。今日はもう 1 つの非常に重要なリソース オブジェクトを学習しましょう: ConfigMap
、多くのアプリケーションが構成ファイル、コマンド ライン パラメーター、または環境変数から構成情報を読み取ることがよくあることはわかっています。これは間違いなく直接書き込まれるわけではありません。アプリケーション プログラム。たとえば、アプリケーションをサービスに接続しredis
、次回それを置き換えたい場合は、コードを再度変更して新しいイメージを作成する必要があります。これは絶対にお勧めできません。これにより、ConfigMap
インジェクション機能が提供されます。構成情報をコンテナに保存します。これは、単一の属性を保存するだけでなく、構成ファイル全体を保存するためにも使用できます。たとえば、サービスのアクセス アドレスを構成したり、構成ドキュメント全体を保存したりするために使用できますredis
。redis
。
作成
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
忘れないでください。作成に関するヘルプ情報を表示するために使用できます。kubectl
kubectl create configmap -h
ConfigMap
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
含むディレクトリがあります。redis
mysql
$ 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-file
。ConfigMap
作成が完了したら、次のコマンドを使用してConfigMap
リストを表示することもできます。
$ kubectl get configmap
NAME DATA AGE
cm-demo1 2 17s
cm-demo1
オブジェクトが作成されたことがわかりConfigMap
、describe
コマンドを使用して詳細を表示できます。
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
値がファイルの内容であることがわかりますが、ファイル内の構成情報が大きい場合、対応する値が表示されない場合があることに注意してください。キー値 その場合は、次のコマンドを使用できます。testcm
value
describe
$ 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-file
redis.conf
mysql.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_HOST
他DB_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
され、内部にマウントされている構成情報がホットアップデートされることに注意してください。この時点で、構成ファイルの変更を監視するいくつかのスクリプトを追加し、サービスに対応させることができます。ConfigMap
ConfigMap
Pod
reload