記事ディレクトリ
1ConfigMapの概要
1.1概要
アプリケーションをデプロイするときは、すべてアプリケーションの構成が必要です。Dockerコンテナーなどのコンテナーでは、構成ファイルがコンテナーイメージに入力される場合、この動作は構成をハードライトするのと同じです。構成を行うたびにが変更された場合、イメージを再構築する必要があります。もちろん、ファイルを含むボリュームをマウントすることで、構成の管理や変更を行うこともできます。k8sでは、より良い方法、つまりConfigMapについて説明したいと思います。このリソースオブジェクトの出現により、アプリケーションの構成管理が大幅に容易になります。
ConfigMapは、1つ以上のキー/値の形式でk8sに保存されます。これにより、変数を管理したり、構成ファイルのコンテンツを内部で完成させたりできます。
1.2使用法
生成容器内的环境变量,在pod中可以通过spec.env或者spec.envFrom进行引用。
设置容器启动命令的启动参数,前提是设置为环境变量。
以卷volume的方式挂载到容器内部的文件或目录,通过spec.volumes引用。
2ConfigMapの使用法
在使用命令的时候注意单词: configmap等价于cm,cm算是简写,类似于deployment可以使用命令时写成deploy,service可以写成svc,namespace可以写成ns,pod可以写成po。
2.1作成
1)yamlファイルを作成します
例:
apiVersion:v1
種類:ConfigMap
メタデータ:
名前:cm-test01
データ:
appconf01:value01
appconf02:value02
命令:
$ kubectl create -f configmap-test01.yaml
2)コマンドラインで作成
读取文件方式(也可以是目录)通过--from-file参数从文件中读取。可以指定key的名称,若不指定,则默认使用文件名为key。
如当前目录有一个配置文件为test.properties
key01:value01
key02:value02
conf01:value03
$ kubectl create cm cm-test-file --from-file = test.properties
指定参数方式,通过--from-literal指定keyxx=valuexx创建confimap中的data内配置属性。
$ kubectl create configmap cm-test-literal --from-literal=key01=value01 --from-literal=key02=value02
2.2クエリ
1)構成マップリストを表示
$ kubectl get cm
[root @ k8s / cm / test]#kubectl get cm
NAME DATA AGE
cm-test-file 1 1m
cm-test-literal 2 2s
cm-test01 2 1h
2)configmapの詳細を表示
$ kubectl describe cm cm-test01
[root @ k8s / cm / test]#kubectl describe cm cm-test01
名前:cm-test01
名前空間:system-pro
ラベル:
注釈:
データ
===
appconf01
:
---
value01
appconf02:
value02
$ kubectl describe configmapcm-test-file
[root @ k8s / cm / test]#kubectl describe configmap cm-test-file
名前:cm-test-file
名前空間:system-pro
ラベル:
注釈:
データ
test.properties:
key01:value01
key02:value02
conf01:value03
$ kubectl describe cmcm-test-literal
[root @ k8s / cm / test]#kubectl describe cm cm-test-literal
名前:cm-test-literal
名前空間:system-pro
ラベル:
注釈:
データ
===
key01:
---
value01
key02:
---
value02
3)yaml出力を表示
$ kubectl get cm cm-test01 -o yaml
[root @ k8s / cm / test]#kubectl get cm cm-test01 -o yaml
apiVersion:v1
data:
appconf01:value01
appconf02:value02
kind:ConfigMap
メタデータ:
creationTimestamp:2020-03-13T13:06:21Z
name:cm- test01
名前空間:system-pro
resourceVersion:“ 594861”
selfLink:/ api / v1 / namespaces / system-pro / configmaps / cm-test01
uid:6f5e7efb-652b-11ea-adf9-fa163e4464a5
$ kubectl get configmap cm-test-file -o yaml
[root @ k8s / cm / test]#kubectl get configmap cm-test-file -o yaml
apiVersion:v1
data:
test.properties:|
key01:value01
key02:value02
conf01:value03
kind:ConfigMap
メタデータ:
creationTimestamp:2020-03-13T14:29:30Z
name:cm-test-file
名前空間:system-pro
resourceVersion:“ 598548”
selfLink:/ api / v1 / namespaces / system-pro / configmaps / cm-test-file
uid:0d226ad2-6537-11ea-adf9-fa163e4464a5
$ kubectl get cm cm-test-literal -o yaml
[root @ k8s / cm / test]#kubectl get cm cm-test-literal -o yaml
apiVersion:v1
data:
key01:value01
key02:value02
kind:ConfigMap
メタデータ:
creationTimestamp:2020-03-13T14:30:57Z
name: cm-test-literal
名前空間:system-pro
resourceVersion:“ 598613”
selfLink:/ api / v1 / namespaces / system-pro / configmaps / cm-test-literal
uid:412affd4-6537-11ea-adf9-fa163e4464a5
2.3アップデート
1)編集
$ kubectl edit cmcm-test01
kubectl describecmcm-test01を使用して更新が有効になるかどうかを確認します
2)適用
してyamlファイルの値を直接変更し、kubectl apply-fconfigmap-test01.yamlを使用して再公開して更新します。
2.4削除
1) yamlファイルを使用して
$ kubectl delete-fconfigmap-test01.yamlを削除します
2)リソースを直接削除し
ます$ kubectl delete cm cm-test013ConfigMap
とポッドの使用
容器应用对ConfigMap的使用主要是两种:
1)通过环境变量获取ConfigMap的内容:spec.env和spec.envFrom
2)通过卷volume挂载的方式将ConfigMap的内容挂载到容器内部的文件或目录:spec.volumes
次のコンテンツは、例として上記のConfigMapリソースcm-test01に基づいています。
3.1環境変数法
spec.envメソッド
1)ポッドを作成する
[root @ k8s / cm / test]#vim pod-test01.yaml
apiVersion:v1
種類:ポッド
メタデータ:
名前:cm-pod-test001
仕様:
コンテナー:
-
名前:cm-テスト
イメージ:tomcat:8
コマンド:[“ / bin / sh”、“ -c”、“ env | grep APP”]
env:- name:APPCONF01#環境変数の名前を定義します
valueFrom:#キー「appconf01」の値はconfigMapKeyRefを取得
します:
name:cm-test01#環境変数の値はconfigmapから取得されますcm-test01
key:appconf01# configmapはappconf01です - name:APPCONF02#環境変数の名前を定義します
valueFrom:#キー「appconf02」の値はconfigMapKeyRefを取得
します:
name:cm-test01#環境変数の値はconfigmapから取得されますcm-test01
key:appconf02# configmapはappconf02です
restartPolicy:決して#再起動戦略:決して。
- name:APPCONF01#環境変数の名前を定義します
実行してポッドを作成します:
$ kubectl create -f pod-test01.yaml
2)ポッドを表示
$ kubectl get pods
[root @ k8s / cm / test]#kubectl get pods
NAME READY STATUS RESTARTS AGEcm
-pod-test0010/1完了01h
3)ポッドログを表示
$kubectlログcm-pod-test001
[root @ k8s / cm / test]#kubectl logs cm-pod-test001
APPCONF01 = value01
APPCONF02 = value02
コンテナ内の環境変数がConfigMapを使用して読み取られることを示します。
spec.envFromメソッド
1)ポッド
yamlファイルを作成します
[root @ k8s / cm / test]#vim pod-test02.yaml
apiVersion:v1
種類:ポッド
メタデータ:
名前:cm-pod-test002
仕様:
コンテナー:
-
名前:cm-test2
イメージ:tomcat:8
コマンド:[“ / bin / sh”、“ -c”、“ env”]
envFrom:- configMapRef:
name:cm-test01#ConfigMapに基づいて環境変数を自動的に生成しますcm-test01リソース
restartPolicy:決して
- configMapRef:
実行してポッドを作成します:
$ kubectl create -f pod-test02.yaml
2)ポッドを表示
$ kubectl get po
[root @ k8s / cm / test]#kubectl get po
NAME READY STATUS RESTARTS AGEcm
-pod-test0010/1完了
02hcm-pod-test0020/1完了01h
注:
環境変数の名前は制限されています:[a-zA-Z] [a-zA-Z0-9 _] *、数字または不正な文字で始めることはできません。
3.2ボリュームマウント方法
指定items
[root @ k8s / cm / test]#vim pod-test03.yaml
apiVersion:v1
種類:ポッド
メタデータ:
名前:cm-pod-test003
仕様:
コンテナー:
-
名前:cm- test3
イメージ:tomcat:8
volumeMounts:- 名前:vm-01-1
mountPath:/ conf
ボリューム:
- 名前:vm-01-1
-
名前:vm-01-1
configMap:
名前:cm-test-file
items:- キー:key-testproperties
パス:test.properties
restartPolicy:決して
- キー:key-testproperties
アイテムを指定しないでください
[root @ k8s / cm / test]#vim pod-test04.yaml
apiVersion:v1
種類:ポッド
メタデータ:
名前:cm-pod-test004
仕様:
コンテナー:
-
名前:cm-test4
イメージ:tomcat:8
volumeMounts:- 名前:vm-02-2
mountPath:/ conf
ボリューム:
- 名前:vm-02-2
-
名前:vm-02-2
configMap:
名前:cm-test-file
restartPolicy:決して
コンテナーに入ってチェックし
ます$kubectlexec -it cm-pod-test004 -c cm-test4 –
bashがコンテナーに入った後、ls/confでtest.propertiesファイルがあるかどうかを確認します。
[root @ k8s / cm / test]#kubectl exec -it cm-pod-test004 -c cm-test4 – bash
root @ cm-pod-test004:/ usr / local / tomcat#ls / conf
test.properties
補充する
指定されたキーを作成する場合と--from-fileの方法でキーを指定しない場合の違い
1)キー名を指定しない場合
作成:
$ kubectl create cm cm-test-file --from-file = test.properties
出力:
$ kubectl get cm cm -test-file -o yaml
ここに画像の説明を挿入
2)キー
の作成を指定します:
$ kubectl create cm cm-test-file02 --from-file = tp = test.properties
出力:
$ kubectl get cm cm- test-file --o yaml
ここに画像の説明を挿入
キーの名前を指定すると、指定した名前がconfigmapで使用されます。指定しない場合、ファイル名がデフォルトでキーとして使用されます。