【问题标题】:Kubernetes keep variables fixed to podsKubernetes 将变量固定到 pod
【发布时间】:2019-11-21 15:49:18
【问题描述】:
我有一个有 3 个 pod 的应用程序,每个 pod 需要一个固定的变量名存储在每个 pod 中。因此,如果一切正常,三个 pod 的 var1、var2 和 var3 将存储在相应的 pod 上。
如果第一个具有 var1 的 pod 被替换,如何确定其他 2 个 pod 具有 var2 和 var3,从而知道应该为新 pod 分配 var1?
这可以用有状态集来完成吗?
【问题讨论】:
标签:
kubernetes
kubernetes-pod
kubernetes-statefulset
【解决方案1】:
我看到了两种方法:
- 使用StatefulSets:
对于有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 将是
分配一个整数序号,从 0 到 N-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
【解决方案2】:
使用 StatefulSet 你可以从 pod-name 中提取它。
env:
- name: podname
valueFrom:
fieldRef:
fieldPath: metadata.name
然后从名称的末尾获取。 StatefulSet 中的 pod 将被命名为 <StatfulSetName>-<ordinal>,请参阅 pod-identity