【问题标题】:How to setup an ETCD cluster in Kubernetes using DNS discovery (SRV)?如何使用 DNS 发现 (SRV) 在 Kubernetes 中设置 ETCD 集群?
【发布时间】:2019-07-06 15:01:27
【问题描述】:
我希望在我的 k8s 集群中运行一个动态的 etcd 集群。我能想到的最好的动态方式(没有硬编码的地址、名称等)是使用 DNS 发现和内部 k8s DNS (CoreDNS)。
我发现了有关为 k8s 中的服务创建的 SRV 记录的分离信息,以及有关 etcd DNS 发现如何工作的一些解释,但没有完整的操作方法。
例如:
- k8s 如何命名
SRV 条目?
- 是否应该以特定方式命名它们以便
etcd 能够找到它们?
- 是否应该设置任何特殊的 CoreDNS 设置?
对此的任何帮助将不胜感激。
参考:
【问题讨论】:
标签:
kubernetes
dns
etcd
srv
【解决方案1】:
k8s 是如何命名 SRV 条目的?
通过Service.port[].name,这就是为什么 kubernetes 中几乎所有内容都必须是 DNS 友好名称的原因:因为很多时候,它确实会为您将它们放入 DNS 中。
具有dig 或足够新的nslookup 的 Pod 将显示:
$ dig SRV kubernetes.default.svc.cluster.local.
您会看到kubernetes Service 正在宣传的端口的名称。
是否应该以特定的方式命名它们以便 etcd 能够找到它们?
是的,正如您在链接到的页面中看到的那样,它们需要被命名为以下四个之一:
_etcd-client
_etcd-client-ssl
_etcd-server
_etcd-server-ssl
在 kubernetes 方面是这样的:
ports:
- name: etcd-client
port: 2379
containerPort: whatever
- name: etcd-server
port: 2380
containerPort: whatever