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

简介: 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篇)-全自动调度
283 0
|
6月前
|
Kubernetes 安全 API
【赵渝强老师】Kubernetes的安全框架
Kubernetes集群安全框架由认证、鉴权和准入控制三个核心阶段组成。认证阶段验证客户端身份,通过API Server配置的认证模块完成;鉴权阶段检查请求者操作权限,确保合法操作;准入控制阶段拦截并修改请求参数,通过插件实现特殊任务处理。每个阶段均可扩展自定义插件,增强安全性。文内附图与视频详解各阶段流程与实例。
158 2
|
7月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
406 18
【赵渝强老师】数据库不适合Docker容器化部署的原因
|
4月前
|
Linux 数据安全/隐私保护 虚拟化
【赵渝强老师】Docker的私有镜像仓库:Harbor
Harbor是由VMware开发的企业级Docker镜像仓库管理工具,支持权限管理、LDAP集成、日志审计、镜像复制及中文界面等功能。本文详细介绍了Harbor的安装、配置及在Docker中的实战应用流程,涵盖环境准备、部署步骤、基础操作和镜像上传等内容,适用于容器化应用的镜像管理场景。
371 5
|
Kubernetes Ubuntu 网络协议
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
|
7月前
|
存储 Kubernetes Serverless
容器技术 20 年:颠覆、重构与重塑软件世界的力量
从 20 世纪硬件虚拟化的笨重,到操作系统虚拟化的轻量探索,容器技术历经蜕变。2013 年 Docker 横空出世,以 “一次构建,到处运行” 的创举打破环境壁垒,开启容器黄金时代。随后,Docker Compose、Kubernetes、Istio 等技术相继涌现,从多容器管理到集群编排,再到微服务治理,不断突破应用部署与运维的边界。如今,容器与 DevOps 深度融合,Serverless 架构异军突起,共同重塑软件开发生态。本文将带你穿越容器技术发展的关键节点,揭秘其如何以颠覆性力量推动云计算与数字化。
528 65
|
2月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
227 6
|
2月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
297 1
|
5月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
351 23
|
8月前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
439 85