网站首页 > 精选教程 正文
Kubernetes学习路上的那些事儿,很有必要分享出来
什么是ConfigMap
官网上给出了一系列使用ConfigMap的实例,可以点击链接进行查看:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/
简单的说,ConfigMap主要是配合k8s集群实现配置参数加载和业务容器运行分离的,对于开发和运维技术人员来说,“解耦”是个福音。因为难免配置参数发生变动,如果在没有“解耦”的情况下,一旦配置参数发生了改变,则需要手动的去修改业务代码,重新部署业务等,工作量大,且容易出错。
ConfigMap是专门负责维护配置参数,比如业务服务端口号、环境变量、挂载文件路径等等,作为Pod或者其它k8s集群资源,直接引用即可,一旦配置参数发生变动,只需要修改ConfigMap维护的代码即可。
实验过程
实验准备:
K8S集群环境一套,可以是多节点集群,也可以是用于测试和学习的单节点。
实验一:采用环境变量env方式调用configMap的实验。编写ConfigMap的yaml文件,并且创建Pod用于验证。文件名就叫configMap-test.yaml,详细代码如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-1
data:
server.port: "80"
server.addr: www.test.com
kubectl create -f configMap-test.yaml //创建ConfigMap
kubectl get cm //查看创建的ConfigMap
kubectl describe configmap configmap-1 //查看ConfigMap运行信息,configmap-1是自定义的名称
在这个ConfigMap中,主要维护了两个配置参数,就是data语句块中的server.port和server.addr,赋的值分别是80端口和www.test.com。然后在创建一个Pod验证,看看是否在该Pod创建并运行中能够获取ConfigMap的配置参数值。
Pod的yaml文件就叫configMap-pod.yaml.
apiVersion: v1
kind: Pod
metadata:
name: cmpod
namespace: default
spec:
containers:
- name: mynginx
image: nginx
env:
- name: nginx_port
valueFrom:
configMapKeyRef:
name: configmap-1
key: server.port
- name: nginx_addr
valueFrom:
configMapKeyRef:
name: configmap-1
key: server.addr
注意:以上Pod中是通过env语句块来调用的configMap的(自定义名称configmap-1)。
kubectl apply -f configMap-pod.yaml //创建Pod
kubectl get pod //查看pod
kubectl exec -it cmpod -- bash //进入该pod内部
evn | grep nginx* //在pod内部查看带“nginx”的环境变量
确实能够查找的到configMap中维护的两个配置参数,只是在configMap中命名是server.port和server.addr,在Pod中引用时为了区别名称,修改为nginx.port和nginx.addr了。代码的简单解释如下:
通过实验,的确实现了从外部向容器内部传配置参数的功能,实现了业务运行和配置参数的解耦。但是,如果我们尝试着修改一下configMap中的配置参数,比如将server.port端口修改为“8080”,然后再进入验证Pod内部,查看env环境变量,我们会“惊讶”的发现端口仍然是“80”,不会发生变化。
是的,采用env方式,configMap必须在pod创建前创建,且一旦创建后就无法修改了,因为即使修改了configMap的配置参数,在Pod中也是无法生效的。
实验二:采用共享卷的调用模式,即通过volumes语句块实现。只需要稍微修改一下验证pod的yaml文件,为了区别第一个实验,我们就叫configMap-pod2.yaml。
apiVersion: v1
kind: Pod
metadata:
name: cmpod2
namespace: default
spec:
containers:
- name: mynginx
image: nginx
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/conf.d/
volumes:
- name: nginx-conf
configMap:
name: configmap-1
主要修改的代码是调用部分,通过volumes语句块来调用。configMap仍然还是configmap-1,在pod内部生成的文件放在/etc/nginx/conf.d这个文件夹下。
创建并启动cmpod2,并且进入cmpod2内部查看生成的文件,跟env调用方式不一样的是,这里分别生成了两个文件server.port和server.addr,也就是configMap中data语句块里的两个key,读取文件后正好就是赋予的两个值——“80”和www.test.com.
我们再次尝试着修改一下configMap中的配置参数,比如修改“80”为“8080”,分别进入两个验证pod中,看看是否都有变化。
实验总结
1)env调用和共享卷调用的异同,通过上面两个实验就比较清楚了,如果配置参数在初始化完成后不再更改,适合用env方式;如果配置参数在后续业务运行中可能变化,采用共享卷调用更合适一些。
2)除了env环境变量调用和共享卷调用外,configMap还可以使用命令行和加载文件等方式调用,详细信息可参考官网。
猜你喜欢
- 2024-10-20 K8S Configmap和Secret热更新之Reloader
- 2024-10-20 WebSocket与Nginx的小秘密 ng websocket
- 2024-10-20 入门Elasticsearch,我觉着你看这一篇就够了
- 2024-10-20 还不会MapReduce的离线数据分析?阿里大数据负责人教你
- 2024-10-20 如何使用Nginx实现不同的Hearder值代理到不同的后端服务
- 2024-10-20 从netmap到dpdk,从硬件到协议栈,4个维度让网络体系构建起来
- 2024-10-20 MAPREDUCE快速入门 mapreduce讲解
- 2024-10-20 K8s 配置管理必备!ConfigMap vs Secret,哪个更适合你?
- 2024-10-20 Java8 快速实现List转map 、分组、过滤等操作
- 2024-10-20 client-go获取k8s资源信息 k8s获取pod信息
你 发表评论:
欢迎- 05-16原来汇编中的循环是这么玩儿的
- 05-16什么?Java 中的锁还有状态?
- 05-161.4、Java流程控制语句详解
- 05-16Java基础-循环语句
- 05-16Java虚拟机和Dalvik虚拟机有哪些区别和不同?
- 05-16Java、Python、C语言?5大热门编程语言,我该怎么选?
- 05-16java的就业方向有哪些
- 05-16java好学吗?java是不是最难学的语言?
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)