节点(AWS EC2实例)如何读取其Kubernetes标签?

时间:2019-03-15 04:54:10

标签: amazon-ec2 kubernetes kops

我们正在使用kops在AWS EC2中创建自己的kubernetes集群。我们在EC2实例上运行一些特殊进程,希望它们可以访问kubernetes节点标签,但是我找不到从实例访问它们的方法。

如何使用bashcurlsed之类的标准Unix工具,从任何容器之外的实例层访问实例层托管的节点的Kubernetes标签?

1 个答案:

答案 0 :(得分:0)

假设您正在Kubernetes外部并直接在主机上运行该进程,第一步将是将正确的节点名(与主机名相同,但要确定)作为described in this answer

$ curl -Gs http://localhost:10255/pods/ | grep -o '"nodeName":"[^"]*"' | head -n 1
"nodeName":"e2e-test-stclair-minion-8o3b"

然后使用Kubectl或Kubernetes API-以可行的方式获取该节点的标签。我假设您有权访问Kubeconfig并正在使用Kubectl:

kubectl get nodes gke-nodename-pool-87c8b616-549c -ojsonpath='{.metadata.labels}'

如果您运行的是Daemonset,则可以使用向下的API获取节点名,然后查询API以获取该域的标签。要在pod内将节点名作为env变量获取:

env:
    - name: MY_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name

如果节点上没有Kubectl,并且您不想以daemonset的形式运行进程,则运行一个小的Go lang容器作为daemonset,这会从ENV获取节点名,然后从Kubernetes服务器查询标签并公开在主机进程可以访问的节点端口上,您似乎可以进入壁橱!