我有一个使用弹性搜索实现机架感知的用例,这需要我识别pod所在的区域。
我在SO之外看到了很多这样的请求,比如:
https://github.com/kubernetes/kubernetes/issues/40610
区域不会在向下API中显示,因为它是节点标签,而不是pod标签。
我提出的两个“答案”是:
a)对google metadata端点的Curl请求,以从计算引擎元数据中检索节点
b)通过向下接口识别节点名称,使用节点名称调用Kube接口获取节点对象,使用JQ等工具过滤JSON响应获取zone。
我不喜欢选项B,因为它或多或少针对API调用进行了硬编码,并且我需要提供一个包含JQ和curl的自定义docker镜像。选项A感觉有点“老生常谈”,因为它不是Kube原生的。
有没有我错过的更好的解决方案?
提前谢谢你,
发布于 2018-09-20 23:42:48
我不是特别喜欢这样做,但我还没有找到更好的答案,而且github上的功能请求或错误报告似乎都不会有结果。
我选择使用配置映射和bash脚本,该脚本将执行curl请求和一些字符串操作,然后使用卷/卷装载将其挂载到容器中,并设置一个自定义入口点来执行脚本;将值注入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会暴露区域/区域标签,要么我可能遗漏了什么,毕竟有比这更好的方法。
如果没有其他事情,也许这会帮助其他人,让他们不再浪费时间在谷歌上寻找似乎并不存在的答案!
发布于 2019-06-11 23:44:24
我的案例是Google Kubernetes引擎,我需要在pod上有zone/region标签。
我所做的是在https://stackoverflow.com/a/52428782/8547463中结合@ did ams782的方法,通过
curl -sS http://metadata.google.internal/computeMetadata/v1/instance/zone -H 'Metadata-Flavor: Google'`并通过https://github.com/devth/k8s-labeler中的方法将其设置为pods的标签。基本上,我是从pod的initContainer调用区域检测API的。
发布于 2021-02-26 07:38:52
我相当深入地研究了init容器之类的常见问题,但后来意识到我是在云环境中工作,而zone可以通过内置端点使用。因此,只需使用云提供商的端点即可
export RACK=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`亚马逊网络服务:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
https://stackoverflow.com/questions/52420289
复制相似问题