Label是kubenetes系统中的一个重要概念。其作用就是在资源上添加一个标识,用来对它们进行分区和选择。
Label的特点:
- 一个Label会以Key/value的形式附加到各种对象上,如Node,Pod,Service等
- 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去
- Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
可以通过Label实现资源的多维度分组,以便灵活,方便的进行资源分配、调度、配置、部署等管理工作
一些常用的Label示例如下: 版本标签: "version":"release","version":"stable".... 环境标签: "environment":"dev","environment":"test","environment":"pro" 架构标签: "tier":"frontend","tier":"backend"
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector, 即:
Label用于给某个资源对象定义标识
Label Seletor用于查询和筛选拥有某些标签的资源对象
当前有两种Label Seletor:
-
基于等式的Label Seletor
name = slave: 选择所有包含Label中Key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production的对象
-
基于集合的Label Selector
name in (master,slave):选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend):选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Seletor进行组合,使用逗号","进行分隔即可。例如;
name=slave,env!=prodution name not in(frontend),envv!=prodution
命令方式创建
#为pod资源打上标签 kubectl label pod nginx-pod version=1.0 -n dev #为pod资源更新标签 kubectl label pod nginx-pod version=2.0 -n dev --overwrite #查看标签 kubectl get pod nginx-pod -n dev --show-labels #筛选标签 kubectl get pod -l version=2.0 -n dev --show-labels kubectl get pod -l version!=2.0 -n dev --show-labels #删除标签 kubectl label pod nginx -n dev version-
配置方式创建
apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev labels: version: "1.0" env: pro spec: containers: - image: nginx:1.17.1 name: pod ports: - name: nginx-prot containerPort: 80 protocol: TCP kubectl apply -f nginx-label.yml