在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++ 常用排序算法整理

    (伪)冒泡排序算法: 相邻的两个元素之间,如果反序则交换数值,直到没有反序的记录为止. #include <stdio.h> void BubbleSort(int Array[], in ...

  2. C++ STL 标准模板库(容器总结)算法

    C++ 标准模板库STL,是一个使用模板技术实现的通用程序库,该库由容器container,算法algorithm,迭代器iterator,容器和算法之间通过迭代器进行无缝连接,其中所包含的数据结构都 ...

  3. LyScript 实现应用层钩子扫描器

    Capstone 是一个轻量级的多平台.多架构的反汇编框架,该模块支持目前所有通用操作系统,反汇编架构几乎全部支持,本篇文章将运用LyScript插件结合Capstone反汇编引擎实现一个钩子扫描器. ...

  4. 苹果打破12年惯例:iPad一整年未更新

    1月2日消息,据媒体报道,自2010年首次亮相以来,苹果一直保持着每年至少发布一款新型号的传统. 但是在过去的2023年,苹果没有发布iPad,2023年苹果发布的唯一与iPad相关的产品是USB-C ...

  5. 开发者必看!苹果App Store重大调整:App上架必须有ICP备案号

    日前,苹果App Store迎来重大调整,即日起中国大陆上架的App必须具备有效的互联网信息服务提供者(ICP)备案号. 简单说,新App现在需要填写备案号才能提审,这就要求开发者应用需有备案号,另外 ...

  6. 苹果新一代“超级芯片”曝光:M3 Ultra最高可达32核CPU

    近日,据外媒消息,苹果计划在2024年推出新一代"超级芯片"M3 Ultra. 据悉,M3 Ultra将大幅增加CPU核心数量,同时GPU核心数量也将适度增加. 具体来说,M3 U ...

  7. 开发必备,开源 or 免费的 AI 编程助手

    AI 大模型的火热,让开发圈近来如虎添翼,各种各样基于 AI 技术的开发者工具和新范式不断涌现,尤其是 Github 和 OpenAI 共同推出的 Copilot X ,更是一骑绝尘.本文推荐一些开源 ...

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

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

  9. .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)

    33 | 集成事件:使用RabbitMQ来实现EventBus 这一节我们来讲解如何通过 CAP 组件和 RabbitMQ 来实现 EventBus 要实现 EventBus,我们这里借助了 Rabb ...

  10. MySQL最左匹配原则

    最左匹配原则都是针对联合索引来说的,那么为什么要使用联合索引呢? 一.为什么要使用联合索引? 1.减少开销. 建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,c ...