在nomad中,我们有一个名为NOMAD_ALLOC_INDEX的env变量,这给了我容器的索引,Kubernetes中是否有类似的env变量用于pod获取pod索引?
你能提供你的输入吗?
谢谢,Sarita
不是真的,除非你使用索引作业(Kubernetes 1.21, Apr. 2021)。
对于已索引的作业,索引将公开给batch.kubernetes.io/job-completion-index
注释和JOB_COMPLETION_INDEX
环境变量中的每个Pod。
官方文档:">静态工作分配下并行处理的索引作业">
您可以使用作业控制器为所有容器设置的内置JOB_COMPLETION_INDEX
环境变量。
还可以通过向下的API定义自己的环境变量,将索引发布到容器
还有kubernetes/enhancements
PR2630,其中Pods主机名设置为$(job-name)-$(index)
。
这还没有集成到Kubernetes中,但可能意味着您可以从作业名称和索引中获得pod主机名,从而获得其IP。这意味着Pod可以通过DNS查找彼此的地址,并直接使用Pod ip进行通信。
考虑k8s部署如下:
NAME READY STATUS RESTARTS AGE
nginx-deployment-5b567ff889-qgw2t 1/1 Running 0 92s
nginx-deployment-5b567ff889-r2rxc 1/1 Running 0 91s
最后的唯一标识符(qgw2t
和r2rxc
)是pod标识符,类似于Nomad中的作业组。任务指的是组中的容器(或Pod中的容器)。大多数pod是单个容器,就像大多数Nomad作业组只包含一个任务一样。NOMAD_ALLOC_INDEX
是任务的标识符,这意味着这里的k8s等同物是容器的唯一标识符。在这种情况下,您可以找到(对于上面的示例):
kubectl get pods nginx-deployment-5b567ff889-qgw2t -o json | jq -r '.status.containerStatuses[].containerID'
输出如下:
containerd://79092fc5a78852c73bffc7b4a3582f92cd4b5d6b5c1da8c334fbe2507345b6bf
如果你愿意,你可以把它管道到一些东西,将删除containerd://
块。
希望有帮助!
编辑:我误读了文档,它是任务组的索引(不只是任务)。所以我猜你在这里寻找的标识符是pod标识符(在我上面的例子中,它是qgw2t和r2rxc)。但它仍然不会给你你想要的,因为没有连续的计数器荚。
但是,当您更新Nomad作业时,它能够维护相同的索引,因为它会在启动新作业之前停止旧的索引,而对于k8s,它会启动一个新作业并确保它在终止旧作业之前是健康的。