image.png

Label含义

Label其实就一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够标示对象的特殊特点,Labels的值对系统本身并没有什么含义,只是对用户才有意义。同一个资源对象的labels属性的key必须唯一,label可以附加到各种资源对象上,如Node,Pod,Service,RC等。

image.png
一个资源拥有多个标签,可以实现不同维度的管理。标签(Label)的组成: key=value。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。

Label命名规范

label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。

使用Label原因

当相同类型的资源越来越多,对资源划分管理是很有必要,此时就可以使用Label为资源对象 命名,以便于配置,部署等管理工作,提升资源的管理效率。label 作用类似Java包能对不同文件分开管理,让整体更加有条理,有利于维护。

label 的基本使用

创建 label

  1. apiVersion: v1 # 遵循v1版本的Kubernetes API
  2. kind: Pod # 这个yaml描述的是一个Pod
  3. metadata:
  4. name: kubia-manual-v2 # Pod的名称
  5. labels:
  6. creation_method: manual
  7. env: prod
  8. spec:
  9. containers:
  10. - image: docker.io/hengyoush/kubia # 创建容器使用的镜像
  11. name: kubia #容器的名称
  12. ports:
  13. - containerPort: 8080 # 应用监听的端口, 指定端口是展示性的
  14. 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