Label含义
Label其实就一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够标示对象的特殊特点,Labels的值对系统本身并没有什么含义,只是对用户才有意义。同一个资源对象的labels属性的key必须唯一,label可以附加到各种资源对象上,如Node,Pod,Service,RC等。
一个资源拥有多个标签,可以实现不同维度的管理。标签(Label)的组成: key=value。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。
Label命名规范
label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
使用Label原因
当相同类型的资源越来越多,对资源划分管理是很有必要,此时就可以使用Label为资源对象 命名,以便于配置,部署等管理工作,提升资源的管理效率。label 作用类似Java包能对不同文件分开管理,让整体更加有条理,有利于维护。
label 的基本使用
创建 label
apiVersion: v1 # 遵循v1版本的Kubernetes API
kind: Pod # 这个yaml描述的是一个Pod
metadata:
name: kubia-manual-v2 # Pod的名称
labels:
creation_method: manual
env: prod
spec:
containers:
- image: docker.io/hengyoush/kubia # 创建容器使用的镜像
name: kubia #容器的名称
ports:
- containerPort: 8080 # 应用监听的端口, 指定端口是展示性的
protocol: TCP
查看标签
#查看pod服务标签
kubectl get po --show-labels|grep roxe-send
#查看集群中所有节点的标签
kubectl get nodes --show-labels
#查看匹配标签条件的node
kubectl get nodes -l 标签key=标签values
kubectl get nodes -l app=tomcat
#查看匹配 标签key的pod
kubectl get po -L app
添加标签
#手动给pod服务添加标签
$ kubectl label pod roxe-send-84b7449ddb-5v8wp logging=true
pod/roxe-send-84b7449ddb-5v8wp labeled
#覆盖标签
#把pod roxe-send-84b7449ddb-5v8wp 的标签label修改为logging=true 且覆盖现有的值
kubectl label --overwrite pods roxe-send-84b7449ddb-5v8wp logging=true
#把 namespace 中的所有 pod 添加 label
kubectl label pods --all test=test
删除标签
#删除名为“app”的label 。(使用“ - ”减号相连)
$ kubectl label pods roxe-send-84b7449ddb-5v8wp app-
pod/roxe-send-84b7449ddb-5v8wp labeled