如果我 ssh 到 Kubernetes 节点,如何找出该节点的 UUID,以便可以查询主 API 以获取特定于该节点的信息?
到目前为止尝试过这个
root 13020 2.5 1.0 410112 41660 ? Ssl Jan25 26:04 /usr/bin/kubelet --logtostderr=true --v=0 --api_servers=http://10.32.140.181:8080 --address=0.0.0.0 --port=10250 --allow_privileged=false --maximum-dead-containers=1 --max-pods=14
[achang@p3dlwsbkn50d51 ~]$ curl -Gs http://localhost:10255/pods/
404 page not found
Run Code Online (Sandbox Code Playgroud)
tak*_*omi 14
我发现当前的 kubernetes 节点(我检查 minikube、gke 节点池)有 file /etc/machine-id,该文件cat /etc/machine-id对于每个 kubernetes 节点都是唯一的,并且与对应的kubectl get nodes -o json | jq -r .items[].status.nodeInfo.machineID.
因为不需要API调用,所以我认为这种方式更容易与shell或者容器结合。
您可以通过向 kubectl 添加宽输出选项来获取节点名称:
// List all pods in plain-text output format and includes additional information (such as node name).
$ kubectl get pods -o wide
更多选项: https: //kubernetes.io/docs/user-guide/kubectl-overview/
有许多不同的 ID 和名称与 kubernetes 节点相关,这取决于您要查找的内容。如果您想向 API 服务器查询节点信息,您很可能会查找节点名称。节点名称通常与主机名相同,但如果不是最简单的找到它的方法是查询 kubelet 中正在运行的 pod,并查看它们正在哪个节点上运行:
$ curl -Gs http://localhost:10255/pods/ | grep -o '"nodeName":"[^"]*"' | head -n 1
"nodeName":"e2e-test-stclair-minion-8o3b"
Run Code Online (Sandbox Code Playgroud)
其他ID可以通过查询节点spec找到:
$ curl -Gs http://localhost:10255/spec/ | grep -oE '(machine_|system_uu|boot_)id":.*'
machine_id": "",
system_uuid": "CB7FAAA0-3A53-5FE4-4285-D33D03FEBA6C",
boot_id": "8b89b8f5-5fbb-4cc0-82e4-7c57ec11f656",
Run Code Online (Sandbox Code Playgroud)
最后,externalID可以providerID从API服务器上查询:
$ kubectl get nodes e2e-test-stclair-minion-8o3b -o=jsonpath="externalID:{.spec.externalID}; providerID:{.spec.providerID}"
Run Code Online (Sandbox Code Playgroud)
编辑:
如果上述操作失败并且您可以访问 api 服务器,则只需查找与所需节点的主机名匹配的节点即可:
$ NODEHOST="your-host"
$ kubectl get nodes | grep "hostname=$NODEHOST"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23147 次 |
| 最近记录: |