是否在Kubernetes中替换NOMAD_ALLOC_INDEX (Hashi) env变量? &g



在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/enhancementsPR2630,其中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

最后的唯一标识符(qgw2tr2rxc)是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,它会启动一个新作业并确保它在终止旧作业之前是健康的。

相关内容

  • 没有找到相关文章

最新更新