もう一度戦うk8s(8):ConfigMap

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:決して#再起動戦略:決して。

実行してポッドを作成します:
$ 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:決して

実行してポッドを作成します:
$ 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
    configMap:
    名前:cm-test-file
    items:

    • キー:key-testproperties
      パス:test.properties
      restartPolicy:決して

アイテムを指定しないでください

[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
    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で使用されます。指定しない場合、ファイル名がデフォルトでキーとして使用されます。

おすすめ

転載: blog.csdn.net/qq_43762191/article/details/123295025