我有一个用于处理保留策略的微服务。此应用程序具有保留的默认配置,例如:保留大小、文件位置等。但我们还希望创建一个API,以便用户在运行时使用自定义值更改此配置。
我用默认值创建了一个配置Map,并在应用程序中使用k8s客户端库来获取/更新/监视配置Map。
我的问题是,使用configmap进行动态业务配置是否正确?或者它是用于静态配置的,用户在运行时不应该接触它?
先谢了
我有一个用于处理保留策略的微服务。此应用程序具有保留的默认配置,例如:保留大小、文件位置等。但我们还希望创建一个API,以便用户在运行时使用自定义值更改此配置。
我用默认值创建了一个配置Map,并在应用程序中使用k8s客户端库来获取/更新/监视配置Map。
我的问题是,使用configmap进行动态业务配置是否正确?或者它是用于静态配置的,用户在运行时不应该接触它?
先谢了
2条答案
按热度按时间xxslljrj1#
没有任何规则反对它。许多软件利用kube API来执行某种逻辑/状态,即领导者选举。所有这些都需要应用程序将更改应用到kube资源。记住这一点,它总是会给你的API带来一些额外的负载,如果你不走运,这可能会成为一个问题。大约两年前,我们“我在一个托管k8s服务上遇到了API限制耗尽的问题,因为我们使用了大量具有相当密集的领导者选举逻辑的部署(每5秒每个pod 2个请求)。这个问题从那时起就消失了,但它显示了在设计这样的交互时必须考虑的因素(重试,回退等)。
afdcj2ne2#
使用configMap非常适合此类用例。您可以使用客户端库来监视给定configMap上的更新,但是更干净的解决方案是将configMap作为文件挂载到pod中,并从给定文件设置配置。由于您将configMap挂载为卷,更改将不需要pod重新启动以使更改在pod中可见(不像env变量,它只在pod重新创建后才“刷新”)。
假设您有这样的
configMap
:然后将此
configMap
作为卷装载到Pod中:pod运行时,命令
ls /etc/config/
生成以下输出:通过这种方式,您还可以减少API服务器的“噪音”,因为您可以简单地查询给定的文件以获取任何配置的更新。