我有一个有 3 个 pod 的应用程序,每个 pod 需要一个固定的变量名存储在每个 pod 中。因此,如果一切运行正常,三个 pod 的 var1、var2 和 var3 将存储在相应的 pod 上。
如果第一个具有 var1 的 pod 被替换,我如何确定其他 2 个 pod 具有 var2 和 var3,从而知道应该为新 pod 分配 var1?
这可以用有状态集来完成吗?
我有一个有 3 个 pod 的应用程序,每个 pod 需要一个固定的变量名存储在每个 pod 中。因此,如果一切运行正常,三个 pod 的 var1、var2 和 var3 将存储在相应的 pod 上。
如果第一个具有 var1 的 pod 被替换,我如何确定其他 2 个 pod 具有 var2 和 var3,从而知道应该为新 pod 分配 var1?
这可以用有状态集来完成吗?
我看到了两种方法:
对于具有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 将被分配一个从 0 到 N-1 的整数序号,该序号在 Set 中是唯一的。
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
使用 aStatefulSet
您可以从 pod-name 中提取它。
env:
- name: podname
valueFrom:
fieldRef:
fieldPath: metadata.name
然后从名称的末尾获取它。StatefulSet 中的 pod 将被命名<StatfulSetName>-<ordinal>
,参见pod-identity