【云原生 】Kubernetes(k8s)标签详解

IT技术圈 2023-05-03 11:01:36

文章目录

    • 前言
    • 一、什么是 Kubernetes 标签
    • 二、设计标签的目的
    • 三、标签的语法
    • 四、标签选择运算符
    • 五、标签的使用

 

前言

我们知道使用 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”
}
}

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

标签的特点主要有如下三点:
1、每个对象都可以定义一组键值标签。
2、每个键对于给定对象必须是唯一的。
3、标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。

二、设计标签的目的

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

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

1、在区分发行版本的时候,可以指定:
“release” : “canary”
“release” : “dev”
“release” : “beta”
“release” : “stable”
……

2、在定义运行环境时,可以指定:
“environment”: “dev”
“environment”: “qa”
“environment”: “production”
……

三、标签的语法

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

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

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

3、小结:有效的标签值
1) 必须为 63 个字符或更少(可以为空);
2) 除非标签值为空,必须以字母数字字符 “[a-z0-9A-Z]” 开头和结尾;
3) 包含破折号 “—”,下划线 “_”,点 “.” 和之前的字母数字
示例:是一个有 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 label po busybox app=busybox2 -n kube-public --overwrite

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 标签的介绍。


小知识分享:每一个HTML 文档中,都有一个不可或缺的标签:<head>,在几乎所有的HTML文档里, 我们都可以看到类似下面这段代码:

<head><meta charset=utf-8><meta http-equiv=content-type content=text/html; charset=utf-8><meta name=renderer content=webkit/><meta name=force-rendering content=webkit/><meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1/><meta http-equiv=Content-Type content=www.sxhxtt.cn ;charset=gb2312><meta name=viewport content=width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no></head>

head标签作为一个容器,主要包含了用于描述 HTML 文档自身信息(元数据)的标签,这些标签一般不会在页面中被显示出来,主要告知搜索引擎本页面的关键字以及对应网址,在SEO中传递相关权重起到非常重要的作用。

...全文
269 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
重磅,史上最全的阿里云分享的云原生技术学习资料合集,共120份。 一、阿里云开源书合集 2020微服务领域开源数字化报告 阿里巴巴云原生技术与实践13讲 阿里巴巴云原生实践15讲 不一样的双11技术:阿里巴巴经济体云原生实践 深入浅出Kubernetes 云原生架构白皮书 Knative云原生应用开发指南 二、思维图合集 分布式系统大图 分布式系统知识体系大图 架构图思考路径 Go指南大图 三、大咖演讲 阿里巴巴 DevOps 的三架马车:基础设施、运维编排、监控 阿里巴巴 K8s 超大规模实践经验 阿里巴巴 Kubernetes 应用管理实践中的经验与教训 阿里巴巴超大规模神龙裸金属 Kubernetes 集群运维实践 阿里巴巴核心应用落地 Service Mesh 的挑战与机遇 阿里巴巴云原生开源探索与实践司徒放(姬风) 阿里云文件存储:K8s 云原生场景下的共享高性能存储 安全容器的发展与思考 拐点已至, 云原生引领数字化转型升级 拐点已至,云原生引领数字化转型升级易立 函数计算在 双11 小程序场景中的应用 基于 K8s 扩展机制实现 PaaS 平台云原生演进 金融级云原生 PaaS 探索与实践 客如云容器化改造经验 蚂蚁金服双十一 Service Mesh 超大规模落地揭秘 全民双十一:基于容器服务的大促备战 容器混合云趋势与展望 容器上云的攻与守 三维家的 Paas 平台建设与微服务架构 深入 Kubernetes 的“无人区”-蚂蚁金服双十一的调度系统 使用 Kubernetes 运行 MXNet 和 AutoTVM 谐云科技阿里云联合新品解读 云原生应用分发协同实践 Distributed Database on Cloud Edge Kubernetes - 构建边缘云计算基础设施 Improving Resource Efficiency in Kubernetes Clusters Kata Containers 云原生服务的一块坚定基石 OpenKruise — 助力阿里巴巴集团落地 Kubernetes的核心开源技术 OpenKruise — 自动化部署 Kubernetes 应用的新方法 Serverless 弹性容器实例:设计、实现和性能优化 Serverless autoscaling in kubernetes Serverless Deep Learning Inference Service Mesh 在『路口』的产品思考与实践 TiDB Operator 实现原理解析 四、架构师成长系列直播 10分钟高质量完成应用容器化迁移 从 2019 到 2020,Apache Dubbo 年度总结与展望 从代码到部署,云原生应用 DevSecOps 实践 攻克痛点:如何保证复杂微服务架构下的数据一致性 构建安全可靠的微服务 Nacos 在颜铺 SaaS 平台的应用实践 函数计算最佳实践:搭建基于 Serverless 的在线转换工具 函数计算最佳实践:基于函数计算实现 Serverless 自动化运维 函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务 函数计算最佳实践:如何轻松构建弹性高可用的音视频处理系统? 基于 DLedger 构建高可用的 Apache RocketMQ 集群 基于 RocketMQ + Knative 驱动云原生 Serverless 应用 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 快速交付云原生应用的 3 种发布策略详解 流量太大容易挂?接入 Sentinel 让 N 个 9 成为可能! 容器化应用痛点剖析:问题诊断、监控及运维 如何借助 Serverless 技术降低闲置计算资源成本 十分钟上线-使用函数计算构建支付宝小程序服务 为什么 RocketMQ 是业务消息的首选 消息队列 Kafka 版差异化特性 云原生时代的在线教育 DevOps 之道 中小企业如何实现在家研发软件 Apache RocketMQ 未来展望 Arthas 在线应用诊断实践 Dubbo 2.7.6 新特性 GitOps之应用安全发布模型实践 Nacos 全新权限控制系统介绍 OAM:云原生时代的应用模型与下一代 DevOps 技术 RocketMQ 新特性揭秘-Request-Reply 模式 RocketMQ Connect 平台的搭建与实践 RocketMQ Go 客户端实践 RocketMQ Operator-K8s 平台自动化部署工具 Serverless 工作流适用场景及最佳实践 Serverless 开发实战--十分钟上线一个 Web 应用 Service Mesh 实践及落地风险控制

8

社区成员

发帖
与我相关
我的任务
社区描述
Web3之旅,期待你的加入~
区块链智能合约去中心化 个人社区
社区管理员
  • QC班长
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧