redis cluster 模式在 kubernetes 平台部署方案 只能提供给 k8s 集群内的应用使用,对集群外的应用根本用不了,因为一旦涉及到 move 命令,redis 节点只会给出内部的 pod ip,这个使得集群外的应用根本连不上,因为这个涉及到 redis 的源码,redis 集群节点的相互通讯使用的 redis 进程所在的环境的 ip,而这个 ip 就是 pod ip,相对的节点发送给客户端的 move 的 ip 也是 pod ip 。 现向万能的社区征求方案意见,大家可自由发表方案意见。
1
jj783850915 2021-01-11 23:25:58 +08:00 via Android
集群前搞个代理?阿里云的 redis 集群似乎就是这么搞的
|
2
lhx2008 2021-01-11 23:32:41 +08:00
pod ip 也可以是 underlay 的
|
3
ss098 2021-01-12 01:23:50 +08:00 via iPhone
可能需要一个 NodePort Service ?
|
4
Weny 2021-01-12 02:16:44 +08:00 via iPhone
handless 映射到公网,集群配置里填公网地址
|
5
jxlwqq 2021-01-12 09:11:53 +08:00
apply 个 对外的 Service 或者 Ingress
|
6
MatthewHan 2021-01-12 09:32:41 +08:00
搞个 type 为 NodePort 的 Service 可以暴露服务,默认的是 Service 是 ClusterIP 模式的,还有可以看下 Ingress 的相关内容。
|
7
monsterxx03 2021-01-12 10:00:34 +08:00
和 redis 没关系, 取决于你用的什么网络方案,比如 aws 上他们另外开发的 vpc cni plugin, 每个 pod 会被分配一个 vpc 内可路由的内网 ip, 给 redis cluster 设置 headless service 映射到 route53 上, 不在 k8s 内,但在 vpc 内的 pod 就能通过域名解析到正确的 ip.
|
8
haython 2021-01-12 13:51:16 +08:00 1
配置 redis 的 cluster-announce-ip
|
9
wennew 2021-01-12 14:17:58 +08:00
好像可以设置为宿主机的 ip,端口不一样就行
|
10
hz570815725 2021-01-13 09:14:20 +08:00
讲下我对 redis cluster 的三个理解:
1:k8s 上使用 StateFulSet 部署 redis cluster 2:需要集群外访问,两个办法,一是从 StateFulSet 通信角度出发,可以查看这篇文章,作者是 k8s 的工程师。Exposing StatefulSets in Kubernetes | by Bob Killen | ITNEXT https://itnext.io/exposing-statefulsets-in-kubernetes-698730fb92a1 。根据他的文章,那么我们需要对 Redis 实例域名进行处理。二则是直接暴露 Node 的 IP,我对他进行了实现和实践,并写成了博客,链接在最后。 3:Chart 化,工具组件的本质是易用性,所以是有必要对其进行封装简化部署的。但我看到 Chart 包的 redis 集群,基本上都是 HA 哨兵实现的 K8s 部署 Redis Cluster 集群 | 猥琐发育不要浪 https://www.gotkx.com/?p=76 |
11
julyclyde 2021-01-13 14:06:05 +08:00
和 k8s service 基本上没啥关系
redis cluster 的客户端知道集群结构并且直接连接各节点 |
13
jack80342 OP @jj783850915 请问您有具体的实现方式吗?
|