我正在尝试了解我发现的关于在 Kubernetes 上部署分片 Memcache 的官方建议,例如 Google 的在 GKE 上部署 Memcached 。具体来说,它建议部署带有无头服务和 StatefulSet 控制器的 memcached Helm 图表,以便 memcached 客户端可以使用 DNS 发现每个 memcached pod 的 IP 地址:
“服务发现逻辑。 在较高层面上,服务发现逻辑由以下步骤组成:
这些步骤对于让系统最初运行是有意义的,但它们并不符合我将 Kubernetes Pod 及其 IP 地址视为临时的一般理解,包括在使用 StatefulSet 控制器时。像这样的实现,即 Kubernetes Pod 通过直接 IP 地址访问另一个 Kubernetes Pod,是否需要某种重复服务发现机制来使 Memcached 服务器 Pod IP 地址在 Pod 在其生命周期内重新创建时保持最新?甚至不用担心有目的地添加/删除 memcached 服务器 Pod。
(链接的教程确实继续设置 https://github.com/facebook/mcrouter 进行代理,但据我所知,这并不能解决 pod IP 地址变化的问题)
我还在官方 Kubernetes Stateful Set 文档中看到: “Pod 的序号、主机名、SRV 记录和 A 记录名称并未更改,但与 Pod 关联的 IP 地址可能已更改。在本教程使用的集群中,它们已更改。这就是为什么重要的是不要更改配置其他应用程序通过 IP 地址连接到 StatefulSet 中的 Pod。”
这似乎与 Google 的建议直接冲突 - 我是否错过了一些关键的理解?