gpt4 book ai didi

kubernetes - 从 Kubernetes Pod/容器内部识别节点的区域

转载 作者:行者123 更新时间:2023-12-02 12:06:26 24 4
gpt4 key购买 nike

我有一个使用 Elasticsearch 进行机架感知的用例,这需要我识别 Pod 已安排在的区域。

我在 SO 之外看到了很多对此的请求,例如:

https://github.com/kubernetes/kubernetes/issues/40610

该区域不会在向下的 API 中公开,因为它是节点标签,而不是 Pod 标签。

我提出的两个“答案”是:

a) 向 google 元数据端点发出 Curl 请求,以从计算引擎元数据中检索节点

b) 通过向下的 API 识别节点名称,并使用节点名称调用 Kube API 检索节点对象,并使用 JQ 等工具过滤 JSON 响应以获取区域。

我不喜欢选项 B,因为它或多或少针对 API 调用进行了硬编码,并且我需要提供包含 JQ 和curl 的自定义 docker 镜像。选项 A 感觉有点“hacky”,因为它不是 Kube 原生的。

还有我错过的更好的解决方案吗?

提前致谢,

最佳答案

我不是特别喜欢这样做,但我还没有找到更好的答案,而且 github 上的功能请求或错误报告似乎都没有进展。

我选择使用带有bash脚本的配置映射,该脚本将执行curl请求和一些字符串操作,然后使用volumes/volumeMounts将其安装到容器中,并设置自定义入口点来执行脚本;将值注入(inject)到elasticsearch.yml中,然后执行ES本身:

apiVersion: v1
kind: ConfigMap
metadata:
name: elastic
data:
elastic.sh: |-
set -e
elasticConfig="/usr/share/elasticsearch/config/elasticsearch.yml"

#this gives the us the node zone in the format projects/{projectnumber}/zones/{zone}
zone=$(curl -sS http://metadata.google.internal/computeMetadata/v1/instance/zone -H 'Metadata-Flavor: Google')

#Split and retain the text after the last /
zone=${zone##*/}

#Append it to elasticsearch.yml

echo "\nnode.attr.zone: ${zone}" >> $elasticConfig
echo "\ncluster.routing.allocation.awareness.attributes: zone" >> $elasticConfig

echo "\ncluster.routing.allocation.awareness.force.zone.values: {{ .Values.elastic.shardAwareness.zones }}" >> $elasticConfig

我不太喜欢这个解决方案,因为它增加了不必要的开销,而且不是 kube 原生的。查询 kube API 是可能的,但有其自身的复杂性和技巧。我希望有一天,向下的 API 会公开区域/区域标签,或者也许我遗漏了一些东西,但毕竟有比这更好的方法。

如果不出意外,也许这会对其他人有所帮助,并阻止他们浪费时间在谷歌上搜索似乎不存在的答案!

关于kubernetes - 从 Kubernetes Pod/容器内部识别节点的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52420289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com