Kubernetes 将变量固定为 pods

Kubernetes keep variables fixed to pods

我有一个包含 3 个 pods 的应用程序,每个 pod 都需要一个固定的变量名称存储在每个 pod 中。因此,如果一切 运行 都很好,那么三个 pods 会将 var1、var2 和 var3 存储在相应的 pods.

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

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

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

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

然后从名字的末尾开始获取。 StatefulSet 中的 pods 将被命名为 <StatfulSetName>-<ordinal>,参见 pod-identity

我看到了两种方法:

  1. 使用StatefulSets:

For a StatefulSet with N replicas, each Pod in the StatefulSet will be assigned an integer ordinal, from 0 up through N-1, that is unique over the Set.

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

如果您需要您的应用程序知道它所在的 Pod 运行,Kubernetes 文档中有一个有趣的页面:"Expose Pod Information to Containers Through Environment Variables".

示例:

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