如何通过脚本/命令获取GCP组织内所有项目的非GKE虚拟机列表
获取GCP组织内所有非GKE虚拟机列表
前提条件
- 已安装并初始化
gcloudCLI,且登录账号具备以下权限:- 组织级项目浏览权限(
roles/browser) - 各项目的Compute实例查看权限(
roles/compute.viewer)
- 组织级项目浏览权限(
脚本实现(Shell)
下面的脚本会遍历组织内所有项目,筛选出非GKE节点的虚拟机,输出格式为项目ID | 实例名称 | 区域 | 机器类型:
#!/bin/bash # 替换为你的组织ID(可通过gcloud organizations list获取) ORG_ID="your-organization-id" # 获取组织内所有项目ID PROJECTS=$(gcloud projects list --organization=$ORG_ID --format="value(projectId)") for PROJECT in $PROJECTS; do echo "正在扫描项目: $PROJECT" # 获取非GKE节点的虚拟机,GKE节点默认带有kubernetes.io/role=node标签 gcloud compute instances list \ --project=$PROJECT \ --filter="-labels.kubernetes.io/role=node" \ --format="value(name, zone.machineType.scope(), machineType.basename())" \ | awk -v proj="$PROJECT" '{print proj " | " $1 " | " $2 " | " $3}' done
使用说明
- 替换脚本中的
ORG_ID为你的实际组织ID(执行gcloud organizations list可查看) - 将脚本保存为
list-vms.sh,赋予执行权限:chmod +x list-vms.sh - 运行脚本:
./list-vms.sh
关键过滤逻辑说明
GKE管理的节点会自动添加kubernetes.io/role=node标签,通过--filter="-labels.kubernetes.io/role=node"可以精准排除这类实例,比通过名称过滤更可靠。
可选优化
- 如果需要将结果保存到文件,运行时追加输出:
./list-vms.sh > vm-list.txt - 若遇到权限不足的项目,脚本会输出错误信息,可添加
2>/dev/null屏蔽错误:gcloud compute instances list \ --project=$PROJECT \ --filter="-labels.kubernetes.io/role=node" \ --format="value(name, zone.machineType.scope(), machineType.basename())" \ 2>/dev/null \ | awk -v proj="$PROJECT" '{print proj " | " $1 " | " $2 " | " $3}'
内容的提问来源于stack exchange,提问作者siddharth panigrahi
相关产品推荐
相关产品推荐

