k8s--label

简介: k8s--label

label 介绍


Label 是kubernetes 系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。

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 Selector 用于查询和筛选拥有某些标签的资源对象

当前有两种 Label Selector:

  • 基于等式的 Label Selector
    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" 的对象


创建 pod


创建一个 pod-nginx.yaml 文件,内容如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建 pod

kubectl apply -f pod-nginx.yaml -n zouzou

这样我们的 pod 就创建好了


查看标签


我们使用 kubectl get pod 的时候是没有显示标签的

[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0

如果要显示标签加上 --show-labels

# 加上 --show-labels 就可以查看标签了
kubectl get pod -n zouzou --show-labels


给 pod 打标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称
# 例子,给 nginx 的 pod 打了个标签 version=1.0,在命名空间 zouzou 下
kubectl label pod nginx version=1.0 -n zouzou


更新标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称 --overwrite
# 例子,给 nginx 的 pod 更新标签,更新为 version=2.0,在命名空间 zouzou 下,更新的话必须加 --overwrite
kubectl label pod nginx version=2.0 -n zouzou --overwrite

那如果更新的时候标签不存在怎么处理呢?答案是会创建一个标签


删除标签


上面我们更新标签的时候,写错了,多创建了一个 ve=2.0 的标签,我们就要删掉

# 格式如下,注意,标签名后面加个 - 就代表要删除该标签
kubectl label pod pod名称 标签名- -n 命名空间名称
# 例子,删除命名空间 zouzou 下 的 nginx pod 的 ve 标签
kubectl label pod nginx ve- -n zouzou


筛选标签


当我们有很多个 pod 的时候,每个 pod 又都有很多的标签,这时候我们想通过标签来进行筛选,更改 pod-nginx.yaml 文件,将 name 改为 nginx1

apiVersion: v1
kind: Pod
metadata:
  name: nginx1 # 更改这里,name 不能重复
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

在创建 pod

给 nginx1 打上三个标签

# 先查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE    LABELS
nginx    1/1     Running   0          22m    version=2.0
nginx1   1/1     Running   0          2m5s   <none>
# 给 nginx1 打上 version=1.0 的标签
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 version=1.0 -n zouzou
pod/nginx1 labeled
# 可以一次打多个标签,中间通过空格隔开
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 app=v1 name=ng -n zouzou
pod/nginx1 labeled
# 查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          24m     version=2.0
nginx1   1/1     Running   0          3m59s   app=v1,name=ng,version=1.0

准备工作做好之后,我们就可以筛选了

# 格式如下,注意,-l 后面加筛选条件
kubectl get pod --show-labels -l 标签名=值 -n 命名空间名称
# 例子,筛选命名空间 zouzou 下 的 version=2.0 的标签
kubectl get pod --show-labels -l version=2.0 -n zouzou


通过配置的方式创建标签


上面我们通过 yaml 文件的方式创建的 pod,但没有在 yaml 里面写上标签,只是使用命令创建标签,我们可以在 yaml 里直接写上标签,pod-nginx.yaml 如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx2 # name 不能重复
  namespace: zouzou  # namespace 要存在
  labels:  # 下面有两个标签
    version: "3.0"
    env: "test"
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建

kubectl apply -f pod-nginx.yaml

这样我们就可以在创建 yaml 文件的时候配置好标签


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
前端开发
解决el-descriptions的label-class-name不生效问题
解决el-descriptions的label-class-name不生效问题
948 0
|
4月前
|
前端开发
el-form-item label中的字体样式设置格式
这篇文章介绍了如何在Element UI的`el-form-item`组件中自定义`label`标签的样式,通过使用`slot`属性和内联CSS来改变字体颜色和加粗显示。
el-form-item label中的字体样式设置格式
|
7月前
使用Form报错提示If ngModel is used within a form tag, either the name attribute must be set or the form
使用Form报错提示If ngModel is used within a form tag, either the name attribute must be set or the form
|
Kubernetes 调度 异构计算
k8s Label 2
k8s Label 2
|
Kubernetes 应用服务中间件 nginx
Label,RC,HPA
Label,RC,HPA
|
Kubernetes 应用服务中间件 nginx
简单的Label居然有这么大的作用
简单的Label居然有这么大的作用
112 0
html+css实战40-label标签
html+css实战40-label标签
109 0
html+css实战40-label标签
|
前端开发
使input type=“text“不可编辑
使input type=“text“不可编辑
345 0
使input type=“text“不可编辑
Element UI - el-select 同时获取 value 和 label 的值
Element UI - el-select 同时获取 value 和 label 的值
607 0
|
Web App开发 JavaScript 数据安全/隐私保护
ie8下修改input的type属性报错
ie8下修改input的type属性报错