kubernetes 的configMap和sercet配置信息
简介:
启动pod,pod启动时可以将configMap资源关联到当前pod上来,从中读一个数据c传递给pod内的容器的一个变量。任然是变量注入的方式来给容器传配置信息。
把每一个configMap当一个存储卷,直接挂在到容器的某个目录上,这个目录恰好是运行程序读取配置信息的文件路径。支持动态修改的,如果configMap配置信息改变了,通知所有pod中应用重载。是通过明文传数据的,安全性不高。
sercet与configMap的功能相似,但是传递数据是 通过base64编码机制。
配置容器化应用的方式: 1.通过自定义命令行参数来实现 args:[]
2.把配置文件直接写入镜像 (实现太单一,耦合度太紧密)
3.环境变量 (1) Cloud Native的应用程序一般可以直接通过环境变量加载配置
(2) 通过entrypoint脚本来预处理变量为配置文件中的配置信息
4.存储卷
5.configMap的核心作用让配置信息和镜像文件解耦,镜像可以做成骨架,配置信息可以通过configMap注入,使得一个镜像文件可以应付多个不同配置信息,为应 用程序运行不同配置的环境而工作。在configMap中所有数据都保存键值格式。
一、创建configMap
kubectl create configmap nginx-config --from-literal=nginx_port=9999 --from-literal=server_name=www.yiruiduan.com 通过命令行设置键值
查看configMap的描述
kubectl create configmap nginx-yiruiduan --from-file=./yiruiduan.conf 通过加载文件 文件名就是键,文件内容就是值
查看描述
在pod中应用有两种方式加载环境变量或者volume挂载:
1)通过env加载的方式,注入配置信息。只有在启动pod的时候生效
apiVersion: v1 kind: Pod metadata: name: pod-cm-1 namespace: default labels: app: myapp tier: frontend annotations: create_by: yiruiduan spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 - name: https containerPort: 443 env: - name: NGINX_SERVER_PORT valueFrom: configMapKeyRef: name: nginx-config key: nginx_port - name: NGINX_SERVER_NAME valueFrom: configMapKeyRef: name: nginx-config key: server_name
2)通过volume挂载的方式,动态配置信息
apiVersion: v1 kind: Pod metadata: name: pod-cm-3 namespace: default labels: app: myapp tier: frontend annotations: create_by: yiruiduan spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 - name: https containerPort: 443 volumeMounts: - name: nginxconf mountPath: /etc/nginx/conf.d/ readOnly: true volumes: - name: nginxconf configMap: name: nginx-yiruiduan
二、创建secret
kubectl create secret generic mysql-root-password --from-literal=password=yiruiduan 通过命令行的方式创建
使用的范式和configMap的使用方式一样可以通过env注入,也可以通过volume挂载方式。它将数据通过base64的编码。不易被人看懂