kubernetes --> ConfigMap
一、k8s ConfigMp介绍:
许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。这些配置信息需要与docker image解耦,你总不能每修改一个配置就重做一个image吧?ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
二、ConfigMap使用:
1、一个简单的ConfigMap.yaml文件:
kind: ConfigMap
apiVersion: v1
metadata:
creationTimestamp: 2016-02-18 19:14:38
name: example-config
namespace: default
data:
example.property.1: hello
example.property.2: world
example.property.file: |-
property.1=value-1
property.2=value-2
property.3=value-3
data
一栏包括了配置数据,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。 配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:
1、设置环境变量的值
2、在容器里设置命令行参数
3、在数据卷里面创建config文件
2、使用目录创建ConfigMap:
1、查看配置文件:
$ ls config/ elasticsearch.yml
2、用目录里的文件生成configmap(使用文件创建也是一样的只不过是把目录换成文件) $ kubectl create configmap esconfig --from-file=./config/
3、查看configmap的内容: $ kubectl describe configmap esconfig Name: esconfig Namespace: default Labels: <none> Annotations: <none> Data ==== elasticsearch.yml: ---- # ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings.
4、以yaml文件格式输出: $ kubectl get configmap esconfig -o yaml apiVersion: v1 data: elasticsearch.yml: "# ======================== Elasticsearch Configuration =========================\n#\n# NOTE: Elasticsearch comes with reasonable defaults for most settings.\n# Before you set out to tweak and tune the configuration, make sure you\n# understand
注:使用目录创建的configmap,再挂载到容器里,会把挂载目录的所有文件替换。
3、使用字面值创建:
$ kubectl create configmap config --from-literal=name=cheng --from-literal=age=12 $ kubectl get configmaps config -o yaml
4、在Pod中使用ConfigMap:
1)、使用ConfigMap来替代环境变量
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config #configmap的名字 key: special.how #data下面的key - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type envFrom: - configMapRef: name: env-config restartPolicy: Never
2)、用ConfigMap设置命令行参数
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never
3)、通过数据卷插件使用ConfigMap
apiVersion: v1 kind: Pod metadata: name: es labels: app: elasticsaerch spec: containers: - name: es image: 192.168.78.4/es/elasticsearch:2.4.6 volumeMounts: - name: elasticsearch-yml mountPath: /usr/local/elasticsearch-2.4.6/config/elasticsearch.yml ports: - containerPort: 9200 - containerPort: 9300 volumes: - name: elasticsearch-yml configMap: name: esconfig imagePullSecrets: - name: regsecret
5、ConfigMap的热更新:
可以通过直接修改configmap
$ kubectl edit configmap esconfig
注:修改后不会触发容器的滚动更新,得需要手动滚动更新控制器