在Kubernetes(K8s)中,Cordon、Drain、污点与容忍度、亲和性与反亲和性都是与资源管理和调度相关的概念。下面是对这些概念的详细解释:

  1. Cordon(封锁、警戒):

    • Cordon是一个节点维护操作,用于阻止新的Pods被调度到该节点上。当一个节点被标记为Cordon时,已经在该节点上运行的Pods不会被驱逐,但新的Pods不会被调度到这个节点。

    • 这个操作通常用于节点的维护或升级,确保在维护期间不会有新的工作负载被分配到该节点上。

      kubectl cordon node1
      kubectl get nodes # status会新增SchedulingDisabled
      kubectl uncordon node1
  2. Drain(驱逐):

    • Drain操作会驱逐节点上的所有Pods,即将它们从节点上移除并重新调度到其他可用的节点上。

    • 在执行Drain操作时,可以指定一些选项,如忽略DaemonSets管理的Pods,或者强制驱逐即使Pods有对应的容忍度。

    • Drain操作会将节点设置为不可调度状态(Cordon),确保在驱逐Pods期间不会有新的Pods被调度到这个节点上。

      kubectl drain node1 --ignore-daemonsets=true --force
  3. 污点(Taints):

    • 污点是应用于节点上的,用来表示节点存在某种问题或满足特定条件,从而阻止Pods被调度到这个节点上。

    • 污点由键(key)、值(value)和效应(effect)组成。效应可以是NoSchedule(不允许调度)、PreferNoSchedule(优先不调度)或NoExecute(不允许运行且驱逐已运行的Pods)。

    • 内置的污点包括节点未就绪、不可达、磁盘空间不足、内存压力等,也可以自定义污点。

      kubectl taint node node1 wudian:NoSchedule
      kubectl taint node node1 wudian-
  4. 容忍度(Tolerations):

    • 容忍度是应用于Pods上的,允许Pods在存在污点的节点上调度或继续运行。

    • 如果Pod有对应的容忍度,它可以被调度到带有相应污点的节点上,或者即使节点上的污点触发了NoExecute效应,Pod也可以继续在该节点上运行。

    • 容忍度与污点相互配合,用于实现Pod对节点条件的灵活适应和调度控制。

      # 键为key1且值为value1的污点,该污点的效应为NoSchedule。
      # 键为key2的任何污点,因为operator是Exists,并且该污点的效应为NoExecute。
      apiVersion: v1
      kind: Pod
      metadata:
      name: my-tolerant-pod
      spec:
      containers:
      - name: my-container
      image: my-image
      tolerations:
      - key: "key1"
      operator: "Equal"
      value: "value1"
      effect: "NoSchedule"
      - key: "key2"
      operator: "Exists"
      effect: "NoExecute"
  5. 亲和性(Affinity):

    • 亲和性是一种规则,用于定义Pods在集群中的调度偏好。它允许用户根据标签选择器将Pods调度到具有特定标签的节点上。

    • 亲和性可以是硬亲和性(必须满足 requiredDuringSchedulingIgnoredDuringExecution)或软亲和性(尽量满足 preferredDuringSchedulingIgnoredDuringExecution)。硬亲和性在调度时必须满足,而软亲和性则是调度器在满足其他约束条件后尽量满足的。

    • 通过使用亲和性,可以优化Pod的部署和性能,例如将相互依赖的Pods调度到同一节点上以减少网络延迟。

      apiVersion: v1
      kind: Pod
      metadata:
      name: my-pod
      spec:
      containers:
      - name: my-container
      image: my-image
      affinity:
      nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
      - key: kubernetes.io/hostname
      operator: In
      values:
      - node1
      - node2
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
      preference:
      matchExpressions:
      - key: disktype
      operator: In
      values:
      - ssd
      apiVersion: v1
      kind: Pod
      metadata:
      name: my-pod
      spec:
      affinity:
      podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
      matchExpressions:
      - key: app
      operator: In
      values:
      - my-app
      topologyKey: kubernetes.io/hostname
      containers:
      - name: my-container
      image: my-image
  6. 反亲和性(Anti-Affinity):

    • 反亲和性是一种规则,用于定义Pods在集群中的调度反偏好。它确保Pods不会被调度到具有特定标签或已存在某些Pods的节点上。

    • 反亲和性有助于提高应用程序的可用性和容错性,通过将Pods分散到不同的节点上,可以防止单点故障。

    • 反亲和性通常用于确保Pods的高可用性,例如将数据库副本分散到不同的节点上以防止数据丢失。

      apiVersion: v1
      kind: Pod
      metadata:
      name: my-pod
      spec:
      affinity:
      podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
      matchExpressions:
      - key: app
      operator: In
      values:
      - my-app
      topologyKey: kubernetes.io/hostname
      containers:
      - name: my-container
      image: my-image

通过合理使用这些功能,可以更好地控制和优化集群中资源的分配和Pod的部署。

Cordon、Drain、污点与容忍度、亲和性与反亲和性的更多相关文章

  1. Kubernetes 调度 - 污点和容忍度详解

    当我们使用节点亲和力(Pod 的一个属性)时,它会将Pod吸引到一组节点(作为偏好或硬性要求).污点的行为完全相反,它们允许一个节点排斥一组 Pod. 在 Kubernetes 中,您可以标记(污染) ...

  2. k8s调度的亲和性和反亲和性

    文章转自 http://ju.outofmemory.cn/entry/278349 https://www.jianshu.com/p/102c4df69af9 RequiredDuringSche ...

  3. Kubernetes中的亲和性与反亲和性

    通常情况下,Pod分配到哪些Node是不需要管理员操心的,这个过程会由scheduler自动实现.但有时,我们需要指定一些调度的限制,例如某些应用应该跑在具有SSD存储的节点上,有些应用应该跑在同一个 ...

  4. k8s调度器之亲和性和反亲和性/节点选择器

    容器在节点(物理机)上是如何部署的 是由调度器scheduler进行调度的 调度策略 随机 通过节点选择器选择某些节点 通过节点亲和性和pod的亲和性及反亲和性实现更细粒度的控制 参考 https:/ ...

  5. Kubernetes K8S之affinity亲和性与反亲和性详解与示例

    Kubernetes K8S之Node节点亲和性与反亲和性以及Pod亲和性与反亲和性详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-mas ...

  6. Kubernetes的亲和性和反亲和性

    节点亲缘性规则可以影响pod被调度到哪个节点.但是,这些规则只影响了pod和节点之间的亲缘性.然而,有些时候也希望能有能力指定pod自身之间的亲缘性. 举例来说,想象一下有一个前端pod和一个后端po ...

  7. pod(九):污点taint 与容忍度tolerations

    目录 一.系统环境 二.前言 三.污点taint 3.1 污点taint概览 3.2 给节点添加污点taint 四.容忍度tolerations 4.1 容忍度tolerations概览 4.2 设置 ...

  8. k8s核心资源之namespace与pod污点容忍度生命周期进阶篇(四)

    目录 1.命名空间namespace 1.1 什么是命名空间? 1.2 namespace应用场景 1.3 namespacs常用指令 1.4 namespace资源限额 2.标签 2.1 什么是标签 ...

  9. Kubernetes 的亲和性污点与容忍

    写在前面 我们在使用k8s过程中经常有这样的需求:我的k8s集群有多台服务器,配置不尽相同.我想把数据库部署到CPU.内存比较好的这几台机:我想把静态承载服务部署到有固态硬盘的机器等:而这些需求,就是 ...

  10. 容器编排系统K8s之节点污点和pod容忍度

    前文我们了解了k8s上的kube-scheduler的工作方式,以及pod调度策略的定义:回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14243312.ht ...

随机推荐

  1. Python 多线程实现爬取图片

    前阵子网上看到有人写爬取妹子图的派森代码,于是乎我也想写一个教程,很多教程都是调用的第三方模块,今天就使用原生库来爬,并且扩展实现了图片鉴定,图片去重等操作,经过了爬站验证,稳如老狗,我已经爬了几万张 ...

  2. 7000字详解Spring Boot项目集成RabbitMQ实战以及坑点分析

    本文给大家介绍一下在 Spring Boot 项目中如何集成消息队列 RabbitMQ,包含对 RibbitMQ 的架构介绍.应用场景.坑点解析以及代码实战.最后文末有免费领取龙年红包封面以及腾讯云社 ...

  3. 并发编程-JUC的三个常用工具类

    1.CountDownLatch:减法计数器 代码实例 public class CountDownLatchTest { public static void main(String[] args) ...

  4. uni-app接口请求封装

    首先根目录下新建文件夹取名随意,这里我取名common(意为:常见的.共有的) 然后新建request.js文件,贴入以下代码 let server_url = ''; //请求根路径(服务器地址) ...

  5. Vulkan学习苦旅03:零号显卡,启动!(选择物理设备VkPhysicalDevcie)

    随着近几年AI的迅速发展,GPU变得越来越抢手.然而,GPU的全称为Graphics Processing Unit, 从名字中就可以看出,GPU是为了处理图形而诞生的,后来才被应用到科学计算等领域中 ...

  6. 《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(下)

    第 5 章 使用 Entity Framework Core 5.4 重构 Controller 和 Action 重构 AuthorController 构造函数重构 public IMapper ...

  7. Python-open函数-读写文件

    一.open 函数语法 open() 函数的作用是打开一个文件,并返回一个 file对象(即文件对象). open 是一个动作,可以理解为我们打开文档的点击动作. file 对象是一个实物,可以理解为 ...

  8. 顺着这份Java面试地图,国内一二线互联网公司随便进...

    原创:陶朱公Boy(微信公众号ID:taozhugongboy),欢迎分享,转载请保留出处. 前言 临近春节,这几天手头没什么事情,花了点时间,将自己近两年收集的面试真题,进行了一番深度归纳总结,整理 ...

  9. C# 实现刘谦春晚魔术

    internal class Program { static List<string> list=new List<string>() { "A",&qu ...

  10. Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换

    MySQL 主从复制是一种常见的数据库架构,它可以提高数据库的性能和可用性.动态数据源切换则可以根据业务需求,在不同场景下使用不同的数据源,比如在读多写少的场景下,可以通过切换到从库来分担主库的压力. ...