在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. 10.5 认识XEDParse汇编引擎

    XEDParse 是一款开源的x86指令编码库,该库用于将MASM语法的汇编指令级转换为对等的机器码,并以XED格式输出,目前该库支持x86.x64平台下的汇编编码,XEDParse的特点是高效.准确 ...

  2. PXE+Kickstart 自动化部署系统

    PXE 预启动执行环境是由Intel开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持PXE技术),主要用于在无人值守安装系统中引导客户端主机安装Linux操作系统. Kic ...

  3. CE修改器入门:运用代码注入

    从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大. 代 ...

  4. setjmp/longjmp使用问题

    setjmp/longjmp开启编译优化后导致出现无法正常使用

  5. 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5

    在 MacOS 上使用 OpenVINO C# API 部署 Yolov5 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代,旨在实时提供高速.高精度的结果, ...

  6. 使用mail发送邮件

    使用mail发送邮件 ​ 只做个简单介绍,使用场景不多 1.安装mail yum install mailx -y 2.配置 ​ 1)配置文件在/etc/mail.rc,有兴趣的可以仔细读一下默认的配 ...

  7. python 学习随笔1121

    Python 数据处理几个好用又简单的库: json re string pandas 与系统交互: subprocess os

  8. 从零开始手写缓存框架(二)redis expire 过期原理及实现

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能. 过期是一个非 ...

  9. 【Unity3D】阴影原理及应用

    1 阴影原理 ​ 光源照射到不透明物体上,会向该物体的后面投射阴影,如果阴影区域存在其他物体,这些物体不被光源照射的部分就需要渲染阴影.因此,我们可以将阴影的生成抽象出 2 个流程:物体投射阴影.物体 ...

  10. CSS实现页脚始终在页面底部

    说明 最近在布局自己的博客系统,我是想练练手把时下比较流行的前后端技术串起来.同时,我会把设计和编码过程中遇到的问题或值得分享的技术点.实现方式做下总结,记录下来.本篇就是第一篇,个人能力有限,不足之 ...