说明:
kubernetes统一配置管理方案configmap,实现将配置文件从容器镜像中解耦,增强应用的可移植性。数据可直接注入pod对象中,为容器所使用,注入方式有挂载为存储卷和传递为环境变量两种。
环境
1、适合存储明文类型数据 2、configmap属于命名空间级别的资源,和引用它的pod必须在同一空间中
语法:
创建命令:
kubernetes create configmap <map-name> <data-source>
格式化输出查看:
kubectl get configmap configmap_name -o yaml
kubectl describe configmap configmap_name -o yaml
两者都可以查看,显示的键值分隔符不同,describe像是更详细的信息!
方法1:直接创建key value
1、使用"--from-literal"选项可在命令行直接创建configmap对象,重复使用传递多个键值对 kubectl create configmap configmap_name --from-literal=key-name-1=value-1 2、分别传递两个键值对 kubectl create configmap configmap_name --from-literal=key.name=tag --from-literal=value.name=master
方法2:通过文件创建
1、创建需要挂载使用的配置文件(index.html)
root@rancher:/home/yangjia# cat index.html yangjia test configmap create! 创建configmap(注意后面填加namespace,否则默认default) kubectl create configmap nginx-config --from-file=./index.html -n test 查看configmap(注意后面填加namespace,否则默认default) kubectl get configmaps -n test
2、验证configmap配置是否和配置文件信息一致
root@rancher:/home/yangjia# kubectl get configmaps/nginx-config -o yaml -n test apiVersion: v1 data: index.html: | yangjia test configmap create! kind: ConfigMap metadata: creationTimestamp: "2019-11-04T09:45:25Z" name: nginx-config namespace: test resourceVersion: "85333" selfLink: /api/v1/namespaces/test/configmaps/nginx-config uid: dbeb8169-212d-43b0-82f1-13d58ec9dcdd
3、编写部署应用的yaml文件
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 template: metadata: labels: app: my-deployment spec: containers: - name: my-nginx-containers image: nginx:latest imagePullPolicy: Never ports: - containerPort: 80 volumeMounts:
- mountPath: /usr/share/nginx/html #--将配置文件挂载到哪里 name: nginx-config volumes: - name: nginx-config configMap: name: configmap-nginx # --指定使用configMap中的nginx-config配置 items: - key: index.html path: index.html --- apiVersion: v1 kind: Service metadata: name: my-deployment spec: type: NodePort selector: app: my-deployment ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30189
4、部署应用
root@rancher:/home/yangjia# kubectl create -f nginx-sever2.yaml -n test service/nginx-svc-configmap created
部署成功,pod已经成功运行,服务发现已经做好了30084端口外部访问入口。
方法3:通过目录创建
1、使用"--from-flie <path-to-directory>"选项可在命令行直接创建configmap对象 kubectl create configmap tomcat-config --from-file=/usr/local/tomcat/webapps/CONFIG/ -n test 2、通过kubectl部署应用 kubectl create -f app.yaml -n test
方法4:环境变量传递键值数据
1、通过valueFrom内嵌configMapKeyRef对象实现,格式如下: valueFrom: configMapKeyRef: key: ###configmap键值名 name: ###configmap对象名称 optional: ###当前pod资源指明此引用是否可选
2、创建yaml文件,包含两个资源,用“---”分隔,直接将configmap键值数据传递给pod引用 apiVersion: v1 kind: ConfigMap metadata: name: httpd_config namespace: default data: httpd_port: "8080" httpd_level: "-vv"
---
apiVersion: v1 kind: Pod metadata: name: configmap_env spec: containers: - name: test-container image: alpine:3.8 command: [ "/bin/httpd" ] args: [ "-f","-p","$(HTTPD_PORT)","$(HTTPD_LOG_VERSION)" ] env: - name: HTTPD_PORT valueFrom: configMapKeyRef: name: httpd_config key: httpd_port - name: HTTPD_LOG_VERSION valueFrom: configMapKeyRef: name: httpd_config key: httpd_level restartPolicy: Never optional: true
3、查看部署结果
kubectl exec configmap_env ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/httpd -f -p 8080 -vv