1

我有一个有 3 个 pod 的应用程序,每个 pod 需要一个固定的变量名存储在每个 pod 中。因此,如果一切运行正常,三个 pod 的 var1、var2 和 var3 将存储在相应的 pod 上。

如果第一个具有 var1 的 pod 被替换,我如何确定其他 2 个 pod 具有 var2 和 var3,从而知道应该为新 pod 分配 var1?

这可以用有状态集来完成吗?

4

2 回答 2

4

我看到了两种方法:

  1. 使用有状态集

对于具有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 将被分配一个从 0 到 N-1 的整数序号,该序号在 Set 中是唯一的。

  1. 手动创建Pod 。例子:
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-3
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-3-ctr
    image: polinux/stress

如果您需要您的应用程序了解其运行所在的 Pod,Kubernetes 文档中有一个有趣的页面:“通过环境变量向容器公开 Pod 信息”

例子:

apiVersion: v1
kind: Pod
metadata:
  name: mypod-var1
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      env:
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
于 2019-11-21T17:36:21.720 回答
2

使用 aStatefulSet可以从 pod-name 中提取它。

env:
  - name: podname
    valueFrom:
      fieldRef:
        fieldPath: metadata.name 

然后从名称的末尾获取它。StatefulSet 中的 pod 将被命名<StatfulSetName>-<ordinal>,参见pod-identity

于 2019-11-21T17:32:00.713 回答