Kubernetes(k8s)标签详解

Kubernetes(k8s)标签详解

作者:Gauss松鼠会 2022-09-05 08:26:29

云计算

云原生 所谓标签就是指一个键值数据,在 k8s 上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签。

成都创新互联长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为三山企业提供专业的做网站、网站设计三山网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

我们知道使用 pod 控制器创建的 pod,在 pod 故障以后重建后的 pod ip 地址和名称是变化的,为了解决 pod 访问问题,我们特此创建了 service,我们访问 service 的 ip 地址就可以正常访问到 pod;那么问题来了,service 是怎样去关联 pod 的呢?在 k8s 上如果使用 pod 控制创建的 pod,在 pod 发生故障以后,对应 pod 会被对应的控制器重启或重建,一个 pod 重建以后,对应的 ip 地址和名称都是会发生变化的,所以靠 ip 地址和名称关联 pod 是不行的;那靠什么关联 pod 呢?在 k8s 上是使用的标签和标签选择器的机制实现资源和资源间相互关联的。

什么是标签?它的作用是干嘛用的?

所谓标签就是指一个键值数据,在 k8s 上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签;有了标签以后,我们后续就可以根据标签来管理对应的资源;一个资源可以拥有多个标签,同时一个标签也可以附加给多个资源;我们可以理解为标签就是用来逻辑的对资源进行分组,拥有相同标签的资源为一组;标签的作用是方便用户管理资源;比如在 k8s 上运行了几百个 pod,我们想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一个标签,然后要管理这些 pod 的时,直接指定拥有指定标签的 pod 即可。

一、什么是 Kubernetes 标签

要学习 k8s 标签,需要从以下几个方面来学习。 首先,我们需要知道什么是 k8s 标签。

在 k8s 中,标签(Labels)是附加到 k8s 对象(比如 Pods)上的键值对。

标签的一个示例如下所示:

“metadata”:{

“labels”:{

“key1” : ”value1”
“key2” : ”value2”
}
}

标签的作用主要有两点:

  • 一是标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。
  • 二是标签可以用于组织和选择对象的子集。

标签的特点主要有如下三点:

  • 每个对象都可以定义一组键值标签。
  • 每个键对于给定对象必须是唯一的。
  • 标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。

二、设计标签的目的

设计标签的主要目的是使用户能够以松耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。

有如下几个示例标签,例如:

在区分发行版本的时候,可以指定:

  • “release” : “canary”
  • “release” : “dev”
  • “release” : “beta”
  • “release” : “stable”
  • ……

在定义运行环境时,可以指定:

  • “environment”: “dev”
  • “environment”: “qa”
  • “environment”: “production”
  • ……

三、标签的语法

接着,我们来学习下标签的语法。

1. 前缀:

  • 前缀是可选的;
  • 如果指定,前缀必须是 DNS 子域:由点 “.” 分割的一系列 DNS 标签,总共不超过 253 个字符,后跟斜杠 “/”;
  • 如果省略前缀,则假定标签键对用户是私有的。向最终用户对象添加标签的自动系统组件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl 或其他第三方自动化工具)必须指定前缀

2. 名称:

  • 名称段是必需的
  • 必须小于等于 63 个字符,以字母数字字符 “[a-z0-9A-Z]” 开头和结尾,带有破折号 “—”,下划线 “_”,点 “.” 和之前的字母数字

3. 小结:有效的标签值

  • 必须为 63 个字符或更少(可以为空);
  • 除非标签值为空,必须以字母数字字符 “[a-z0-9A-Z]” 开头和结尾;
  • 包含破折号 “—”,下划线 “_”,点 “.” 和之前的字母数字

示例:是一个有 environment 为 qa,同时 app 为 nginx 标签的 pod 配置文件。

apiVersion:v1
kind:Pod
metadata:
name:label-demo
labels:
environment:production
app:nginx
spec:
containers:
-name:nginx
Image:nginx:1.14.2
Ports:
-containerPort:80

四、标签选择运算符

然后,我们来学习下标签选择运算符。 标签选择运算符分为两种:

  • 一种是基于等值的需求:基于等值或基于不等值的需求允许按标签键和值进行过滤。 可接受的运算符有 “=”、“==”、“!=”。
  • 一种是基于集合的需求:基于集合的标签需求允许你通过一组值来过滤键。 持有三种操作符:“in”、“notin”、“exists”。

最后,我们来学习下如何使用 API 来使用标签。 前面提到的两种标签选择算符都可以通过 REST 客户端用于 list 或者 watch 资源。

基于等值的需求可以使用如下命令来获取 pods。

Kubectl get pods –l environment-production,tier=frontend

基于集合的需求可以使用如下命令来获取 pods。

Kubectl get pods –l ‘environment in (production),tier in (frontend)’

五、标签的使用

K8S 中资源标签 label

1. 说明

标签 label:

  • 资源标志
  • 格式 key=value
  • 可添加删除多个标签

标签选择器 label selector:

  • 用于选择资源
name=name1
name!=name1
name in (name1,name2)
name not in (name1,name2)

2. 指令

(1) 帮助:

kubectl label --help

(2) 打标签:

pod:kubectl label pods busybox app=busybox
node:kubectl label node k8s-node01 k8s-node02 env=test

(3) 查看:

  • 查看 pods 为 busybox 的标签:
kubectl get pods busybox --show-labels
  • 查看默认名称空间下所有 pod 资源的标签:
kubectl get pods --show-labels
  • 查看指定名称空间:
kubectl get pods -n kube-system --show-labels

(4) 更新:

加上–overwrite 参数修改标签:

kubectl get pods -n kube-system --show-labels

(5) 通过标签筛选:

  • 列出默认名称空间下标签 key 是 app 的 pod,不显示标签:
kubectl get pods -l app
  • 列出默认名称空间下标签 key 是 app、值是 busybox 的 pod,不显示标签:
kubectl get pods -l app=busybox
  • 多个筛选条件:
kubectl get po -l version!=v1,app=nginx

(6) 删除:

pod:kubectl label po busybox app- -n kube-public
node:kubectl label node k8s-node02 env-

3. 配置

(1) 创建 label-nginx.yaml

apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "1.0.0"
env: "test"
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP

(2) 创建

kubectl create -f label-nginx.yaml

(3) 删除

kubectl delete -f label-nginx.yaml

以上就是 K8s 标签的介绍。

文章名称:Kubernetes(k8s)标签详解
转载注明:http://www.36103.cn/qtweb/news12/16362.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联