如何仅通过kubectl判断Kubernetes集群所属的主流超大规模云厂商(AWS、Azure、GKE)
如何仅通过kubectl判断Kubernetes集群所属的主流超大规模云厂商(AWS、Azure、GKE)
嘿,这个场景我太熟悉了!没有云厂商控制台权限的情况下,完全可以靠kubectl从集群本身挖信息来判断归属,下面几个方法亲测靠谱:
1. 查看节点的ProviderID(最直接)
每个云厂商的节点都会在spec.providerID里带上专属格式的标识,执行这条命令就能一目了然:
kubectl get nodes -o jsonpath='{.items[*].spec.providerID}'
- AWS EKS的格式:
aws:///<区域>/<EC2实例ID>,比如aws:///us-east-1/i-0abc123def456 - Azure AKS的格式:
azure:///subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.Compute/virtualMachines/<VM名称> - GKE的格式:
gce:///<GCP项目ID>/<区域>/<GCE实例ID>,比如gce://my-gcp-project/us-central1-a/gke-cluster-1-node-pool-1-abc123
2. 检查节点的标签/注解
各大云厂商都会给节点打上专属的标签和注解,快速扫一眼就能定位:
执行命令查看所有节点标签:
kubectl get nodes --show-labels
或者查看单个节点的详细注解:
kubectl describe node <节点名称>
- EKS节点会带有
eks.amazonaws.com/前缀的标签,比如eks.amazonaws.com/nodegroup=<节点组名称> - AKS节点会带有
kubernetes.azure.com/前缀的标签,比如kubernetes.azure.com/cluster=<集群名称> - GKE节点会带有
cloud.google.com/gke-nodepool=<节点池名称>或者google-cloud-node=true这类标签,注解里也会有container.googleapis.com/instance_id这类GCP专属字段
3. 查看kube-system命名空间的专属组件
每个云厂商的K8s集群都会在kube-system里部署自己的运维组件,执行命令看看有没有标志性Pod:
kubectl get pods -n kube-system
- EKS:会有
aws-nodeDaemonSet(负责VPC CNI网络)、corednsPod名称可能带eks前缀 - AKS:会有
azure-cni-networkmonitor、cloud-node-manager、aks-link这类专属Pod - GKE:会有
gke-metrics-agent、konnectivity-agent、gke-system-monitor这类GKE特有的Pod
4. 检查默认存储类(StorageClass)
云厂商默认创建的存储类会指向自家的存储服务,执行命令查看:
kubectl get storageclass
- EKS默认存储类的
PROVISIONER是kubernetes.io/aws-ebs,名称通常是gp2或gp3 - AKS默认存储类的
PROVISIONER是kubernetes.io/azure-disk或disk.csi.azure.com - GKE默认存储类的
PROVISIONER是kubernetes.io/gce-pd或pd.csi.storage.gke.io
一般来说,优先看ProviderID或者节点标签就能快速确定,其他方法可以作为辅助验证~
备注:内容来源于stack exchange,提问作者chris_f
相关产品推荐
相关产品推荐

