首页 > 编程语言 >什么是 Kubernetes cluster 的 Node affinity

什么是 Kubernetes cluster 的 Node affinity

时间:2023-06-21 23:45:42浏览次数:59  
标签:Node 标签 调度 cluster affinity Pod 节点

Node affinity 在概念上类似于nodeSelector,它允许您根据节点标签来限制Pod可以调度到哪些节点上。有两种类型的节点亲和性:

  • requiredDuringSchedulingIgnoredDuringExecution:除非满足规则,否则调度程序无法将Pod调度到节点上。这类似于nodeSelector,但具有更具表达性的语法。

  • preferredDuringSchedulingIgnoredDuringExecution:调度程序尝试找到符合规则的节点。如果没有匹配的节点可用,调度程序仍会将Pod调度到节点上。

注意:在上述类型中,IgnoredDuringExecution表示如果在Kubernetes调度Pod之后节点标签发生变化,Pod将继续运行。

开发人员可以在Pod规范的.spec.affinity.nodeAffinity字段中指定Node affinity:

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - antarctica-east1
            - antarctica-west1
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: registry.k8s.io/pause:2.0

在Kubernetes集群中,Node affinity(节点亲和性)是一种机制,用于控制Pod在调度时所选取的节点。它允许您根据节点的属性和标签,指定Pod在哪些节点上可以调度和运行。

Node affinity可以用于多种场景,包括:

  1. 硬件要求:某些应用程序可能对特定类型的硬件有要求,例如需要具备GPU或特定的存储设备。通过使用Node affinity,可以将这些Pod调度到拥有相应硬件资源的节点上。

  2. 数据局部性:某些应用程序需要访问特定的数据源或存储位置,为了减少延迟和网络开销,可以将Pod调度到与数据源或存储位置相近的节点上。

  3. 资源隔离:通过使用Node affinity,可以将不同类型的Pod分配到不同的节点上,实现资源的隔离和优化。例如,将CPU密集型的应用程序调度到专门的高性能节点,将内存密集型的应用程序调度到具备大内存容量的节点。

Node affinity的配置基于节点标签和Pod规范中的affinity字段。在Pod规范中,您可以使用.spec.affinity.nodeAffinity来指定节点亲和性的规则。Node affinity有两种类型:

  1. requiredDuringSchedulingIgnoredDuringExecution:Pod必须满足规则才能被调度到节点上。如果没有满足规则的节点可用,Pod将无法被调度。这类似于使用nodeSelector,但具有更灵活和表达性更强的语法。

  2. preferredDuringSchedulingIgnoredDuringExecution:调度器会尝试寻找满足规则的节点,并将Pod调度到最匹配的节点上。如果没有满足规则的节点可用,调度器仍然会选择一个节点进行调度。

需要注意的是,在这两种类型中,IgnoredDuringExecution表示一旦Pod被Kubernetes调度到节点上后,即使节点的标签发生变化,Pod也会继续在该节点上运行。

Node affinity的规则可以根据节点标签的匹配性和非匹配性来定义。例如,您可以使用类似于"matchExpressions"和"matchFields"的字段来指定节点标签的匹配规则,以决定Pod是否应该被调度到节点上。

使用Node affinity时,需要考虑以下几点:

  1. 标签定义:确保节点上的标签与您定义的节点亲和性规则相匹配。您可以为节点添加适当的标签,以便将其与Pod的节点亲和性规则相匹配。

  2. 节点选择器:除了使用Node affinity外,您还可以使用nodeSelector来直接指定Pod应该调度到哪些节点上。在一些情况下,

使用nodeSelector可能更简单和直观。

  1. 节点标签更新:如果您在节点上更新了标签,可能会导致已经运行的Pod被重新调度。因此,需要谨慎更新节点标签,以避免Pod的中断或重新调度。

总之,Node affinity是Kubernetes集群中用于控制Pod调度的重要机制之一。它通过使用节点标签和Pod规范中的affinity字段,允许您指定Pod应该调度到哪些节点上。这为您提供了更大的灵活性,以满足不同的调度需求,如硬件要求、数据局部性和资源隔离。

标签:Node,标签,调度,cluster,affinity,Pod,节点
From: https://www.cnblogs.com/sap-jerry/p/17497313.html

相关文章

  • 关于 Java 和 node affinity 这个概念的联系
    在Java开发领域,术语"nodeaffinity"通常不是与Java语言本身直接相关的概念。然而,在某些特定的上下文中,可以将"nodeaffinity"应用于Java应用程序的部署和调度方面。在Java开发中,"nodeaffinity"可能指的是以下几个方面:服务器亲和性:在分布式环境中部署Java应用程序时,可以考虑将......
  • 基于Node.js的分布式应用程序架构设计与最佳实践:实现高效、可扩展的分布式系统
    目录基于Node.js的分布式应用程序架构设计与最佳实践:实现高效、可扩展的分布式系统随着互联网的普及和发展,分布式系统已经成为现代应用程序中不可或缺的一部分。而Node.js作为当前最流行的JavaScript框架之一,其在分布式系统中的使用和优化也越来越广泛。在本文中,我们将介绍基......
  • node生成token报错:secretOrPrivateKey has a minimum key size of 2048 bits for RS25
    提要:在node生成token时利用用jsonwebtoken,利用非对称加密的生成token  constjwt=require("jsonwebtoken"); constprivateKey=fs.readFileSync("./keys/private.key");constpublicKey=fs.readFileSync("./keys/public.key");consttok......
  • k8s node的几种状态
    Kubernetes(K8s)中的节点有几种可能的状态。以下是一些常见的节点状态:1.Ready(就绪):节点正常运行且准备好接受工作负载。这是节点的正常工作状态。2.NotReady(未就绪):节点无法接受工作负载,可能是由于网络问题、资源不足或其他故障导致的。3.OutOfDisk(磁盘空间不足):节点磁盘空间不足......
  • 完事后再聊应用场景,K8S调度实战:Node Affinity
    写在开篇NodeAffinity(节点亲和性)允许在节点级别上指定一些条件来控制Pod被调度到哪些节点上。它还有两种策略,本篇通过实战演示如何使用两种策略来控制Pod的调度。测试环境还是老样子,本次实战继续使用以下K8S集群环境进行:节点主机名IPMaster节点k8s-b-master192......
  • K8S调度:实战完nodeSelector后,再谈应用场景。
    Part1写在开篇nodeSelector是什么鬼?这么说吧,假设有一个K8S集群,其中有多个节点,并且想将一个特定的应用程序只部署在具有特定标签的节点上。这时候就可以在Pod的定义中添加nodeSelector字段,指定一个键值对,例如app:my-app。然后,K8S调度器将查找具有app=my-app标签的节点,并将该Pod调......
  • kubeadm搭建单master多node的k8s集群
    一、实验环境准备镜像选择:CentOS-7-x86_64-DVD-2009.iso配置:4核、6G内存、80G硬盘兼容性:ESXI7.0及更高版本服务器信息:k8s集群角色ip主机名安装的组件控制节点10.104.26.192hqs-masterapiserver、controller-manager、scheduler、etcd、kube-proxy、docker、ca......
  • [ERROR] No loader is configured for ".node" files: node_modules/fsevents/fsevent
    解决方法:修改项目中./node_modules/fsevents/fsevents.js文件//修改constNative=require("./fsevents.node")//更改为constNative=window.require("./fsevents.node")......
  • find-my-way nodejs 快速的http 路由框架
    find-my-way基于了radixtree开发的路由框架,支持路由参数,通配符,同时语言无关fastify以及restify都使用了路由框架,同时也受echo启发说明了解find-my-way的使用以及内部机制对于学习fastify是比较有用的,fastify不少有意思的插件机制都利用了find-my-way参考资料https://g......
  • NodeJS系列(3)- ECMAScript 6 (ES6) 语法(一)
    ECMAScript6(ES6)是最新的JavaScript语言的标准化规范,它的目标是使JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。本文在“NodeJS系列(2)-在NPM项目里使用ECMAScript6(ES6)规范”的npmdemo的基础上,介绍并演示let、const、Symbol等ES6语法......