如何在Kubernetes Pod中获取节点底层信息(核心数、核心ID等)?
在Pod中获取节点底层信息的几种方法
一、挂载节点系统文件目录
节点的核心硬件信息(比如CPU详情)存在/proc目录下,Kubelet的日志、配置文件通常在/var/log/kubelet.log、/var/lib/kubelet/这类路径。你可以通过Volume把这些节点上的目录挂载到Pod里直接读取:
- 编写Pod配置文件:
apiVersion: v1 kind: Pod metadata: name: node-info-pod spec: containers: - name: node-info-container image: busybox command: ["sleep", "3600"] volumeMounts: - name: proc mountPath: /host/proc - name: kubelet-log mountPath: /host/var/log/kubelet.log - name: kubelet-config mountPath: /host/var/lib/kubelet volumes: - name: proc hostPath: path: /proc type: Directory - name: kubelet-log hostPath: path: /var/log/kubelet.log type: File - name: kubelet-config hostPath: path: /var/lib/kubelet type: Directory
- 进入Pod后执行命令获取信息:
- 查看核心总数量:
cat /host/proc/cpuinfo | grep "processor" | wc -l - 查看每个核心的ID:
cat /host/proc/cpuinfo | grep "processor" - 查看Kubelet运行日志:
cat /host/var/log/kubelet.log - 查看Kubelet配置文件:
cat /host/var/lib/kubelet/config.yaml(如果节点上存在这个文件)
二、用Kubernetes Downward API注入信息
Downward API能直接把节点的标准化属性注入到Pod的环境变量或文件里,不用手动挂载目录:
- 编写Pod配置,通过环境变量注入节点相关信息:
apiVersion: v1 kind: Pod metadata: name: downward-api-pod spec: containers: - name: downward-container image: busybox command: ["sleep", "3600"] env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: POD_CPU_REQUEST valueFrom: resourceFieldRef: containerName: downward-container resource: requests.cpu - name: POD_CPU_LIMIT valueFrom: resourceFieldRef: containerName: downward-container resource: limits.cpu
- 进入Pod后查看环境变量:
printenv | grep -E "NODE_|POD_",能拿到节点名称、Pod的CPU资源申请/限制值等信息。
三、调用Kubernetes API获取节点完整信息
如果需要更全面的节点元数据和状态,可以在Pod里通过ServiceAccount访问K8s API:
- 先创建具有节点读取权限的权限组件:
apiVersion: v1 kind: ServiceAccount metadata: name: node-reader-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-reader-role rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: node-reader-binding subjects: - kind: ServiceAccount name: node-reader-sa namespace: default roleRef: kind: ClusterRole name: node-reader-role apiGroup: rbac.authorization.k8s.io
- 编写Pod配置使用这个ServiceAccount:
apiVersion: v1 kind: Pod metadata: name: k8s-api-pod spec: serviceAccountName: node-reader-sa containers: - name: api-container image: curlimages/curl command: ["sleep", "3600"]
- 进入Pod后执行命令获取当前节点的详细信息:
# 先获取Pod所在的节点名称 NODE_NAME=$(curl -s http://127.0.0.1:9090/api/v1/namespaces/default/pods/$HOSTNAME | jq -r '.spec.nodeName') # 查询该节点的完整状态信息 curl -s http://127.0.0.1:9090/api/v1/nodes/$NODE_NAME | jq '.status'
如果用的是busybox镜像,需要先安装jq工具:apk add jq。
内容的提问来源于stack exchange,提问作者imawful
相关产品推荐
相关产品推荐

