尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ConfigMap祥解

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
返回列表