k8s的configMap基本概念及案例

网友投稿 274 2022-09-12

k8s的configMap基本概念及案例

pod中两种特殊类型的存储卷:secret,configMap  pod.spec.volumes.secret  pod.spec.volumes.configMap多数情况下,这两个存储卷不是给pod做存储空间来用的,而是给我们的管理员或者用户提供了从集群外部向pod内部的应用注入配置信息的方式。 configMap里放的是配置信息configMap的主要作用是:让配置信息与镜像文件结藕,配置信息可以通过configMap注入。简单来讲,一个configMap就是一系列配置数据的集合,而这些数据将来可以注入到pod对象中的容器中,以供使用。而注入方式有两种:1,直接把configMap当存储卷。2,使用env的envFrom应用configMap当中所保存的数据在每一个configMap中所有的配置信息都保存为键值格式。configMap属于名称空间级别的资源。configMap里面的配置信息是明文的。secret相对于configMap,功能上是相似的,但是secret是以其他编码方式去记录配置信息的,但是也可以被解读,只不过有技术门槛,不是那么容易就被解读的。使用base64是可以解读的:echo ******** | base64 -d********是kubectl describe secret secretName -o yaml中的值的编码配置容器化应用的方式:    1.自定义命令行参数;       args:[ ]    2.把配置文件直接焙进镜像;    3.环境变量;      (1)Cloud Native的应用程序一般可直接通过环境变量加载配置;      (2)通过entrypoint脚本来预处理变量为配置文件中的配置信息;    4.存储卷;pod资源环境变量的获取方式:在pod中我们要想通过环境变量传递内容、传递数据、传递信息给pod中的容器我们需要在容器上使用env、value、或valueFrom来获取数据;在pod.spec.containers.env{name,value}/{valueFrom}pod.spec.containers.env.valueFrom.{configMapKeyRef:configMap}/{fieldRef:引用配置文件的某个字段:metadata...}/{resourceFieldRef:资源限制}/{secretKeyRef:secret}使用valueFrom方式获取配置的方式:pod.spec.containers.env.valueFrom.configMapKeyRefpod.spec.containers.env.valueFrom.secretKeyRefkubectl create configMap configMapName --from-file=key1=file1url --from-file=keyN=fileNurl 此时以文件名为key,以文件内容为value详情:kubectl create configmap --help例:创建一个pod,创建一个configMap,pod用env引用configMap定义的key和value。1.先创建configMap 1 kubectl create cm cm-1 --from-literal=nginx_port=80 --from-literal=server_name=myapp.smbands.com 2 kubectl describe cm cm-1 3 Name: cm-1 4 Namespace: default 5 Labels: 6 Annotations: 7 8 Data 9 ==== 10 nginx_port: 11 ---- 12 80 13 server_name: 14 ---- 15 myapp.smbands.com 16 Events: 2.创建pod 1 vim myapp-pod.yaml 2 apiVersion: apps/v1 3 kind: Deployment 4 metadata: 5 name: myapp-demo 6 namespace: default 7 spec: 8 replicas: 1 9 selector: 10 matchLabels: 11 app: myapp 12 template: 13 metadata: 14 labels: 15 app: myapp 16 spec: 17 containers: 18 - name: myapp 19 image: ikubernetes/myapp:v1 20 imagePullPolicy: IfNotPresent 21 ports: 22 - name: http 23 containerPort: 80 24 env: 25 - name: NGINX_SERVER_PORT 26 valueFrom: 27 configMapKeyRef: 28 name: cm-1 29 key: nginx_port 30 - name: NGINX_SERVER_NAME 31 valueFrom: 32 configMapKeyRef: 33 name: cm-1 34 key: server_name 3.运行pod查看env 1 kubectl apply -f myapp-pod.yaml 2 kubectl exec myapp-pod-5db6d54bb7-rjhkz -- printenv 3 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 4 HOSTNAME=myapp-demo-5db6d54bb7-rjhkz 5 NGINX_SERVER_PORT=80 6 NGINX_SERVER_NAME=myapp.smbands.com 当我们使用环境变量注入时,只在pod启动时加载生效如上示例如果更改configMap中的key或value,容器中的env只会在重启容器时生效。当然我们可以使用存储卷方式来实时获取configMap里的数据。只不过存储卷方式,configMap挂载到pod中的某个目录下每个键成为文件名,对应值成为文件内容。也就是说,把configMap中的键值以文件方式挂载到pod中。例:创建一个pod,创建一个configMap,pod使用挂载卷方式引用configMap里的主机配置内容,pod运行后可直接使用指定主机访问。1.创建configMap: 1 vim config 2 server { 3 server_name myapp.smbands.com; 4 listen 80; 5 root /data/web/html; 6 } 7 kubectl create cm cm-2 --from-file=conf 8 kubectl describe cm cm-2 9 Name: cm-2 10 Namespace: default 11 Labels: 12 Annotations: 13 14 Data 15 ==== 16 conf: 17 ---- 18 server { 19 server_name myapp.smbands.com; 20 listen 80; 21 root /data/web/html; 22 } 23 24 Events: 2.创建pod 1 vim myapp-pod-1.yaml 2 apiVersion: apps/v1 3 kind: Deployment 4 metadata: 5 name: myapp-1 6 namespace: default 7 spec: 8 replicas: 1 9 selector: 10 matchLabels: 11 app: myapp 12 template: 13 metadata: 14 labels: 15 app: myapp 16 spec: 17 containers: 18 - name: myapp 19 image: ikubernetes/myapp:v1 20 imagePullPolicy: IfNotPresent 21 ports: 22 - name: http 23 containerPort: 80 24 volumeMounts: 25 - name: wwwconf 26 mountPath: /etc/nginx/conf.d/ 27 volumes: 28 - name: wwwconf 29 configMap: 30 name: cm-2 3.启动pod,查看挂载点目录。 1 kubectl apply -f myapp-pod-1.yaml 2 kubectl exec myapp-1-5b5fc74c6-jd2b7 -- cat /etc/nginx/conf.d/conf 3 server { 4 server_name myapp.smbands.com; 5 listen 80; 6 root /data/web/html; 7 } 此时可以修改hosts文件,在发布路径下写测试页,然后就可以curl myapp.smbands.com4.修改configMap cm-2的listen 80 为listen 8080kubectl edit cm cm-2 修改80为8080等待片刻,再查看 1 kubectl exec myapp-1-5b5fc74c6-jd2b7 -- cat /etc/nginx/conf.d/conf 2 server { 3 server_name myapp.smbands.com; 4 listen 8080; 5 root /data/web/html; 6 } 注意:这里储存卷挂载方式可以实时注入信息,但是不一定注入的信息都能生效。比如此例,虽然cm-2修改为8080,pod中的配置文件也同步为8080,但是nginx的监听地址还是80,需要重载配置文件才能生效。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s的Pod控制器
下一篇:k8s资源配置清单的书写格式(yaml文件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~