【问题标题】:Communication between pods of same statefulset同一 statefulset 的 pod 之间的通信
【发布时间】:2022-11-17 04:22:09
【问题描述】:

在属于同一个状态集的 Pod 之间进行通信的推荐方式是什么?

在我的例子中,kubernetes 服务公开了一个 POST API。因此,当有人点击此 API 时,收到请求的 pod 也应该将请求传递给同一 statefulset 中的其他 pod。

由于我使用的是 statefulset,如果我有三个 pod,假设这些 pod 的名称是 Pod1Pod2Pod3,如果我将这些 pod 绑定到无头服务,比如 MyService,我会能够通过Pod1.MyServicePod2.MyServicePod3.MyService访问 pod。我可以遍历 Pod id 并将请求复制到所有 Pod。但在这种情况下,我不应该将此请求传递给已收到请求的 pod。 如果Pod2收到API请求,它应该将请求传递给Pod1Pod3

有没有办法使用 Kubernetes 客户端在 Go 中实现这个?指出任何此类示例也会有所帮助。

【问题讨论】:

    标签: go kubernetes kubernetes-pod kubernetes-statefulset


    【解决方案1】:

    通过 fieldRef 将名称反映到环境变量,让 Pod 知道自己的身份。

    的例子模板StatefulSet 清单的一部分:

      template:
        metadata:
          labels:
            app: my-distributed-app
        spec:
          containers:
            - name: my-distributed-app
              image: my-image
              env:
                - name: REPLICA_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
    

    这里的吊舱名称可用于实例 REPLICA_NAME。 您可能还需要让实例知道有多少个副本,但我不知道一个好的自动的这样做的方法,您也可以为此设置一个变量,例如

    env:
      - name: REPLICAS
        value: "3"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2018-02-12
      • 2018-01-01
      • 2021-12-30
      相关资源
      最近更新 更多