我正在尝试连接到我的kubernetes集群中的一些redis pods,但是我无法让它工作。在连接到redis集群的程序中,我尝试使用服务名作为主机名来调用redis服务 redis-sentinel:26379
或者使用运行redis映像的3个pod中的端点的直接列表 10.0.10.:26379
. 我知道redis集群可以工作,因为我可以在docker/kubernetes之外运行我的程序,把redis sentinel服务变成一个nodeport,它可以连接并运行得很好。但我无法从kubernetes内部的其他豆荚连接到这个redis集群。
使用docker桌面作为我的kubernetes环境。
redis pod服务:
kind: Service
metadata:
labels:
name: sentinel
role: service
name: redis-sentinel
spec:
ports:
- port: 26379
targetPort: 26379
selector:
redis-sentinel: "true"
redis sentinel控制器:
kind: ReplicationController
metadata:
name: redis-sentinel
spec:
replicas: 3
selector:
redis-sentinel: "true"
template:
metadata:
labels:
name: redis-sentinel
redis-sentinel: "true"
role: sentinel
spec:
containers:
- name: sentinel
image: k8s.gcr.io/redis:v1
env:
- name: SENTINEL
value: "true"
ports:
- containerPort: 26379
redis主控制器:
kind: ReplicationController
metadata:
name: redis
spec:
replicas: 3
selector:
name: redis
template:
metadata:
labels:
name: redis
role: master
spec:
containers:
- name: redis
image: k8s.gcr.io/redis:v1
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
volumes:
- name: data
@马特,试着打乒乓球 redis-sentinel
超时和 nc redis-sentinel 26379
似乎什么也没做。
@frankyuchenggu是的,dns服务正在运行,但似乎失败了。运行busybox映像在运行 nslookup redis-sentinel
```
**server can't find redis-sentinel.default.svc.cluster.local: NXDOMAIN
***Can't find redis-sentinel.svc.cluster.local: No answer
***Can't find redis-sentinel.cluster.local: No answer
***Can't find redis-sentinel.default.svc.cluster.local: No answer
***Can't find redis-sentinel.svc.cluster.local: No answer
***Can't find redis-sentinel.cluster.local: No answer
看起来busybox映像与 `nslookup` 命令。使用来自kubernetes dns调试页的dnsutils映像可以找到服务
$ kubectl exec -ti dnsutils -- nslookup redis-sentinel
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: redis-sentinel.default.svc.cluster.local
Address: 10.110.45.31
然而,似乎尝试 `redis-sentinel.default.svc.cluster.local:26379` 或者 `10.110.45.31:26379` 也不起作用,我的程序仍然找不到redis集群。
1条答案
按热度按时间cfh9epnr1#
我猜你在github上使用了这个教程。在部署您提供的yamls时,我遇到了许多无法连接的问题。在上面提到的教程中,您可以找到您首先必须创建的信息
Master Pod
.我们将使用共享网络名称空间来引导redis集群。特别是,第一个哨兵需要知道如何找到主人(随后的哨兵只需询问第一个哨兵)。因为pod中的所有容器都共享一个网络名称空间,sentinel只需查看$(hostname-i):6379。
那么
Service
后来呢redis server
. 一切就绪后,你只需删除这个豆荚。可以在这里找到快速部署步骤此外,您还可以使用
Redis 3.x.
如何连接跑步
Redis container
,执行命令连接到
redis
使用service
,你应该进入吊舱。如果你检查一下
env
在这个容器中,您将能够找到一些kubernetes配置。现在根据这里的脚本
master=$(redis cli-h${redis\u sentinel\u service\u host}-p${redis\u sentinel\u service\u port}
您可以使用kubernetes envs连接到服务。
或使用特定信息
$ redis-cli -h <service-name> -p <service-port>
```root@redis-sentinel-qf9l8:/data# redis-cli -h redis-sentinel -p 26379
redis-sentinel:26379>