当前位置: 首页 > news >正文

K8s的标签应用和调度

K8s资源身份标签Labels

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

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

用途:

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

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

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

使用方法:

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

 apiVersion: v1kind: Podmetadata:name: my-podlabels:app: my-appenvironment: productionspec:containers:- name: my-containerimage: nginx# 通过标签名筛选Podkubectl get pod -l app=my-appkubectl 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/v1kind: Deploymentmetadata:name: my-deploymentspec:replicas: 3selector:         # 标签选择器matchLabels:    # 通过键值对绑定标签app: my-app   # 需要管理Pod的标签template:         # 创建Pod的模板,通过Deployment自动创建Podmetadata:labels:app: my-app # Pod的标签,用于被筛选和管理spec:containers:- name: my-containerimage: 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/v1kind: Deploymentmetadata:name: mywebspec:selector:matchLabels:app: mywebreplicas: 6template:metadata:labels:app: mywebspec:nodeName: node1           # 指定Node的名称,实现固定调度containers:- name: mywebimage: 192.168.57.200:8099/yun11/h5-game:1.0ports:- containerPort: 80

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

 vim node-2.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: mywebspec:selector:matchLabels:app: mywebreplicas: 4template:metadata:labels:app: mywebspec:nodeSelector:        # 通过给Node节点打标签,使用标签选择器进行Pod调度cname: webservercontainers:- name: mywebimage: docker.io/nginxports:- containerPort: 80# 没有对应标签的节点,所以会卡在Pending# 给node2创建一个标签cname:webserverkubectl label node node2 cname=webserver# 查看结果kubectl get node --show-labelskubectl 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
http://www.dtcms.com/a/581070.html

相关文章:

  • 如何应用动作捕捉技术让户外重体力工作更安全
  • rust中的Cargo.toml文件
  • PD快充诱骗芯片 XSP15 支持获取快充电压可与外部MCU共用D+D-网络与电脑传输数据
  • 蓝牙钥匙 第58次 蓝牙钥匙交互反馈设计:构建多感官无缝用户体验
  • spiderdemo第22题与webassembly的跨域
  • 【MySQL | 基础】通用语法及SQL分类
  • 【爬虫】分析天气网后,整理的一点理论上的理解
  • Web安全-文件上传漏洞-黑白名单及其它绕过思路(附思维导图)
  • WPF 高级 UI 定制:深入解析 VisualStateManager 与 Adorner
  • 全景相机市占率“罗生门”:影石的数据迷雾
  • 【2025】16届蓝桥杯 Java 组全题详解(省赛真题 + 思路 + 代码)
  • flas网站开发工具网店美工课程
  • 网站广告连接如何做wordpress.shop
  • Geobuilding模型转换,深圳市科技风贴图建筑物3dtiles倾斜摄影数据
  • CentOS 系统升级 OpenSSH 和 OpenSSL 的完整方案
  • PPIO上线Kimi K2 Thinking,兼容Anthropic协议
  • 本地项目上传至GitHub仓库标准操作手册
  • 如何做发表文章的网站网页设计模板图片家乡
  • 不停服务快速创建一个MySQL从节点加入已经存在的MGR集群中
  • TCP建立连接:三次握手(每次握手发的字段及字段值的解释)
  • 【SpringBoot】34 核心功能 - 指标监控- Spring Boot Actuator 指标监控开启与禁用与 Endpoint 定制
  • 【软考】信息系统项目管理师-资源管理论文范文
  • 标准nodejs项目工程
  • 定制网站开发公司种子网站模板
  • Maven前奏
  • C++面试高级篇——内存管理(一)
  • kanass零基础学习,如何进行工时管理,有效度量项目资源
  • 恋爱ppt模板免费下载网站官方网站建立
  • Spark-3.5.7文档1 - 快速开始
  • Java_Map接口实现类Properties