这个问题类似于Kubernetes PetSet DNS not working,但(我相信)与此类似。我的问题是:我想使用Kubernetes PetSet来运行分片数据库(RethinkDB)。我需要将每个分片传递给数据库中另一个分片的dns地址,以便分片可以作为集群运行。我还需要其他服务来连接数据库并查询它,我想通过k8s NodePort服务(我认为如果其他pod通过服务连接到RethinkDB,每个客户端pod将连接到随机Rethink pod,提供基本的负载均衡。使用NodePort服务也意味着我可以从集群外部连接到Rethink管理控制台。)
我相信Kubernetes应该为每个RethinkDB分片分配一致的域名,我应该能够传递每个分片,例如rethink-0.rethink-service.default.svc.cluster.local
用于群集。但是,我尝试了两种配置PetSet的方法,似乎都没有分配域名rethink-0.rethink-service.default.svc.local
:
1)我创建了一个非无头服务,用于与PetSet交谈,这就是它。在这个配置中,我创建的唯一重新考虑的宠物似乎得到一个随机名称:
$ kc get all
NAME DESIRED CURRENT READY AGE
rc/etcd 1 1 1 46s
rc/pachd 1 1 1 46s
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/etcd 10.0.0.206 <none> 2379/TCP,2380/TCP 46s
svc/kubernetes 10.0.0.1 <none> 443/TCP 3d
svc/pachd 10.0.0.176 <nodes> 650/TCP,651/TCP 46s
svc/rethink-service 10.0.0.3 <nodes> 8080/TCP,28015/TCP,29015/TCP 46s
NAME READY STATUS RESTARTS AGE
po/etcd-x02ou 1/1 Running 0 46s
po/pachd-cqdus 1/1 Running 1 46s
po/rethink-0 1/1 Running 0 46s
info: 2 completed object(s) was(were) not shown in pods list. Pass --show-all to see all objects.
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
pvc/rethink-volume-claim-rethink-0 Bound rethink-volume-0 1Gi RWO 46s
$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
...
# nslookup -type=srv rethink-service.default.svc.cluster.local
Server: 10.0.0.10
Address: 10.0.0.10#53
rethink-service.default.svc.cluster.local service = 10 100 0 3231383531646337.rethink-service.default.svc.cluster.local.
这里我的RethinkDB宠物似乎得到了名字3231383531646337.rethink-service.default.svc.cluster.local
2)我创建了一个非无头服务(用于与Rethink交谈的外部服务)和无头服务(用于域名分配),我似乎仍然获得随机DNS名称:
$ kc get all
NAME DESIRED CURRENT READY AGE
rc/etcd 1 1 1 6m
rc/pachd 1 1 1 6m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/etcd 10.0.0.59 <none> 2379/TCP,2380/TCP 6m
svc/kubernetes 10.0.0.1 <none> 443/TCP 3d
svc/pachd 10.0.0.222 <nodes> 650/TCP,651/TCP 6m
svc/rethink-headless None <none> 6m
svc/rethink-service 10.0.0.30 <nodes> 8080/TCP,28015/TCP,29015/TCP 6m
NAME READY STATUS RESTARTS AGE
po/etcd-anc7v 1/1 Running 0 6m
po/pachd-i1anr 1/1 Running 1 6m
po/rethink-0 1/1 Running 0 6m
info: 2 completed object(s) was(were) not shown in pods list. Pass --show-all to see all objects.
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
pvc/rethink-volume-claim-rethink-0 Bound rethink-volume-0 1Gi RWO 6m
$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
...
# nslookup -type=srv rethink-service.default.svc.cluster.local
Server: 10.0.0.10
Address: 10.0.0.10#53
rethink-service.default.svc.cluster.local service = 10 100 0 6638393531396237.rethink-service.default.svc.cluster.local.
在这里,我的RethinkDB宠物似乎得到了名字6638393531396237.rethink-service.default.svc.cluster.local
,它似乎仍然是武断的。
我的基本问题是:我是否需要将节点连接到无头服务,以及我的非无头NodePort服务,以获得稳定的DNS地址?我是否可以为同一组节点提供两种服务?为什么这些设置都没有为rethink-0
提供域名rethink-0.rethink-<something>.default.svc.cluster.local
?
非常感谢你的帮助!!!
编辑:两个更新:
1)这是我使用的完整k8s清单。这很长,但如果有帮助,我很乐意提取某些部分:http://pastebin.com/nm73Xtxi
2)我无法做出与无头RethinkDB服务相关的任何DNS解析,rethink-headless
:
# nslookup rethink-headless.default
Server: 10.0.0.10
Address: 10.0.0.10#53
** server can't find rethink-headless.default: NXDOMAIN
# nslookup rethink-headless
Server: 10.0.0.10
Address: 10.0.0.10#53
** server can't find rethink-headless: SERVFAIL
答案 0 :(得分:1)
您还可以使用无头服务进行节点之间的数据库访问,并使用常规服务进行外部访问。
将2个服务指向同一节点用于不同目的没有问题
答案 1 :(得分:0)
好的,我有这个工作。完成这项工作的关键是:
第二种方法(有两种服务,一种NodePort服务和一种无头服务)最终起作用。
无头服务需要配置
Ports := [ <rethink DB's cluster port> ]
Ports := [ <rethink DB's query port>, <rethink DB's admin port> ]
ServiceName := "rethink-headless"
配置了所有这些后,我得到了:
$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
# apt update && apt install -y dnsutils
# nslookup -type=srv rethink-headless.default.svc.cluster.local
Server: 10.0.0.10
Address: 10.0.0.10#53
rethink-headless.default.svc.cluster.local service = 10 100 0 rethink-0.rethink-headless.default.svc.cluster.local.
所以我终于得到了rethink-0.rethink-headless.default.svc.cluster.local