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
我看到了两种方法:
- 使用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.
- 正在手动创建 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
我有一个包含 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
我看到了两种方法:
- 使用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.
- 正在手动创建 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