K8s的标签应用和调度

k8s中label标签、deployment控制器、service、ipvs管理简介 一.label管理 1.label的作用和特点 2.标签的查询和筛选 (1)等式型 (2)集合型 3.命令行打标签用法示例 (1)为资源对象添加多个标签 (2)更该原有标签 (3)删除标签 4.配置文件打标签用法示例 二.deployment控制器 1.pod控制器简介 2.deployment控制器 三.service管理 1.kubernetes内部可访问的service 2.kubernetes外部可访问的service 3.删除service 四.ipvs管理 阅读详情

K8s资源身份标签Labels

Labels是用于标识和选择K8s资源的键值对;

可以对Pod、Node、Service、Deployment、Namespace等资源使用标签;

用途:

  • 分类和组织:通过标签可以将对象分组,如将同一个应用的所有Pod标记为一个标签。

  • 筛选和管理:使用标签选择器(Label Selector)来选择和操作特定标签的对象。

  • 自动化操作:结合标签选择器,可以在自动化流程中操作和管理对象,如自动缩放、自动部署等。

使用方法:

1.创建资源时,添加标签

 apiVersion: v1
 kind: Pod
 metadata:
   name: my-pod
   labels:
     app: my-app
     environment: production
 spec:
   containers:
   - name: my-container
     image: nginx
 # 通过标签名筛选Pod
 kubectl get pod -l app=my-app
 kubectl get pod -l app

2.在资源运行时,添加或者修改标签(使用kubectl)

 # 添加标签(动态添加,yaml文件不显示,但是可以通过这个标签筛选)
 kubectl label pod <pod-name> server=nginx
 # 删除标签
 kubectl label pod <pod-name> server-
 # 重新添加标签
 kubectl label pod <pod-name> server=apache

在资源中使用标签的方式:

 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: my-deployment
 spec:
   replicas: 3
   selector:         # 标签选择器
     matchLabels:    # 通过键值对绑定标签
       app: my-app   # 需要管理Pod的标签
   template:         # 创建Pod的模板,通过Deployment自动创建Pod
     metadata:
       labels:
         app: my-app # Pod的标签,用于被筛选和管理
     spec:
       containers:
       - name: my-container
         image: nginx
 # 查看标签
 kubectl describe pod <pod-name>
 # 查看所有Pod的标签
 kubectl get pod -A --show-labels

结合使用

标签和标签选择器在 Kubernetes 中有广泛的应用,以下是一些常见的结合使用场景:

  • 服务发现:使用标签选择器将 Service 绑定到特定的 Pod,实现负载均衡和服务发现。
  • 自动化编排:使用标签选择器自动化编排,如使用 HorizontalPodAutoscaler 根据标签选择器自动扩展 Pod。
  • 资源分组:使用标签将相关资源分组,便于管理和查询。

最佳实践

  1. 命名规范:使用有意义的标签键和值,便于理解和维护。
  2. 避免过度标签:避免添加过多不必要的标签,保持标签的简洁性和实用性。
  3. 一致性:在不同对象和团队之间保持标签的一致性,便于协作和自动化管理。

K8s集群调度介绍

Scheduler:调度器

作用:

在创建运行Pod时,用于将Pod的创建请求绑定到Node节点上;

可以满足调度的公平、高效、灵活;

核心:

  • 公平:如何保证每个节点都能被分配资源

  • 资源高效利用:集群所有资源最大化被使用

  • 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作

  • 灵活:允许用户根据自己的需求控制调度的逻辑

调度过程:

1、过滤掉不满足条件的节点,预选(predicate) ;

2、按照节点的优先级排序,优选(priority) ;

3、选择优先级最高的Node节点。如果中间任何一步骤有错误,就直接返回错误。

调度方法:

1.自动调度:Scheduler经过一系列的算法计算得出最优节点;

2.定向调度:

  • NodeName:指定Node名称进行调度

  • NodeSelector:通过Node标签进行选择调度

3.亲和性调度:

  • NodeAffinity:节点亲和性

  • PodAffinity:Pod亲和性

  • PodAntiAffinity:Pod反亲和性

4.污点(容忍)调度:

  • Taints:给Node节点打上污点,需要容忍度才能调度(没有该污点容忍度的Pod无法调度);

  • Toleration:在Pod上设置容忍度,才能运行在有污点的Node上;

几种调度方法的案例

固定调度案例:

# 指定固定节点:Pod.spec.nodeName

 vim node1.yaml 
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: myweb
 spec:
   selector:
     matchLabels:
       app: myweb
   replicas: 6
   template:
     metadata:
       labels:
         app: myweb
     spec:
       nodeName: node1           # 指定Node的名称,实现固定调度
       containers:
       - name: myweb
         image: 192.168.57.200:8099/yun11/h5-game:1.0
         ports:
         - containerPort: 80

# 指定固定节点标签:Pod.spec.nodeSelector

 vim node-2.yaml
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: myweb
 spec:
   selector:
     matchLabels:
       app: myweb
   replicas: 4
   template:
     metadata:
       labels:
         app: myweb
     spec:
       nodeSelector:        # 通过给Node节点打标签,使用标签选择器进行Pod调度
         cname: webserver
       containers:
       - name: myweb
         image: docker.io/nginx
         ports:
         - containerPort: 80
 # 没有对应标签的节点,所以会卡在Pending
 # 给node2创建一个标签cname:webserver
 kubectl label node node2 cname=webserver
 # 查看结果
 kubectl get node --show-labels
 kubectl get pod -o wide
 # 删除标签
 kubectl label nodes node2 cname- 
 # 一键删除多个控制器
 kubectl delete deployment myweb

污点与容忍度

如果Node节点上有污点,需要Pod有容忍度才能调度运行;

污点的三种排斥级别

  • NoSchedule:没有容忍度的Pod不能新建,已经运行的Pod不受影响;(没有配置此污点容忍度的新Pod不能调度到此节点,节点上现存的Pod不受影响)。

  • PreferNoSchedule:没有容忍度的Pod尽量不要创建,如果没有其他节点可以选择,也能创建;(没有配置此污点容忍度的新Pod尽量不要调度到此节点,如果找不到合适的节点,依然会调度到此节点)。

  • NoExecute:驱逐所有Pod应用;(没有配置此污点容忍度的新Pod对象不能调度到此节点,节点上现存的Pod会被驱逐)。

用法

污点定义在节点的nodeSpec中,容忍度定义在Pod的podSpec中。

污点和容忍度都是键值对的数据格式,但是要增加一个排斥等级(effect)标记。

语法格式为:"key=value:effect"。

使用场景

1、独占节点
  • 如果想拿出部分节点给特定的Pod使用,可以通过给节点添加污点,然后特定的Pod加入对应的容忍度。

  • 在集群中有些机器设备可能比较特殊,比如CPU性能很好、内存很大等等,不希望普通Pod占用这部分特殊节点,可以通过污点和容忍度来解决。

2、驱逐Pod

上文中定义了Node对Pod的排斥等级有3种。Node如果定义的排斥等级是NoExecute,那么没有配置该污点容忍度的Pod会被驱逐。

K8S 也会使用污点自动标识有问题的节点,比如节点在内存不足的情况下,节点控制器会自动为该节点打上污点信息,并且使用 NoExecute作为排斥等级,此时没有设置此类污点容忍度的Pod 会被驱逐。

DaemonSet控制器会无视此类污点,以便能在节点上部署重要的Pod。

目前,内置的污点也比较多,比如以下几个:

  • node.kubernetes.io/not-ready:节点未就绪

  • node.kubernetes.io/unreachable:节点不可触达

  • node.kubernetes.io/memory-pressure:节点内存空间已满。

  • node.kubernetes.io/disk-pressure:节点磁盘空间已满。

  • node.kubernetes.io/network-unavailable:节点网络不可用。

容忍度操作符

在Pod上定义容忍度时,它支持两种操作符:Equal和Exists。

  • Equal:容忍度与污点必须在key、value和effect三者完全匹配。

  • Exists:容忍度与污点必须在key和effect二者完全匹配,容忍度中的value字段要使用空值。

给Node打污点

 # 给节点添加污点:
 kubectl taint nodes node1 key=value:effect
 # 举例
 kubectl taint nodes node1 aihao=shuijiao:Noschedule(单个的)
 kubectl taint nodes node1 exi=dubo:NoExecute
 # 给节点删除污点,此处的effect可以没有
 kubectl taint nodes node1 key[:effect]-
 # 举例:
 kubectl taint nodes node1 exi-

给Pod增加容忍度

 ## 容忍度和container平级,注意缩进,需要多几个副本一起测试建议用deployment
 # 使用Equal的场景:(根据键的值容忍)
 tolerations:
 - key: "key"
   operator: "Equal"
   value: "value"
   effect: "NoExecute"
 # 使用Exists的场景:(根据键是否存在来容忍)
 tolerations:
 - key: "key"
   operator: "Exists"
   effect: "NoExecute"

补充:

如果Node上污点的排斥等级是NoExecute时,该Node上正在运行的Pod如果没有该污点的容忍度,就会被立刻驱逐。不过系统增加了tolerationSeconds字段,用来延迟驱逐Pod。

tolerationSeconds字段的意思是:如果 Pod 的容忍度配置里存在排斥等级为 NoExecute ,并且指定了属性 tolerationSeconds 的值,那么Pod 还能继续在该节点上运行的时间(单位为秒):

tolerations:
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoExecute"
  tolerationSeconds: 3600
PCB激光直接成像(LDI)设备技术解析与优化方案 激光直接成像(LDI)是PCB制造中的关键数字化工艺,通过激光束直接在基板上形成电路图案。其核心技术在于高精度光学系统与智能控制算法的结合,工作精度可达微米级。在HDI板、柔性电路等高端PCB制造中,LDI技术能显著提升线宽精度和层间对位准确性。当前行业面临材料适配性、热变形控制等挑战,动态能量补偿、多波长曝光等创新方案正在突破这些瓶颈。随着模块化设计、预测性维护等工程实践的普及,LDI设备综合效率持续提升,为5G、汽车电子等领域的精密电路生产提供关键技术支撑。 阅读详情

相关推荐

单细胞monocle3分析流程再整理

定义root cell, 推断拟时方向# 结合先验知识自定(示例数据)# 可视化示例数据,起点是随便点的。

zfyyzhys的博客 2100

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

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

Gauss松鼠会 3531

Rider高效调试UE引擎:无需编译源码的符号配置指南

本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。

weixin_29011239的博客 340

k8s(七)---标签

label是一对key和value,创建标签后,方便对资源进行分组管理。

m0_45283400的博客 699

从零搭建智能车竞赛卡丁车:自动驾驶科目中的锥桶识别与路径规划实战教程

本文提供了一份从零搭建智能车竞赛卡丁车的实战教程,重点解析了自动驾驶科目中的核心环节:锥桶识别与路径规划。内容涵盖硬件选型、传感器部署、基于单目视觉的识别算法,以及适用于嵌入式平台的轻量级路径规划与跟踪策略,旨在帮助参赛者与爱好者系统掌握关键技术,完成稳定可靠的自动驾驶系统搭建。

lg888的博客 1166

cadence数模混合仿真反标sdf

数模混合IC设计时经常要调用一些Verilog模块(最简单的例如SPI接口),在前仿时一般直接用rtl代码来仿真,但是后仿时要关注因寄生带来的延迟,避免这些额外的延迟导致时序错误,因此不能简单地采用RTL来仿真。 一般有两种办法:1是采用由RTL综合得到的门级电路来仿真,这种方法比较简单,但是缺点是规模较大,而且只包括门延迟不包括因版图导致的线延迟;如果想要仿真更精细,就要对该这部分门电路提取寄生参数; 另一种方式是利用sdf文件(standard delay format)来进行仿真。后端工具在布局布

长河柱天的博客 7273

k8s 节点操作常用命令

k8s kubernetes node

流金岁月的专栏 4665

告别SendKeys!用DD驱动级模拟在Windows 10/11上实现真·后台键鼠操作(Python实战)

本文详细介绍了如何使用DD驱动级模拟技术在Windows 10/11上实现真后台键鼠操作,解决传统方法如pyautogui和SendKeys的局限性。通过Python实战案例,展示了驱动级模拟在游戏自动化、RPA等场景中的高效应用,包括环境配置、核心API解析及高级优化技巧。

weixin_42519985的博客 798

K8s新手系列之Label标签和Label选择器

在K8s中,Label(标签) 是用于标识和组织集群资源(如Pod、Service、Deployment、Node等)的核心机制,其主要作用就是在各种资源上添加表示,用来对它们进行区分和选择。回到顶部和k8s.io/前缀是为 Kubernetes 核心组件保留的。格式:[前缀/]名称前缀(可选):DNS子域格式(如 k8s.example.com/),不超过253字符。名称:不超过63字符,允许字母、数字、-、_、.,且需以字母或数字开头和结尾必须为 63 个字符或更少(可以为空)

weixin_41276802的博客 269

手把手教你学Simulink——基于Simulink的Boost变换器电流模式控制(峰值电流控制)建模示例

本文详细介绍了基于Simulink的Boost变换器峰值电流模式控制建模方法。首先分析了Boost变换器在CCM模式下的工作原理及电流控制优势,重点阐述了斜坡补偿的必要性。通过分步指导搭建Simulink模型,包括主电路、电流采样、RS触发器和电压外环PI控制器等核心模块。仿真验证了系统在启动、负载突变和输入电压跌落等工况下的优异性能,输出电压稳定在48V±0.5V。文章还总结了工程实践要点,并提出了数字实现等扩展方向。该建模方法为电力电子高级控制策略的工程验证提供了有效途径。

MHD0815的博客 248

ArcGIS Pro 3.4 二次开发 - 知识图谱

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下操作知识图谱的方法。主要包含两大功能模块:1) 知识图谱数据存储操作,包括建立连接、获取图层、检索要素类与表定义、ID转换等;2) 知识图谱数据模型管理,如获取数据模型属性、标识符信息等。代码示例详细展示了如何使用C#通过QueuedTask异步任务与知识图谱服务交互,包括异常处理、数据转换等常见操作场景。所有示例均采用using语句确保资源释放,并遵循ArcGIS Pro SDK的最佳实践。

Winemonk 762

图解 K8S(05):调度利器之标签与选择器(分组调度)

Kubernetes 中的标签与 nodeSelector 详解

王炳明 2036

Android 14.0 SystemUI下拉通知栏通知去掉长按事件

在14.0的系统rom产品定制化开发中,在systemui模块中关于下拉状态栏这块也是非常重要的部分,最近在关于systemui下拉通知栏的每条通知部分 要求去掉通知栏通知的长按事件,不需要长按功能,所以就需要分析下关于长按事件是在哪里注册的,然后去掉就可以了,接下来分析实现 相关功能

安卓兼职framework和app工程师的博客 276

K8S集群调度

在 Kubernetes 中,集群调度(Cluster Scheduling)是指根据资源需求和可用性将工作负载(如 Pod)分配到集群中的节点上的过程。Kubernetes 的调度器负责执行这一过程,它根据用户定义的要求、节点的资源情况和其他条件来决定将工作负载分配到哪个节点上运行。接收调度请求:当用户提交新的工作负载(如 Pod)时,调度请求将发送给 Kubernetes 的调度器。选择合适的节点。

m0_65299341的博客 1699

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Kubernetes调度Pod到指定Node

Kubernetes有着自己特定的调度算法与策略,由Master中的Scheduler组件来实现,根据Node资源使用情况自动调度Pod的创建,一般我们的k8s集群都是这种调度策略。但是有时我们希望可以将某些Pod调度到指定节点上,就采用yaml文件里的nodeSelector来实现Pod的指定调度。 一、首先,我们先看下我们集群环境的node标签情况 kubectl get node --s...

ST_君华的博客 3019

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

k8s指定node调度

概述 在使用过程中,如果希望指定的pod放在自己希望的node节点上可以进行调度,选择对应的node节点。 可以看出可以使用节点的ip地址或者是在node节点添加标签,让pod调度器使用selector进行选择,这里我将使用两种方法,将主服务的beego端放在node1上,将判题器的两个judger放在node2上,judger1使用ip选择,judger2使用lable选择。 调度 nodename调度 apiVersion: apps/v1 kind: Deployment metadata:

qq_41009846的博客 2587

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

k8s的集群调度

k8s的集群调度:scheduler: 负责调度资源,把pod调度到node节点。预算策略优先策略。

qq_61843057的博客 1519

k8s 节点调度

本文主要描述了k8s 的yaml里面节点调度的规则使用; 其次讲述一下通过deployment的方式部署应用服务,如何结合对应svc来实现服务发现

weixin_49497353的博客 635

k8s Label 介绍及增删改查

k8s Label 介绍及增删改查 label介绍 大多数情况下,我们创建的pod副本会被调度到集群中的任何一个可用节点上,而不会关心具体会调度到哪个节点。不过某些情况存在一种需求:希望某种pod的副本全部在指定的一个或这一些节点上运行,比如希望将MySQL数据库调度到一个具有SSD磁盘的目标节点上。 这时候我们就需要通过kubernetes的label(标签)来实现这个功能。 label(标签)是k8s的一个核心概念,一个label是一个key=value的键值对,其中key与value都是用户自定义的。

阿牛同学的博客 1375

kubernetes中pod的调度-亲和性affinity

在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性;

weixin_39941298的博客 1278

Kubernetes

Kubernetes K8s官方代码 k8s是什么 k8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可以促进声明式配置和自动化。 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。 K8S用于容器化应用程序的部署,扩展和管理。 K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。 Kubernetes目标是让部署容器化应用简单高效。 官方网站:https://kubernetes.io/ 一个容器平台

Xiaoajie55的博客 221

从docker到istio之三 - kubernetes集群编排

前言 容器化,云原生越演越烈,新概念非常之多。信息爆炸的同时,带来层层迷雾。我尝试从扩容出发理解其脉路,经过实践探索,整理形成一个入门教程,包括下面四篇文章。 从docker到istio之一 - 使用Docker将应用容器化 从docker到istio之二 - 使用compose部署应用 从docker到istio之三 - kubernetes编排应用 从docker到istio之四 - ist...

weixin_34110749的博客 678

Kubernetes(K8s)

什么是Kubernetes kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。2015年7月,Kubernetes v1.0正式发布,截止到2017年9月29日最新稳定版本是v1.8。Ku

a512153770的博客 1438

【云原生之K8S】K8S亲和,反亲和、污点、容忍

在节点故障情况下,为了保持现存的 pod 驱逐的限速设置,系统将会以限速的模式逐步给 node 设置 Taint,这就能防止在一些特定情况下(比如 master 暂时失联)造成的大量 pod 被驱逐的后果。使用kubectl taint命令可以给某个Node节点设置污点,Node被设置上污点之后就和Pod之间存在了一种相斥的关系,可以让Node拒绝Pod的调度执行,甚至将Node已经存在的Pod驱逐出去。对于使用二进制手动部署的集群设置和移除这个污点的命令如下:​​​​​​​。

小杨博客 学习交流 634

图解 K8S(07):调度利器之亲和与反亲和(服务容灾)

本系列教程目录(已发布): 图解 K8S(01):基于ubuntu 部署最新版 k8s 集群 图解 K8S(02):认识 K8S 中的资源对象 图解 K8S(03):从 Pause 容器理解 Pod 的本质 图解 K8S(04):吃透 Pod 中的第三类容器 – init 容器 图解 K8S(05):调度利器之标签与选择器(分组调度) 图解 K8S(06):调度利器之污点与容忍度(压力驱逐) 图解 K8S(07):调度利器之亲和与反亲和(服务容灾) 将一个 Pod 分配到某一个可以满足 Pod 资源请求的节

王炳明 1731

K8s概念指南

K8s概念指南 Cluster:集群是指由k8s使用一些列的物理机,虚拟机和其他基础资源来运行你的应用程序. Node:一个node就是一个运行着k8s的物理机或虚拟机,平切pod可以在其上面被调度. Pod:一个pod对应一个由相关容器和卷组成的容器组. Label:一个label是一个被附加到资源上的键/值对,譬如附加到一个pod上,

见证大牛成长之路的专栏 1万+
上一篇: Pod的初始化容器和健康检测-探针(Pod-2)
下一篇: 亲和调度和资源管理器
chen_note
博客等级 码龄1年 251粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值