【赵渝强老师】Kubernetes中Pod的调度策略

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Kubernetes中Pod的调度是指将Pod分配到最合适的Node节点上运行。默认情况下,调度器根据资源需求和均衡策略自动选择节点。在特殊场景下,用户可通过nodeName和nodeSelector字段指定调度约束。本文详细介绍了Pod的创建过程及调度机制,并通过示例演示了如何使用nodeName和nodeSelector实现自定义调度策略。

副本_副本_副本_副本_副本_副本_副本_副本_副本_副本_副本_副本_副本_Oracle-课程封面__2025-07-20+11_01_25.png

Pod的调度是指Kubernetes在创建Pod时,将其创建到最合适的Node节点上,然后由Node节点上kubelet来运行。在在默认情况下,调度器scheduler会根据特定的算法和策略将Pod调度到Node节点上,这可以满足绝大多数的需求。例如,调度Pod到资源满足要求的Node节点上运行;或者分散到不同Node节点以达到资源的均衡使用。


但在一些特殊的场景下,scheduler的默认调度算法策略并不能满足实际的需求。Kubernetes也运行用户根据调度约束的字段来指定将Pod调度到哪些Node节点上。


一、 Pod的创建过程


要理解Kubernetes是如何调度Pod的,首先就需要掌握Pod是如何被创建出来的。下图说明了Pod的创建过程。

image.png


scheduler在对Pod进行调度时,会根据Pod和Pod中每个容器对资源都的不同需求,选择一个最优的Node节点去运行这个Pod。满足Pod资源调度请求的Node节点称为可调度节点。如果集群中不存在可调度节点,Pod将被设置为未调度状态,直到集群中出现可调度节点。


视频讲解如下:


二、 Pod的调度约束


scheduler有默认支持的算法和策略对Pod进行调度,Kubernetes也允许定义自己的调度约束策略,将Pod运行在指定的Node节点上。调度约束可以通过两个字段来进行定义:nodeName和nodeSelector。

其中:

  • nodeName: 用于将Pod调度到指定名称的Node节点上。
  • nodeSelector: 用于将Pod调度到匹配Label标签的Node节点上。


下面通过具体的示例来演示它们的用法。


2.1  指定nodeName的调度约束


(1)创建nodename-demo.yaml文件,并在文件中输入下面的内容:

apiVersion: v1
kind: Pod
metadata:
  name: nodename-demo
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  ##通过nodeName指定到node1节点上,这是节点名
  nodeName: node1


(2)使用“kubectl apply”命令应用yaml文件。

kubectl apply -f nodename-demo.yaml


(3)查看Pod的详细信息,可以看出“nodename-demo”被调度器调度到了node1的节点上,如下图所示。

kubectl get pod -o wide

image.png


2.2  指定nodeSelector的调度约束


(1)给node2添加一个标签。

kubectl label node node2 nodeselector-key=nodeselector-value


(2)创建nodeselector-demo.yaml文件,并在文件中输入下面的内容:

apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  ##根据nodeSelector指定的标签将Pod调度到对应的节点上
  nodeSelector:
    nodeselector-key: nodeselector-value


(3)使用“kubectl apply”命令应用yaml文件。

kubectl apply -f nodeselector-demo.yaml


(4)查看Pod的详细信息,可以看出“nodeselector-demo”被调度器调度到了node2的节点上,如下图所示。

kubectl get pod -o wide

image.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 应用服务中间件 调度
k8s教程(pod篇)-全自动调度
k8s教程(pod篇)-全自动调度
239 0
|
5月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
317 18
【赵渝强老师】数据库不适合Docker容器化部署的原因
|
2月前
|
Linux 数据安全/隐私保护 虚拟化
【赵渝强老师】Docker的私有镜像仓库:Harbor
Harbor是由VMware开发的企业级Docker镜像仓库管理工具,支持权限管理、LDAP集成、日志审计、镜像复制及中文界面等功能。本文详细介绍了Harbor的安装、配置及在Docker中的实战应用流程,涵盖环境准备、部署步骤、基础操作和镜像上传等内容,适用于容器化应用的镜像管理场景。
198 4
|
3月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
194 23
|
3月前
|
Kubernetes NoSQL Redis
使用ASM全局限流实现源IP分别限流
本文介绍了如何在ASM中实现基于源IP的全局限流,防止恶意请求。内容包括前提条件、准备工作、部署步骤及验证方法,帮助用户通过配置限流策略保障业务入口的稳定性与安全性。
|
6月前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
331 85
|
5月前
|
存储 Kubernetes Serverless
容器技术 20 年:颠覆、重构与重塑软件世界的力量
从 20 世纪硬件虚拟化的笨重,到操作系统虚拟化的轻量探索,容器技术历经蜕变。2013 年 Docker 横空出世,以 “一次构建,到处运行” 的创举打破环境壁垒,开启容器黄金时代。随后,Docker Compose、Kubernetes、Istio 等技术相继涌现,从多容器管理到集群编排,再到微服务治理,不断突破应用部署与运维的边界。如今,容器与 DevOps 深度融合,Serverless 架构异军突起,共同重塑软件开发生态。本文将带你穿越容器技术发展的关键节点,揭秘其如何以颠覆性力量推动云计算与数字化。
362 64
|
4月前
|
存储 数据可视化 数据安全/隐私保护
【赵渝强老师】Docker的图形化管理工具
本文介绍了三种主流的Docker图形化管理工具:Docker UI、Portainer和Shipyard。Docker UI(现名UI for Docker)适合初学者,支持容器管理并可显示容器关系图;Portainer轻量级且功能全面,支持单机与集群管理;Shipyard专注于多主机集群管理,提供镜像、容器及节点管理功能,并包含engine和rethinkdb两个核心组件。文中还通过图文结合的方式展示了各工具的安装与使用方法。
178 4
【赵渝强老师】Docker的图形化管理工具
|
5月前
|
弹性计算 Kubernetes API
Kubernetes 驱动的 IaC,Crossplane 快速入门
Crossplane 是一个开源的 Kubernetes 扩展工具,允许用户通过声明式配置直接在 Kubernetes 中管理云资源。对于阿里云开发者,借助 Crossplane 和官方提供的 provider-upjet-alibabacloud,可以像管理 Pod 一样轻松操作 ECS 实例、VPC 和 OSS Bucket 等资源。本文介绍了 Crossplane 的核心概念,并通过快速入门指南演示了如何安装 Crossplane、配置阿里云认证并创建第一个 VPC 资源。
560 37
|
3月前
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+ OOS AI 助手实现 7×24 小时运维自由
通过钉钉机器人配置阿里云 OOS AI 助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。