gpt4 book ai didi

redis - Kubernetes Redis 集群问题

转载 作者:IT王子 更新时间:2023-10-29 05:59:49 24 4
gpt4 key购买 nike

我正在尝试使用 centos 上的 kubernetes 创建 redis 集群。我的 kubernetes master 在一台主机上运行,​​而 kubernetes slaves 在两台不同的主机上运行。

etcdctl get /kube-centos/network/config

{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan" } }

这是我的复制 Controller

apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
app: redis
role: master
tier: backend
spec:
replicas: 6
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: redis
command:
- "redis-server"
args:
- "/redis-master/redis.conf"
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /redis-master
name: config
- mountPath: /redis-master-data
name: data
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-config
items:
- key: redis-config
path: redis.conf

kubectl create -f rc.yaml

NAME                           READY     STATUS    RESTARTS   AGE       IP            NODE
redis-master-149tt 1/1 Running 0 8s 172.30.96.4 centos-minion-1
redis-master-14j0k 1/1 Running 0 8s 172.30.79.3 centos-minion-2
redis-master-3wgdt 1/1 Running 0 8s 172.30.96.3 centos-minion-1
redis-master-84jtv 1/1 Running 0 8s 172.30.96.2 centos-minion-1
redis-master-fw3rs 1/1 Running 0 8s 172.30.79.4 centos-minion-2
redis-master-llg9n 1/1 Running 0 8s 172.30.79.2 centos-minion-2

使用的Redis配置文件

appendonly yes
cluster-enabled yes
cluster-config-file /redis-master/nodes.conf
cluster-node-timeout 5000
dir /redis-master
port 6379

我使用以下命令创建了 kubernetes 服务。

kubectl expose rc redis-master --name=redis-service --port=6379 --target-port=6379 --type=NodePort

Name:           redis-service
Namespace: default
Labels: app=redis
role=master
tier=backend
Selector: app=redis,role=master,tier=backend
Type: NodePort
IP: 10.254.229.114
Port: <unset> 6379/TCP
NodePort: <unset> 30894/TCP
Endpoints: 172.30.79.2:6379,172.30.79.3:6379,172.30.79.4:6379 + 3 more...
Session Affinity: None
No events.

现在我已启动并运行所有 pod 和服务。我正在使用 redis-trib pod 创建 redis 集群。

kubectl exec -it redis-trib bash

./redis-trib.rb create --replicas 1 172.30.79.2:6379 172.30.79.3:6379 172.30.79.4:6379 172.30.96.2:6379 172.30.96.3:6379 172.30.96.4:6379

Redis 集群按预期创建并显示以下消息。

[OK] All 16384 slots covered.

现在我应该能够从网络中的任何主机访问 kubernetes 节点 IP(192.168.240.116)和节点端口(30894)上的 redis-cluster。当我从 kubernetes 节点之一执行以下命令时,一切都按预期工作。

redis-cli -p 30894 -h 192.168.240.116 -c

192.168.240.116:30894> set foo bar
-> Redirected to slot [12182] located at 172.30.79.4:6379
OK
172.30.79.4:6379>

当我从同一网络中的不同(非 kubernetes)节点运行相同的命令时,我看到连接超时错误。

redis-cli -c -p 30894 -h 192.168.240.116

192.168.240.116:30894> set foo bar
-> Redirected to slot [12182] located at 172.30.79.4:6379
Could not connect to Redis at 172.30.79.4:6379: Connection timed out

当使用NodePort 服务类型暴露时,是否无法访问kubernetes 集群网络外部的redis-cluster?

我也不能使用 LoadBalancer 服务类型,因为我没有在云上托管它。

这个问题困扰我很久了。有人可以建议我应该使用什么方法来访问网络外部的 redis 集群吗?

谢谢

最佳答案

正在运行 ./redis-trib.rb create --replicas 1 172.30.79.2:6379 172.30.79.3:6379 172.30.79.4:6379 172.30.96.2:6379 172.30.96.3:6379 172.30.96.4:6379这种设置没有意义。

端口6379只能通过您提出的服务访问,但绝不会在您尝试时直接访问。这就是您在尝试使用您的设置时遇到问题的原因。

您可以做的是将每个 POD 公开给它自己的服务,并有一个额外的集群服务来负载平衡外部请求。如图example repository from Kelsey Hightower .通过这种方式,POD 可以通过内部暴露的端口进行通信,并且(外部)客户端可以使用负载均衡的集群端口。这也意味着每个 POD 都需要它自己的 ReplicaSet(或 Deployment)。 Kelsey 在 YouTube 上提供了一段很长的演讲来解释设置 - YouTube/Slideshare .

另一种方法是使用其他示例中所示的单个 redis master。

关于redis - Kubernetes Redis 集群问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42892904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com