Configmap&Secret 结合Reloader实现服务热更新

网友投稿 309 2022-10-23

Configmap&Secret 结合Reloader实现服务热更新

前提

业务环境进行服务构建或者部署时经常遇到一个问题,就是不同的环境要配置不同的资源信息.有些资源信息还比较敏感,在构建过程总导出传递,容易产生信息泄露,存在较大的安全隐患.在容器化时代结合 K8S 集群运行服务,通常会依赖 Configmap 或者 Secret 来解决此类问题.

细分容器化配置场景如下:

1. 将配置文件直接打包到镜像中,但这种方式不推荐使用,因为修改配置不够灵活。2. 通过定义Pod清单时,指定自定义命令行参数,即设定 args:["命令参数"],这种可在启动Pod时,传参来修改Pod的应用程序的配置文件.3. 使用环境变量来给Pod中应用传参修改配置,但要使用此种方式,必须符合以下前提之一. 1) Pod中的应用程序必须是Cloud Native的应用程序,即支持直接通过环境变量来加载配置信息。 2) 通过定义Entrypoint脚本的预处理变量来修改Pod中应用程序的配置文件,这些Entrypoint脚本,可以使用set,sed,grep等工具来实现修改,但也要确保容器中有这些工具。4. 存储卷: 我们可将配置信息直接放到存储卷中,如PV中,Pod启动时,自动挂载存储卷到配置文件目录,来实现给Pod中应用提供不同的配置。5. Secret 或 ConfigMap

细聊 Secret 或 ConfigMap

Secret

Secret:它是一种相对安全的configMap,因为它将configMap通过base64做了编码, 让数据不是明文直接存储在configMap中,起到了一定的保护作用,但对Base64进行反编码,只是相对安全。

Secret类型有三种:

generic: 通用类型,通常用于存储数据。tls:此类型仅用于存储私钥和证书。docker-registry: 若要保存docker仓库的认证信息的话,就必须使用此种类型来创建。

ConfigMap

ConfigMap :是一个 API 对象, 让你可以存储其他对象所需要使用的配置。

目标:

为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

ConfigMap 使用方式:

可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:在容器命令和参数内容器的环境变量在只读卷里面添加一个文件,让应用来读取编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

reloader简介

Reloader 可以观察 ConfigMap 和 Secret 中的变化,并通过相关的 deploymentconfiggs、 deploymentconfiggs、 deploymonset 和 statefulset 对 Pods 进行滚动升级。

reloader安装

当前版本:reloader-v0.0.104安装空间:namespace: default

极简安装

$ kubectl apply -f createdclusterrolebinding.rbac.authorization.k8s.io/reloader-reloader-role-binding createddeployment.apps/reloader-reloader createdserviceaccount/reloader-reloader created

部署选项

reloader 能够配置忽略cm或者secrets资源,可以通过配置在reader deploy中的spec.template.spec.containers.args,如果两个都忽略,那就缩小deploy为0,或者不部署reoader。Args--resources-to-ignore=configMaps :To ignore configMaps--resources-to-ignore=secrets :To ignore secrets

验证服务

#启动中[root@cnvskubmdev-101-169 ]# kubectl get pod -n defaultNAME READY STATUS RESTARTS AGEreloader-reloader-6498bd576-8htd4 0/1 ContainerCreating 0 18s#启动成功[root@cnvskubmdev-101-169 ]# kubectl get pod -n defaultNAME READY STATUS RESTARTS AGEreloader-reloader-6498bd576-8htd4 1/1 Running 0 92s

推荐使用方法

1:暴力模式:

服务添加注释: reloader.stakater.com/auto: true效果:服务挂载使用的所有ConfigMap或Secret任意一个发生变更服务将会自动滚动更新​

2: 兼容模式:

服务添加注释: configmap.reloader.stakater.com/reload: cm-test-01多个ConfigMap使用逗号分隔:configmap.reloader.stakater.com/reload: cm-test-01,cm-test-02效果:指定ConfigMap或Secret,如果一个deployment挂载有多个cm或者的场景下,我们只希望更新特定一个ConfigMap后,deploy发生滚动更新,更新其他的cm,服务不更新,这种场景可以将ConfigMap在服务中指定为单个或着列表实现。

注意事项

Reloader自动触发滚动更新,可能会导致业务中断。使用该功能时需要评估pod滚动更新对业务带来的影响。reloader.stakater.com/search 和 reloader.stakater.com/auto 并不在一起工作。reloader.stakater.com/auto的优先级高于reloader.stakater.com/search.

参考信息:

https://blog.csdn.net/xzk9381/article/details/117462348https://cloud.tencent.com/developer/article/1859051https://github.com/stakater/Reloaderhttps://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

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

上一篇:Mybatis中isNotNull与isNotEmpty的使用心得
下一篇:深度实战玩转算法
相关文章

 发表评论

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