我在k8s上部署了一个微服务,它可以与外部云服务对话。外部服务对每个apptoken可以调用多少次有api速率限制。我们可以预先创建多个应用程序。
我们通常运行2-5个吊舱,并希望每个吊舱都有一个标记,这样我们就避免了重叠和超过速率限制。
什么是最简单的方式,在开始的时候分配一个令牌给每个吊舱,因为所有的部署设置都是完全相同的,并且豆荚保持动态循环?
发布于 2019-10-06 20:03:39
正确的方式可能需要某种专门的服务来分发这些凭据。它可能会使用Kubernetes API来查看豆荚是否退出,或者要求服务定期发送心跳以保持当前令牌。共享Redis可以是一种轻量级的方式来维护状态,而不需要真正的服务器。如果你觉得很花哨,你可以写一个Kubernetes控制器,它可以看到用某种标签创建的豆荚,并创建一个具有这个秘密的匹配秘密对象。
如果您真的想避免这种情况,可以在StatefulSet中运行您的应用程序。这将具有按顺序分配pod名称的属性,myservice-0
、myservice-1
、.,因此每个pod都知道它是哪一个。然后,您可以创建一个秘密与令牌,其中密钥的秘密是预期的荚名。服务需要代码从挂载的配置文件中检索值,或者init容器需要将正确的值复制到已知的位置。Kubernetes文档中复制的MySQL示例将讨论更多关于init容器设置的内容。如果您的吊舱经常停止,或者需要频繁地缩放设置,您可能会遇到一些操作上的问题,因为围绕StatefulSet利用率的限制(如果您有5个副本,就不能仅仅停止#2,必须停止编号最高的副本)。
另一种讨厌的方法是站起来一个几乎包含一个计数器的Redis容器。在您选择的语言中编写一个小脚本,将令牌作为文件挂载秘密,增加计数器(可能是环绕),并将n‘’th令牌写入文件。然后,您可以让部署作为init脚本运行。在这里,您可以很容易地使用相同的令牌运行两个吊舱,但如果它们按常规重新启动,时间不会太长。
https://stackoverflow.com/questions/58259444
复制相似问题