V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jack80342
V2EX  ›  Java

redis cluster 模式在 kubernetes 平台部署方案 只能提供给 k8s 集群内的应用使用,对集群外的应用根本用不了

  •  
  •   jack80342 · 2021-01-11 21:46:35 +08:00 · 3122 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    redis cluster 模式在 kubernetes 平台部署方案 只能提供给 k8s 集群内的应用使用,对集群外的应用根本用不了,因为一旦涉及到 move 命令,redis 节点只会给出内部的 pod ip,这个使得集群外的应用根本连不上,因为这个涉及到 redis 的源码,redis 集群节点的相互通讯使用的 redis 进程所在的环境的 ip,而这个 ip 就是 pod ip,相对的节点发送给客户端的 move 的 ip 也是 pod ip 。 现向万能的社区征求方案意见,大家可自由发表方案意见。

    16 条回复    2021-03-12 12:11:21 +08:00
    jj783850915
        1
    jj783850915  
       2021-01-11 23:25:58 +08:00 via Android
    集群前搞个代理?阿里云的 redis 集群似乎就是这么搞的
    lhx2008
        2
    lhx2008  
       2021-01-11 23:32:41 +08:00
    pod ip 也可以是 underlay 的
    ss098
        3
    ss098  
       2021-01-12 01:23:50 +08:00 via iPhone
    可能需要一个 NodePort Service ?
    Weny
        4
    Weny  
       2021-01-12 02:16:44 +08:00 via iPhone
    handless 映射到公网,集群配置里填公网地址
    jxlwqq
        5
    jxlwqq  
       2021-01-12 09:11:53 +08:00
    apply 个 对外的 Service 或者 Ingress
    MatthewHan
        6
    MatthewHan  
       2021-01-12 09:32:41 +08:00
    搞个 type 为 NodePort 的 Service 可以暴露服务,默认的是 Service 是 ClusterIP 模式的,还有可以看下 Ingress 的相关内容。
    monsterxx03
        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.
    haython
        8
    haython  
       2021-01-12 13:51:16 +08:00   ❤️ 1
    配置 redis 的 cluster-announce-ip
    wennew
        9
    wennew  
       2021-01-12 14:17:58 +08:00
    好像可以设置为宿主机的 ip,端口不一样就行
    hz570815725
        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
    julyclyde
        11
    julyclyde  
       2021-01-13 14:06:05 +08:00
    和 k8s service 基本上没啥关系
    redis cluster 的客户端知道集群结构并且直接连接各节点
    jack80342
        12
    jack80342  
    OP
       2021-03-11 17:14:43 +08:00
    @haython 因为实在 k8s 里面,不清楚 pod 会移到哪台机器上
    jack80342
        13
    jack80342  
    OP
       2021-03-11 17:16:35 +08:00
    @jj783850915 请问您有具体的实现方式吗?
    jack80342
        14
    jack80342  
    OP
       2021-03-11 17:34:23 +08:00
    @julyclyde 是的。就是因为 redis 集群在 k8s 里,而且集群的客户端直接连接集群的各节点导致的。
    jack80342
        15
    jack80342  
    OP
       2021-03-12 09:20:46 +08:00
    @Weny 请问具体需要怎么操作?
    julyclyde
        16
    julyclyde  
       2021-03-12 12:11:21 +08:00
    @jack80342 redis 改为 host network 模式运行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.