I am looking to have a dynamic etcd cluster running inside my k8s cluster. The best way I can think of doing it dynamically (no hardcoded addresses, names, etc.) is to use DNS discovery, with the internal k8s DNS (CoreDNS).
I find detached information about SRV records created for services in k8s, and some explanations on how etcd DNS discovery works, but no complete howto.
For example:
SRV entries?etcd to be able to find them?Any help on that would be greatly appreciated.
references:
how does k8s name SRV entries?
via the Service.port[].name, which is why almost everything in kubernetes has to be a DNS-friendly name: because a lot of times, it does put them in DNS for you.
A Pod that has dig or a new enough nslookup will then show you:
$ dig SRV kubernetes.default.svc.cluster.local.and you'll see the names of the ports that the kubernetes Service is advertising.
should they be named with a specific way for etcd to be able to find them?
Yes, as one can see in the page you linked to, they need to be named one of these four:
_etcd-client_etcd-client-ssl_etcd-server_etcd-server-sslso something like this on the kubernetes side:
ports:
- name: etcd-client
port: 2379
containerPort: whatever
- name: etcd-server
port: 2380
containerPort: whatever