k8s教程(pod篇)-node亲和性调度

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: k8s教程(pod篇)-node亲和性调度

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

在前面的博客《k8s教程(13)-pod定向调度》,讲解了Pod使用NodeSelector来进行定向调度的概念及使用案例,同时也简单介绍了一些预定义的标签。

NodeAffinity意为Node亲和性的调度策略,是用于替换NodeSelector的全新调度策略,本文来讲解下。

02 Node亲和性调度

前面的博客,我们知道如如果要做到定向调度,首先需要给node节点搭上标签,然后在Pod的资源文件声明NodeSelector即可。但是这样的操作限制太死了,很多时候我们希望调度到“满足一定条件”的node,也就是这里要将的NodeAffinity亲和度调度了。

2.1 亲和性调度分类

目前有两种节点亲和性表达:

表达式 含义
RequiredDuringSchedulingIgnoredDuringExecution 必须满足指定的规则才可以调度Pod到Node上(功能与nodeSelector很像,但是使用的是不同的语法),相当于限制
PreferredDuringSchedulingIgnoredDuringExecution 强调优先满足指定规则,调度器会尝试调度Pod到Node上,但并不强求,相当于软限制

多个优先级规则还可以设置权重(weight)值,以定义执行的先后顺序。

IgnoredDuringExecution的意思是:如果一个Pod所在的节点在Pod运行期间 标签发生了变更,不再符合该Pod的节点亲和性需求,则系统将忽略NodeLabel 的变化,该Pod能继续在该节点上运行

2.2 举例

有如下要求:

  • requiredDuringSchedulingIgnoredDuringExecution:要求只运行在amd64的节点上(beta.kubernetes.io/arch In amd64);
  • preferredDuringSchedulingIgnoredDuringExecution:要求尽量运行在磁盘类型为ssd(disk-type In ssd)的节点上;

则资源文件的定义如下:

apiVersion:vl
kind:Pod
metadata:
  name:with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution: 
        nodeSelectorTerms
        - matchExpressions:
          - key:beta.kubernetes.io/arch 
            operator:In
            values:
            - amd64
      preferredDuringSchedulingIgnoredDuringExecution: 
      - weight:1
        preference:
        matchExpressions:
        - key:disk-type
          operator:In
        values:
        - ssd
  containers:
  - name:with-node-affinity
    image:gcr.io/google containers/pause:2.0

从上面的配置中可以看到In操作符,NodeAffinity语法支持的操作符包括In、NotIn、Exists、DoesNotExist、Gt、Lt。虽然没有节点排斥功能,但是用NotInDoesNotExist就可以实现排斥的功能了。

2.3 注意事项

  • 如果同时定义了nodeSelectornodeAffinity,那么必须两个条件都得到满足,Pod才能最终运行在指定的Node上;
  • 如果nodeAffinity指定了多个nodeSelectorTerms,那么其中一个能匹配成功即可;
  • 如果在nodeSelectorTerms中有多个matchExpressions,则一个节点必须满足所有matchExpressions才能运行该Pod。

03 文末

本文主要讲解的是node亲和性调度的两种表达式的含义以及举例(requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution),希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
Kubernetes 应用服务中间件 调度
如何在Kubernetes集群中配置跨可用区的Pod调度
如何在Kubernetes集群中配置跨可用区的Pod调度
|
7天前
|
敏捷开发 网络安全 持续交付
阿里云云效产品使用合集之ACK集群中的Pod需要访问公网,该如何实现
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
24天前
|
Kubernetes Java 应用服务中间件
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
15 0
|
28天前
|
Kubernetes Shell API
技术笔记:K8s中大量Pod是Evicted状态,这是咋回事?
技术笔记:K8s中大量Pod是Evicted状态,这是咋回事?
63 0
|
Kubernetes 网络协议 调度
聊聊k8s中的hostport和NodePort
让服务基于节点暴露端口,大家最先想到的应该都是 nodeport 这种 service,他可以非常方便的为pod代理外部流量,那么 hostport 是什么呢?他和 nodeport 的区别是什么,今天我们来聊聊这个比较小众的 hostport。
6638 0
聊聊k8s中的hostport和NodePort
|
1月前
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
64 3
|
2月前
|
移动开发 JavaScript 前端开发
为了学习vue3,安装nvm进行node的多版本管理
为了学习vue3,安装nvm进行node的多版本管理
99 2
|
8天前
|
JavaScript Ubuntu Shell
Ubuntu上安装任意版本nodejs方法
通过以上步骤,您可以在Ubuntu系统上灵活地安装和管理不同版本的Node.js。这种方法让开发者能够根据不同项目的需要选择合适的Node.js版本,同时也使版本切换变得非常方便。而且,nvm能够为每个项目独立管理依赖,从而确保不同项目之间的环境隔离,增强了开发环境的稳定性和可维护性。
39 2
|
17天前
|
Web App开发 JavaScript 前端开发
Node.js介绍 , 安装与使用
【7月更文挑战第6天】Node.js介绍 , 安装与使用
29 5
|
20天前
|
JavaScript IDE 开发工具
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
49 3