首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Kubernetes pod/容器内部识别节点的区域

从Kubernetes pod/容器内部识别节点的区域
EN

Stack Overflow用户
提问于 2018-09-20 15:58:21
回答 4查看 1.2K关注 0票数 2

我有一个使用弹性搜索实现机架感知的用例,这需要我识别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原生的。

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

提前谢谢你,

EN

回答 4

Stack Overflow用户

发布于 2018-09-20 23:42:48

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

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

代码语言:javascript
运行
复制
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会暴露区域/区域标签,要么我可能遗漏了什么,毕竟有比这更好的方法。

如果没有其他事情,也许这会帮助其他人,让他们不再浪费时间在谷歌上寻找似乎并不存在的答案!

票数 2
EN

Stack Overflow用户

发布于 2019-06-11 23:44:24

我的案例是Google Kubernetes引擎,我需要在pod上有zone/region标签。

我所做的是在https://stackoverflow.com/a/52428782/8547463中结合@ did ams782的方法,通过

代码语言:javascript
运行
复制
curl -sS http://metadata.google.internal/computeMetadata/v1/instance/zone -H 'Metadata-Flavor: Google'`

并通过https://github.com/devth/k8s-labeler中的方法将其设置为pods的标签。基本上,我是从pod的initContainer调用区域检测API的。

票数 1
EN

Stack Overflow用户

发布于 2021-02-26 07:38:52

我相当深入地研究了init容器之类的常见问题,但后来意识到我是在云环境中工作,而zone可以通过内置端点使用。因此,只需使用云提供商的端点即可

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52420289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档