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