一、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 esconfigName: esconfigNamespace: defaultLabels:Annotations: Data====elasticsearch.yml:----# ======================== Elasticsearch Configuration =========================## NOTE: Elasticsearch comes with reasonable defaults for most settings. 4、以yaml文件格式输出:$ kubectl get configmap esconfig -o yaml apiVersion: v1data: 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: v1kind: Podmetadata: name: dapi-test-podspec: 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: v1kind: Podmetadata: name: dapi-test-podspec: 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: v1kind: Podmetadata: name: es labels: app: elasticsaerchspec: 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 注:修改后不会触发容器的滚动更新,得需要手动滚动更新控制器