k8s学习记录,ConfigMap&Secret使用的小技巧(十九)

文章中资料参考来源2022 云原生Kubernetes全栈架构师

1、使用subpath解决挂载覆盖的问题

当我们创建deploy等资源时,如果需要将某个配置文件挂载至pod中,但是pod的文件夹下又有很多其他的文件,如果直接填写挂载文件夹,则会导致目录被覆盖

image

如上图所示,nginx.conf配置文件在/etc/nginx目录下,如果在deploy等资源的yaml文件中,volume配置的路径为/etc/nginx,那么pod中/etc/nginx目录下的其他文件则会被覆盖,仅有configmap中配置的文件

原来的nginx.conf配置文件

image

根据原nginx.conf创建configmap

image

在deploy资源的yaml文件中,修改mountPath

image

创建资源查看,pod启动报错,缺少文件

image

解决方法:在mountPath中配置要挂载的文件名,下方增加节点subPath,填写要挂载的文件名

image

修改yaml文件后进行资源重建替换

image

登录进新建pod资源中查看配置文件挂载路径

image

2、ConfigMap&Secret热更新

a、configmap或secret是通过配置文件创建的

可以使用下面的方法来进行热更新

kubectl create cm nginx-conf --from-file=conf/nginx.conf --dry-run=client -oyaml | kubectl replace -f -

下面以修改nginx.conf配置文件为例进行演示

image
image

查看configmap是否修改成功

image

b、直接修改configmap【适用于简单的configmap修改】

kubectl edit cm cmfromfile

此时,直接进入edit编辑模式,可修改想要修改的配置项,之后按:wq保存退出即可

image
image

c、如果有configmap的yaml文件,直接修改yaml文件也可

image

在上图中,修改configmap的yaml文件

vim game-demo.yaml

image
image

3、设置不可变的ConfigMap&Secret

当我们创建的ConfigMap或者Secret后,如果不希望他们可以被修改,那么可以在yaml文件中添加如下参数

immutable: true

image

当我们再次进去编辑,修改其中的配置时,则会提示配置文件不可修改

image

使用:q!强制退出,取消修改

如果要修改,只有取消immutable的设置

注意


  • 使用ConfigMap或Secret时需要提前进行创建
  • 使用时,对应的key必须是存在的,否则会报错
  • 使用envFrom、valueFrom时,无法热更新环境变量
  • 使用envFrom配置环境变量时,如果key是无效的,那么会忽略掉无效的key
  • ConfigMap和Secret必须要和Pod或者是引用它的资源在同一个namespace下
  • 如果使用了subPath也是无法热更新的
  • ConfigMap和Secret最好不要太大
posted @ 2021-08-27 15:46  Hei蛋炒饭  阅读(286)  评论(1编辑  收藏  举报