在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. C/C++ 常用加解密算法收集

    网上收集的一些开发常用的加密解密算法的使用技巧,第三方库 Crypto++ 也可实现 Base64加密1 base64.h #ifndef base64_h #define base64_h #inc ...

  2. layui下拉框可手动输入

    先看效果 layui版本:layui@2.8.17 HTML代码: <div class="layui-form-item"> <label class=&quo ...

  3. 【求助】navicat导入monogdb数据报错

    navicat在进行mongodb数据导入时报错 Navicat Premium 版本 16.1.3 (64-bit) Windows 11 Unknown Internal Error (A7052 ...

  4. 捉虫日记:使用OpenGL加载模型 (2023/12/11)

      前天晚上,花了一个小时解决了编译Assimp时的报错问题,顺便写了篇随笔.今天继续OpenGL的学习,不出意料地再次踩坑,好在最后都解决了.   今天主要学习使用Assimp加载模型,原理很简单: ...

  5. 零基础入门学习Java之多线程

    多线程 话不多说,看代码 1.什么是多线程 众所周知CPU单线程的东西,也就是说在同一时间内程序只能去做一件事情,但很多时候比如说多人买票.龟兔赛跑.游戏开发等都需要在同一时间内完成多个东西,因此就有 ...

  6. 高精度模板 大数乘以小数 vector实现

    vector<int> Mul(vector<int>& A, int &B) { vector<int>C; int T = 0; for (in ...

  7. 17.2 内存映射文件的一致性--《Windows核心编程》

    系统允许我们把同一个文件映射到多个视图中,只要映射的是同一个文件映射对象,系统会保证各视图中数据是一致的.例如一个程序修改了一个视图内的内容,那么系统会更新所有其他视图(对应同一文件映射对象)中的内容 ...

  8. java bean 慎用 is开头isXxx开头的属性,若必须得用,那么一定要记得 idea自动生成的 setter 和 getter会不标准,从而会引起问题,他自动生成后,需要手工再次进行修改,才可使用,要不然有可能引起各种问题

    直接上例子: 然后用 Idea 自动生成 getter 和 setter public class XyzBean { //最普通的 private String name; //Boolean类型, ...

  9. ASP.NET Core分布式项目实战(Identity Server 4回顾,Consent 实现思路介绍)--学习笔记

    任务17:Identity Server 4回顾 上一节我们中间留了一部分,登录之后的 RequireConsent,就是用户授权这一步没有做,直接跳过,这种情况可以理解为我们自己比较信任的客户端,这 ...

  10. SSD寻址单元IU对寿命的影响——古猫先生存储随笔转载

    SSD寻址单元IU对寿命的影响有多大? 原创 古猫先生 存储随笔 2024-01-30 08:30 发表于浙江 [转载]SSD寻址单元IU对寿命的影响有多大? (qq.com) 随着存储技术的不断进步 ...