Kubernetes Label 和 Selector新手入门学习
介绍
本实验主要探索 Kubernetes 中的 Label(标签)和 Selector(选择器)机制,这是 Kubernetes 中用于资源分类和组织的重要功能。通过本实验,我们能够:
-
理解 Label 和 Selector 的基本概念及其在 Kubernetes 集群管理中的作用
-
掌握节点标签的添加、查看、修改和删除操作
-
学习如何使用节点选择器(nodeSelector)将 Pod 调度到特定节点
-
熟悉标签选择器的各种匹配条件和查询方式
-
了解 Kubernetes 污点(Taint)机制及其与调度的关系
实验内容包括为节点添加自定义标签、使用选择器筛选节点、通过节点选择器控制 Pod 部署位置、修改和删除标签等操作,涵盖了 Label 和 Selector 的日常管理场景。
1.自定义Label
# 为某个节点添加标签 Label并查看
kubectl label nodes node1 subnet=ip7
kubectl get node -l subnet=ip7
在 deployment 或其他控制器中指定将 Pod 部署到该节点
vim nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:nodeSelector:subnet: ip7 # 选择带有 subnet=ip7 标签的节点containers:- name: nginximage: nginx:1.20.0ports:- containerPort: 80
kubectl create -f nginx-deploy.yaml# pod已添加到node01节点上
kubectl get po -o wide
2.污点信息
# 查看master的污点信息,该master为禁调度节点
kubectl describe nodes master | grep Taints# 可通过该命令去除master节点的禁调度污点,但正常情况下不允许这么做,因为master节点是管理node 节点的,不需要进行负载
kubectl taint node master node-role.kubernetes.io/control-plane-
3.为各节点设置Label
# 为master节点设置master角色标签
kubectl label node master role=master# 为node节点设置node角色标签
kubectl label nodes node1 node2 role=node
4.Selector
# 查看所有节点的标签
kubectl get nodes --show-labels# 匹配标签,匹配规则:role这个key的value在master和node之间
kubectl get nodes -l 'role in (master, node)'# 选择匹配role为master或node且不包括subnet=ip7的node
kubectl get nodes -l subnet!=ip7,'role in (master, node)'# 匹配标签的key为subnet的node
kubectl get nodes -l subnet
5.修改标签
# 覆盖现有标签
kubectl label nodes node1 subnet=ip10 --overwrite# 验证修改结果
kubectl describe node node1 | grep Labels -A5
6.删除标签
# 删除单个标签并查看
kubectl label nodes node1 subnet-
kubectl get nodes node1 --show-labels# 批量删除标签# 先为多个节点设定标签
kubectl label nodes master node1 node2 type=haha
# 通过选择器删除所有节点的 type 标签
kubectl label nodes -l type type-
# 循环删除特定节点标签(适用于规律命名的节点)
for i in 1 2;do kubectl label nodes node$i type-;done
实验结论
-
标签管理有效性验证:实验成功验证了 Kubernetes 标签管理的基本操作流程,包括标签的添加、修改、查询和删除。标签系统为 Kubernetes 资源提供了灵活的分类和组织方式。
-
节点选择器功能验证:通过 nodeSelector 成功将 Nginx Pod 定向调度到具有特定标签(subnet=ip7)的节点上,证明了节点选择器在 Pod 调度控制中的有效性。
-
标签选择器灵活性:实验展示了标签选择器的强大匹配能力,包括精确匹配(=)、排除匹配(!=)、集合匹配(in)等多种查询方式,能够满足不同场景下的资源筛选需求。
-
批量操作可行性:通过命令行循环和选择器批量操作,验证了 Kubernetes 标签管理的可扩展性,能够高效处理大规模集群中的标签管理需求。
-
污点机制理解:通过查看和修改 master 节点的污点设置,加深了对 Kubernetes 调度保护机制的理解,认识到生产环境中 master 节点通常应保持不可调度状态的重要性。
-
标签命名规范性:实验中发现合理的标签命名规范(如 role=master/node)对于集群管理至关重要,能够提高资源管理的清晰度和效率。
本实验为 Kubernetes 集群的资源组织和调度控制提供了实践基础,这些技能在实际运维工作中对于实现精细化调度、多环境隔离等场景具有重要意义。