【kubernetes云原生】k8s标签选择器使用详解

目录

一、标签选择器来源

二、什么是标签选择器

2.1 标签选择器概述

2.2 标签选择器概述属性

三、标签使用场景

四、标签选择器特点

4.1 基本特点

4.2 核心标签选择器

4.3 补充说明

五、标签选择器常用操作命令

5.1 前置准备

5.2 常用操作命令

5.2.1 查看namespace下的标签

5.2.2 查看 deploy控制器标签

5.2.3 查看node节点标签

5.2.4 给Pod资源打标签

5.2.5 给Pod资源更新标签

5.2.6 使用标签选择器筛选

5.2.7 删除标签

六、标签选择器案例演示

6.1 查看当前k8s集群的节点信息

6.2 给工作节点打上标签

6.3 创建一个yaml文件,使用上面创建的标签选择器

七、写在结尾


一、标签选择器来源

对于k8s中pod来讲,使用pod控制器创建的pod发生故障后,重建后的pod的ip地址和名称是变化的,为了解决pod访问问题,我们可以创建service,通过访问service的ip地址就可以正常访问到pod,那么问题来了,service是怎样去关联pod的呢?

我们知道在k8s中如果使用pod控制创建的pod,pod发生故障后,对应pod会被对应的控制器重启或重建,一个pod重建以后,对应的ip地址和名称都会发生变化,所以靠ip地址和名称关联pod是不行的,那靠什么关联pod呢?

在k8s上是使用的标签和标签选择器的机制实现资源和资源间相互关联的

二、什么是标签选择器

2.1 标签选择器概述

K8S提供了一种机制来为资源进行分类,那就是Label(标签),同一类资源会拥有相同的标签,具体形式是key-value的标记对,可以在创建资源的时候设置,也可以在后期添加和修改;

1、可以附加到各种资源对象上,如Node,Pod,Service,RC等,一个资源拥有多个标签,可以实现不同维度的管理;

2、给某个资源对象定义一个Label,就相当于给它打了一个标签,可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,K8S通过这种方式实现了类似SQL的对象查询机制;

2.2 标签选择器概述属性

每个资源都存在多维度属性,比如下面这些标签:

  • 版本标签:"release" : "stable" , "release" : "canary"...
  • 环境标签:"environment" : "dev" , "environment" : "production";
  • 架构标签:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware";
  • 分区标签:"partition" : "customerA" , "partition" : "customerB"...

不同的场景可以选择具有合适属性功能的标签进行使用

三、标签使用场景

  • 未使用标签的时候,集群中pod比较多的情况下,分散难以管理,如果需要部署不同版本的应用到不同的环境中,操作起来比较麻烦;
  • 如果给不同的pod打上标签之后,就可以进行集中式管理,方便运维;

四、标签选择器特点

4.1 基本特点

  • 是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象;
  • 对应的资源打上标签后,可以使用标签选择器过滤指定的标签;

4.2 核心标签选择器

matchLabels

用于定义一组Label , 基于等值关系(等于、不等于) ,类似于SQL语句中的=或!=

matchExpressions

基于集合关系(属于、不属于、存在) ,类似于SQL语句中的in或 not in;

4.3 补充说明

如果同时设置了matchLabels和matchExpressions,则两组条件为 AND关系,即需要同时满足所有条件才能完成Selector的筛选。

五、标签选择器常用操作命令

5.1 前置准备

在上一篇,通过下面这种方式导出了一个nginx.yaml,然后通过yaml创建了一个pod

kubectl create deployment test-nginx3 --image=nginx:1.23.0 --namespace default -o yaml --dry-run=client > ./nginx.yaml

默认情况下查看pod时不会列出任何标签

5.2 常用操作命令

5.2.1 查看namespace下的标签

kubectl get pod -n default --show-labels

这里显示的标签名称,正是导出的nginx.yaml中的下面这里的配置

5.2.2 查看 deploy控制器标签

kubectl get deploy -n default --show-labels

5.2.3 查看node节点标签

kubectl get node --show-labels

5.2.4 给Pod资源打标签

kubectl label pod pod名称 -n default 标签名称

再次查看标签时:kubectl get pod -n default --show-labels  ,可以看到上述打的标签就有了

5.2.5 给Pod资源更新标签

kubectl label pod pod名称 -n default version=2.0 --overwrite

比如在上面那个pod,已经打上了version=1.0,现在将其标签更新为2.0;

5.2.6 使用标签选择器筛选

kubectl get pod -l "标签名称" -n default --show-labels

比如这里我们筛选一下上面给nginx这个pod打的version=2.0这个标签;

5.2.7 删除标签

kubectl label pod pod名称 -n default version-

删除上面这个version=2.0的标签

六、标签选择器案例演示

在上文谈到,使用标签选择器可以很方便的对pod进行管理,举例来说,k8s集群中有很多个工作(node)节点,运维人员在明确了各工作节点的配置前提下,希望在开启某个pod的时候,这个pod被调度到特定的节点上,而不是使用k8s默认的调度策略,这时候就可以先通过给工作节点打标签,然后在启动pod的时候,使用标签选择器选择这个标签即可达到这个目的;

针对上面这个需求,通过实操演示下;

6.1 查看当前k8s集群的节点信息

目前一个master节点,和一个工作节点

6.2 给工作节点打上标签

kubectl label node izbp1hgw1v5d5y7bpvejtwz env=node1

6.3 创建一个yaml文件,使用上面创建的标签选择器

apiVersion: v1
kind: Pod
metadata:
  name: test-nginx-label
spec:
  containers:
  - name: nginx
    image: nginx:1.23.0
    imagePullPolicy: IfNotPresent
  nodeSelector:
    env: node1

执行之后,可以看到就成功创建了一个pod,并且使用的是自己创建的这个标签选择器;

七、写在结尾

标签的思想最早在docker容器中比较常见,尤其是在生产环境下,当docker容器的数量非常庞大的时候,为了更好的管理不同环境不同版本下的docker容器时,方便运维更好更快捷的找到对应的docker容器,标签这一概念就显得很实用了,k8s中使用标签的思想也源于此,在日常开发中,也可以适当的考虑将标签这一设计思想进行运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/2358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Android架构模板

使用Android架构模板 项目介绍 为了方便开发者引入最新的Android架构组建进行开发,Google官方给我们引入了一个架构模板,方便我们快速进入开发。 github地址: https://github.com/android/architecture-templates 该模板遵循官方架构指南 …

小白怎么系统的自学计算机科学和黑客技术?

我把csdn上有关自学网络安全、零基础入门网络安全的回答大致都浏览了一遍,最大的感受就是“太复杂”,新手看了之后只会更迷茫,还是不知道如何去做,所以站在新手的角度去写回答,应该把回答写的简单易懂,“傻…

Maven依赖加载不进来? 依赖加载失败? 你值得掌握如何排查的方法

本文目录前言1. 确认是否添加了spring-boot-starter-web依赖2. 如果添加了spring-boot-starter-web依赖,刷新以后还飘红?3. 确认父项目加spring-boot-dependencies了吗?3.1 如果是因为没加spring-boot-dependencies3.2 如果已经加了spring-bo…

22张图带你了解IP地址有什么作用

了解IP地址 1、IP地址的格式 在IP协议的报文中,可以得知IP地址是有32个比特,IP地址在计算机中是以二进制的方式处理的,如果全部以二进制的形式来表示,使用跟表达都非常的困难,所以为了人类方便记忆,采用了…

TCP/UDP协议

写在前面 下面我们继续说我们传输层的协议,这个协议我们重点看TCP协议,注意TCP是我们经常使用的额,而且也是我们在面试最容易被问到的,所以我们要重点分析,下面是一张图,让我们回忆一下我们知识点到协议的哪一层了. 再谈端口号 我们知道端口号(Port)标识了一个主机上进行通信的…

字符串的反转以及巧用反转 ------关于反转,看这一篇就足够了

目录 一.本文介绍 二.反转字符串 1.题目描述 2.问题分析 3.代码实现 三.反转字符串 II 1.题目描述 2.问题分析 3.代码实现 三.反转字符串中的单词 I 1.题目描述 2.问题分析 3.代码实现 四.反转字符串中的单词 III 1.题目描述 2.问题分析 3.代码实现 五.仅仅反…

【Python入门第三十五天】Python丨文件打开

在服务器上打开文件 假设我们有以下文件,位于与 Python 相同的文件夹中。 demofile.txt Hello! Welcome to demofile.txt This file is for testing purposes. Good Luck!如需打开文件,请使用内建的 open() 函数。 open() 函数返回文件对象&#xff…

Linux驱动开发——串口设备驱动

Linux驱动开发——串口设备驱动 一、串口简介 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距…

基于uniapp+u-view开发小程序【技术点整理】

一、上传图片 1.实现效果&#xff1a; 2.具体代码&#xff1a; <template><view><view class"imgbox"><view>职业证书</view><!-- 上传图片 --><u-upload :fileList"fileList1" afterRead"afterRead"…

C语言蓝桥杯刷题:修剪灌木

题目链接 解题思路&#xff1a; 本题需要注意的是树是白天长&#xff0c;然后爱丽丝傍晩对某棵树进行修剪&#xff0c;也就是说树高度是可能在白天达到最大值而在傍晩变成0。我一开始也有一个误区&#xff0c;以为是要修剪的那棵树当天就变成0而不能生长&#xff0c;其实是先…

vue后台管理系统

后面可参考下&#xff1a;vue系列&#xff08;三&#xff09;——手把手教你搭建一个vue3管理后台基础模板 以下代码项目gitee地址 文章目录1. 初始化前端项目初始化项目添加加载效果配置 vite.config.js2. 使用路由安装路由配置路由配置别名和跳转安装pathvite.config.jsjsco…

C++类和对象(上篇)

目录 1.类的定义 2.类的访问限定符及封装 2.1类的访问限定符 2.2封装 3.类的作用域 4.类的实例化 5.类的大小 6.this 指针 1.类的定义 class className {// 类体&#xff1a;由成员函数和成员变量组成}; // 一定要注意后面的分号 class为定义类的关键字&#xff0c;Clas…

Golang每日一练(leetDay0012)

目录 34. 查找元素首末位置 Find-first-and-last-position-of-element-in-sorted-array &#x1f31f;&#x1f31f; 35. 搜索插入位置 Search Insert Position &#x1f31f; 36. 有效的数独 Valid Sudoku &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 …

VsCode SSH远程连接服务器【内网穿透公网连接】

文章目录1.前言2.VS code的安装和设置2.1 VS code的下载安装2.2 OpenSSH的启用2.3 为VS code配置ssh2.4 局域网内测试VS code的ssh连接2.5 Cpolar下载安装3.Cpolar端口设置3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者小时候看电视&#xff0c;看…

【安全与风险】密码学介绍

密码学介绍密码历史密码换位&#xff08;Transposition&#xff09;与置换&#xff08;Substitution&#xff09;替换密码&#xff08;Substiution Cipher&#xff09;凯撒密码 &#xff08;100BC 公元前100年&#xff09;移位密码破坏替换密码维吉尼亚密码现代密码学核心原理从…

TCP三次握手/四次挥手

TCP三次握手 任何基于TCP的应用&#xff0c;在发送数据之前&#xff0c;都需要由TCP进行“三次握手”建立连接示意图 第一次握手&#xff1a;客户端PC发送一个SYN位置1&#xff08;SYN1代表请求服务端建立连接&#xff09;的TCP报文发送给要建立TCP连接的Server&#xff0c;此…

23种设计模式

参考链接&#xff1a; 【狂神说Java】通俗易懂的23种设计模式教学&#xff08;停更&#xff09;_哔哩哔哩_bilibili 23种设计模式【狂神说】_狂神说设计模式_miss_you1213的博客-CSDN博客 1. 单例模式 参考链接&#xff1a; 【狂神说Java】单例模式-23种设计模式系列_哔哩哔哩…

Linux(网络基础---网络层)

文章目录0. 前言1. IP协议1-1 基本概念1-2 协议头格式2. 网段划分2-1 基本概念2.2 IP地址分五大类2-3 特殊的IP地址2-4 IP地址的数量限制2-5 私有IP地址和公网IP地址2-6 路由0. 前言 前面我们讲了&#xff0c;应用层、传输层&#xff1b;本章讲网络层。 应用层&#xff1a;我…

GPT-4是个编程高手,真服了!

上周给大家发了一个GPT-4教数学的介绍&#xff0c;很多人都被震撼了&#xff0c;感觉有可能在教育行业引发革命。它在编程领域表现如何&#xff1f;先不说能否替代程序员&#xff0c;这个还有待更多的测试和反馈&#xff0c;我想先试试它能不能像教数学那样教编程。我找了个Jav…

Docker的可视化界面工具

Docker的可视化界面工具1. Portainer1.1 Introduction1.1.1 Official1.2 Download And Deploy1.3 Dashboard1.3.1 Dashboard2. Shipyard2.1 Introduction2.1.1 Character2.1.2 Official2.2 Download And Deploy2.2.1 脚本下载镜像2.2.2 执行脚本2.2.2 查看下载的镜像2.3 Dashbo…