kubernetes 微服务的动态配置技术

11dmarpk  于 2023-06-05  发布在  Kubernetes
关注(0)|答案(2)|浏览(319)

我在Kubernetes集群上运行微服务,目前我所有的配置都是在部署时作为环境变量注入的,但是很少有微服务需要某些业务配置,这些配置可以在Pod的生命周期中任意多次更改,所以我决定将它们排除在ENV之外,下面是我能想到的,
配置服务器,允许企业修改配置(通过UI)并永久存储配置(一些k,v db)。
现在更新MS配置

  • 配置服务器可以推送它。

但是这很困难,因为每个MS都有n个副本,如何将它们全部更新?.

  • MS可以从配置服务器拉取配置。

但是这需要昂贵的定期轮询。
那么,管理动态配置并仅在配置发生更新时更新所需MS的所有副本的更好方法是什么呢?

b4wnujal

b4wnujal1#

有几种方法可以实现您的目标,但在k8s环境中最适用的方法似乎是使用“CM”集群服务,例如etcd、zookeeper或consul。
这意味着对应用程序(MS)的代码更改。例如,它们将注册到特定于每个MS配置的etcd节点(键值树存储)中的改变,并且一旦节点改变就被通知,然后进行调用以检索改变。这种设计通常使用REST或(g)RPC协议来完成,这些协议包括etcd、zookeeper、consul等。我认为这种“观察者”模式可以回答您对昂贵的轮询的担忧(还有配置更改的频率是多少?通常是罕见的事件……)
当然,这也意味着您需要在CM存储和应用程序中维护MS的配置模式,以支持动态配置更改。

iqxoj9l9

iqxoj9l92#

构建一个配置服务,然后让你的其他服务连接到它来拉下配置和流更新是很常见的。
例如Netflix的https://github.com/Netflix/archaius、Amplitude的DynConf https://amplitude.com/blog/dynamic-configuration或Prefab提供的服务https://prefab.cloud/features/config/
这些都有不同的解决问题的方法,但是通过SSE进行流更新是一个很好的开始。

相关问题