在EKS中获取节点和所属节点组的方法
为了后续的参考,请记下来。使用 EKS (由 Managed Nodegroup 创建的) 节点会自动附带一个名为 nodegroup-name 的标签。
$ kubectl describe nodes/ip-10-173-30-116.ap-northeast-1.compute.internal
Name: ip-10-173-30-116.ap-northeast-1.compute.internal
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=m5.large
beta.kubernetes.io/os=linux
cluster-name=my-cluster
eks.amazonaws.com/nodegroup=my-nodegroup
eks.amazonaws.com/nodegroup-image=ami-04574e0c4fb2f03fc
failure-domain.beta.kubernetes.io/region=ap-northeast-1
failure-domain.beta.kubernetes.io/zone=ap-northeast-1a
kubernetes.io/arch=amd64
kubernetes.io/hostname=ip-10-173-30-116.ap-northeast-1.compute.internal
kubernetes.io/os=linux
nodegroup-name=my-nodegroup
所以,如果在 “kubectl get nodes” 命令后加上 “-L nodegroup-name” 选项并且输出这个标签,就可以获取节点的列表。
$ kubectl get nodes -L nodegroup-name
NAME STATUS ROLES AGE VERSION NODEGROUP-NAME
ip-10-173-30-116.ap-northeast-1.compute.internal Ready <none> 61d v1.16.12-eks-904af05 my-nodegroup
ip-10-173-35-117.ap-northeast-1.compute.internal Ready <none> 15h v1.16.12-eks-904af05 my-nodegroup
ip-10-173-57-100.ap-northeast-1.compute.internal Ready <none> 11h v1.16.12-eks-904af05 another-nodegroup
此外,GKE的情况下,节点名称是根据节点池名称自动生成的,所以仅通过节点名称就可以大致了解。我本身并没有对这种功能有所需求之前的思考。