K8s ConfigMap实战全解析

张开发
2026/4/9 19:10:27 15 分钟阅读

分享文章

K8s ConfigMap实战全解析
ConfigMap祥解ConfigMap与 Secret 类似用来存储配置文件的kubernetes资源对象所有的配置内容都存储在etcd中。与 Secret 的区别ConfigMap 保存的是不需要加密的、应用所需的配置信息。 ConfigMap 的用法几乎与 Secret 完全相同可以使用 kubectl create configmap 从文件或者目录创建 ConfigMap也可以直接编写 ConfigMap 对象的 YAML 文件。创建ConfigMap创建ConfigMap的方式有4种 命令行方式 方式1通过直接在命令行中指定configmap参数创建即--from-literal 方式2通过指定文件创建即将一个配置文件创建为一个ConfigMap--from-file文件方式3通过指定目录创建即将一个目录下的所有配置文件创建为一个ConfigMap--from-file目录配置文件方式 方式4事先写好标准的configmap的yaml文件然后kubectl create-f创建实战一1.1 通过命令行参数–from-literal创建创建命令[rootkub-k8s-master prome]# kubectl create configmap test-configmap --from-literaluseradmin --from-literalpass1122334configmap/test-configmap created结果如下面的data内容所示[rootkub-k8s-master prome]# kubectl get configmap test-configmap -o yamlapiVersion: v1 data: pass:1122334user: admin kind: ConfigMap metadata: creationTimestamp:2019-10-21T07:48:15Zname: test-configmap namespace: default resourceVersion:187590selfLink: /api/v1/namespaces/default/configmaps/test-configmap uid: 62a8a0d0-fab9-4159-86f4-a06aa213f4b11.2 通过指定文件创建编辑文件server.conf内容如下[rootkub-k8s-master prome]# vim server.confserver{listen80;server_name localhost;location /{root /var/www/html;index index.html index.htm;}}创建可以有多个–from-file[rootkub-k8s-master prome]# kubectl create configmap test-config2 --from-fileserver.confconfigmap/test-config2 created结果如下面data内容所示[rootkub-k8s-master prome]# kubectl get configmap test-config2 -o yamlapiVersion: v1 data: server.conf:|server{listen80;server_name localhost;localtion /{root /var/www/html;index index.html index.htm;}}kind: ConfigMap metadata: creationTimestamp:2019-10-21T08:01:43Zname: test-config2 namespace: default resourceVersion:188765selfLink: /api/v1/namespaces/default/configmaps/test-config2 uid: 790fca12-3900-4bf3-a017-5af1070792e5通过指定文件创建时configmap会创建一个key/value对key是文件名value是文件内容。1.3 指定目录创建configs 目录下的config-1和config-2内容如下所示[rootkub-k8s-master prome]# mkdir config[rootkub-k8s-master prome]# cd config/[rootkub-k8s-master config]# vim config1aaa bbbcd[rootkub-k8s-master config]# vim config2eee fffhk创建[rootkub-k8s-master config]# cd ..[rootkub-k8s-master prome]# kubectl create configmap test-config3 --from-file./configconfigmap/test-config3 created结果下面data内容所示[rootkub-k8s-master prome]# kubectl get configmap test-config3 -o yamlapiVersion: v1 data: config1:|aaa bbbcd config2:|eee fffhk kind: ConfigMap metadata: creationTimestamp:2019-10-21T08:20:42Zname: test-config3 namespace: default resourceVersion:190420selfLink: /api/v1/namespaces/default/configmaps/test-config3 uid: 6e00fded-80a8-4297-aeb3-4c48795e6eb9指定目录创建时configmap内容中的各个文件会创建一个key/value对key是文件名value是文件内容。1.4 通过事先写好configmap的标准yaml文件创建yaml文件内容如下 注意其中一个key的value有多行内容时的写法[rootkub-k8s-master prome]# vim configmap.yaml--- apiVersion: v1 kind: ConfigMap metadata: name: test-config4 namespace: default data: cache_host: memcached-gcxt cache_port:11211cache_prefix: gcxt my.cnf:|[mysqld]log-binmysql-bin hahahehe创建[rootkub-k8s-master prome]# kubectl apply -f configmap.yamlconfigmap/test-config4 created结果如下面data内容所示[rootkub-k8s-master prome]# kubectl get configmap test-config4 -o yamlapiVersion: v1 data: cache_host: memcached-gcxt cache_port:11211cache_prefix: gcxt my.cnf:|[mysqld]log-binmysql-bin hahahehe kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration:|{apiVersion:v1,data:{cache_host:memcached-gcxt,cache_port:11211,cache_prefix:gcxt,my.cnf:[mysqld]\nlog-bin mysql-bin\nhaha hehe\n},kind:ConfigMap,metadata:{annotations:{},name:test-config4,namespace:default}}creationTimestamp:2019-10-21T08:30:24Zname: test-config4 namespace: default resourceVersion:191270selfLink: /api/v1/namespaces/default/configmaps/test-config4 uid: 2a8cd6e7-db2c-4781-b005-e0b76d26394b查看configmap的详细信息# kubectl describe configmap使用ConfigMap使用ConfigMap的方式一种是通过环境变量的方式直接传递pod另一种是使用volume的方式挂载入到pod内示例ConfigMap文件[rootkub-k8s-master prome]# vim config-map.yml--- apiVersion: v1 kind: ConfigMap metadata: name: config-map namespace: default data: special.how: very special.type: charm 创建[rootkub-k8s-master prome]# kubectl apply -f config-map.ymlconfigmap/config-map created2.1 通过变量使用(1) 使用valueFrom、configMapKeyRef、name、key指定要用的key:1.设置指定变量的方式[rootkub-k8s-master prome]# vim testpod.yml--- apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: daocloud.io/library/nginx env:#专门在容器里面设置变量的关键字- name: SPECIAL_LEVEL_KEY#这里的-name,是容器里设置的新变量的名字valueFrom: configMapKeyRef: name: config-map#这里是来源于哪个configMapkey: special.how#configMap里的key- name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: config-map key: special.type 创建pod[rootkub-k8s-master prome]# kubectl apply -f testpod.ymlpod/dapi-test-pod created测试[rootkub-k8s-master prome]# kubectl exec -it dapi-test-pod /bin/bashrootdapi-test-pod:/# echo $SPECIAL_TYPE_KEYcharm(2) 通过envFrom、configMapRef、name使得configmap中的所有key/value对儿 都自动变成环境变量[rootkub-k8s-master prome]# kubectl delete -f testpod.ymlpoddapi-test-poddeleted[rootkub-k8s-master prome]# cp testpod.yml testpod.yml.bak[rootkub-k8s-master prome]# vim testpod.yml--- apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: daocloud.io/library/nginx envFrom: - configMapRef: name: config-map这样容器里的变量名称直接使用configMap里的key名[rootkub-k8s-master prome]# kubectl apply -f testpod.ymlpod/dapi-test-pod created.[rootkub-k8s-master prome]# kubectl exec -it dapi-test-pod /bin/bashrootdapi-test-pod:/# envHOSTNAMEdapi-test-podNJS_VERSION0.3.3NGINX_VERSION1.17.1KUBERNETES_PORT_443_TCP_PROTOtcpKUBERNETES_PORT_443_TCP_ADDR10.96.0.1PKG_RELEASE1~stretchKUBERNETES_PORTtcp://10.96.0.1:443PWD/special.howveryHOME/rootKUBERNETES_SERVICE_PORT_HTTPS443KUBERNETES_PORT_443_TCP_PORT443KUBERNETES_PORT_443_TCPtcp://10.96.0.1:443TERMxtermSHLVL1KUBERNETES_SERVICE_PORT443PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binspecial.typecharmKUBERNETES_SERVICE_HOST10.96.0.1_/usr/bin/env2.2 作为volume挂载使用(1) 把1.4中test-config4所有key/value挂载进来[rootkub-k8s-master prome]# kubectl delete -f testpod.ymlpoddapi-test-poddeleted[rootkub-k8s-master prome]# vim volupod.yml--- apiVersion: v1 kind: Pod metadata: name: nginx-configmap spec: containers: - name: nginx-configmap image: daocloud.io/library/nginx volumeMounts: - name: config-volume4 mountPath:/tmp/config4volumes: - name: config-volume4 configMap: name: test-config4 创建pod[rootkub-k8s-master prome]# kubectl apply -f volupod.ymlpod/nginx-configmap created进入容器中/tmp/config4查看[rootkub-k8s-master prome]# kubectl exec -it nginx-configmap /bin/bashrootnginx-configmap:/# ls /tmp/config4/cache_host cache_port cache_prefix my.cnf rootnginx-configmap:/# cat /tmp/config4/cache_hostmemcached-gcxt rootnginx-configmap:/#可以看到在config4文件夹下以每一个key为文件名,value为内容,创建了多个文件。实战一创建configmap[rootkub-k8s-master configmap]# vim configmap.yaml--- apiVersion: v1 kind: ConfigMap metadata: name: nginx-server-conf namespace: default data: index.html:|Hello, cloud computing Hello, Mr. Wang[rootkub-k8s-master configmap]# kubectl get configmapNAME DATA AGE nginx-server-conf27s[rootkub-k8s-master configmap]# kubectl get configmap nginx-server-conf -o yaml使用configmap[rootkub-k8s-master configmap]# vim pod.yaml--- apiVersion: v1 kind: Pod metadata: name: test-webapp spec: containers: - name: nginx-app image: daocloud.io/library/nginx ports: - containerPort:80volumeMounts: - name: nginx-volume mountPath:/usr/share/nginx/htmlvolumes: - name: nginx-volume configMap: name: nginx-server-conf[rootkub-k8s-master configmap]# kubectl apply -f pod.yaml[rootkub-k8s-master configmap]# kubectl get podNAME READY STATUS RESTARTS AGE test-webapp1/1 Running06s[rootkub-k8s-master configmap]# kubectl exec -it test-webapp /bin/bashroottest-webapp:/# cd /usr/share/nginx/html/roottest-webapp:/usr/share/nginx/html# lsindex.html roottest-webapp:/usr/share/nginx/html# cat index.htmlHello, cloud computing Hello, Mr. Wang[rootkub-k8s-master configmap]# curl 10.244.2.25Hello, cloud computing Hello, Mr. Wang

更多文章