内容正文:
课程名称
第13章 集群管理
计划学时
4学时
内容分析
本章主要介绍Pod调度策略、ConfigMap、资源限制与管理
教学目标
与
教学要求
要求学生了解集群中常用的Pod控制器、掌握集群中Pod共享Volume的操作流程、掌握Pod常用的调度策略、能够使用YAML调整集群中资源对象的参数
教学重点
Pod调度策略、ConfigMap、资源限制与管理
教学难点
Pod调度策略、ConfigMap、资源限制与管理
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(Pod调度策略、ConfigMap)
回顾内容
1.介绍本书,引出本课时的主题
Kubernetes集群就像一个复杂的城市交通系统,里面运行着各种工作负载。对一名集群管理者来说,如何让系统有序且高效地运行,是必须要面对的问题。现实生活中人们可以通过红绿灯进行交通的调度,在Kubernetes集群中,则可以通过各种调度器来实现对工作负载的调度。本章将详细介绍集群中的调度策略和资源管理。
2.明确学习目标
(1) 能够了解Pod调度概述
(2) 能够掌握定向调度
(3) 能够掌握Node亲和性调度
(4) 能够掌握Pod亲和与互斥调度
(5) 能够掌握ConfigMap基本概念
(6) 能够掌握ConfigMap创建方式
(7) 能够掌握ConfigMap使用方法
知识讲解
· Pod调度概述
Kubernetes集群中运行着许多Pod,使用单一的创建方式很难满足业务的需求。因此在实际生产环境中,用户可以通过RC、Deployment、DaemonSet、Job、CronJob等控制器完成对一组Pod副本的创建、调度和全生命周期的自动控制任务。下面对生产环境中遇到的一些情况和需求以及相应的解决方法进行说明。
(1)需要将Pod的副本全部运行在指定的一个或者一些节点上。
在搭建MySQL数据库集群时,为了提高存储效率,需要将相应的Pod调度到具有SSD磁盘的目标节点上。为了实现上述需求,首先,需要给具有SSD磁盘的Node节点都打上自定义标签(如“disk=ssd”);其次,需要在Pod定义文件中设定NodeSelector选项的值为“disk:ssd”。这样,Kubernetes在调度Pod副本时,会先按照Node的标签过滤出合适的目标节点,然后选择一个最佳节点进行调度。如果需要选择多种目标节点(如SSD磁盘的节点或者超高速硬盘的节点),则可以通过NodeAffinity(节点亲和性设置)来实现。
(2)需要将指定的Pod运行在相同或者不同节点。
实际的生产环境中,需要将MySQL数据库与Redis中间件进行隔离,两者不能被调度到同一个目标节点上,此时可以使用PodAffinity调度策略。
接下来,将详细介绍Kubernetes集群中Pod的调度策略。
· 定向调度
NodeSelector可以实现Pod的定向调度,它是节点约束最简单的形式。可以在Pod定义文件中的pod.spec定义项中加入该字段,并指定键值对的映射。为了使Pod可以在指定节点上运行,该节点必须要有与Pod标签属性相匹配的标签或键值对。下面演示NodeSelector的具体用法。
首先,需要为指定节点添加标签。执行kubectl get nodes命令以获取集群节点的名称,选择要向其添加标签的节点,然后执行kubectl label nodes <node-name> <label-key>=<label-value>命令向已选择的节点添加标签。例如,在Node1节点上添加disktype=ssd标签,示例代码如下:
读者可以通过重新执行kubectl get nodes --show-labels命令来检查节点现在是否具有标签。
· Node亲和性调度
Affinity/Anti-affinity(亲和/反亲和)标签可以实现比NodeSelect更加灵活的调度选择,极大地扩展了约束的条件,其具有以下特点。
(1)语言更具表现力。
(2)指出的规则可以是软限制,而不是硬限制。因此,即使调度程序无法满足要求,Pod仍可能被调度到节点上。
(3)用户可以限制节点(或其他拓扑域)上运行的其他Pod上的标签,从而解决一些特殊Pod不能共存的问题。
NodeAffinity是用于替换NodeSelector的全新调度策略,目前提供以下两种节点亲和性表达式。
requiredDuringSchedulingIgnoredDuringExecution
必须满足指定的规则才可以将Pod调度到Node上(与nodeSelector类似,但语法不同),相当于硬限制。
PreferredDuringSchedulingIgnoredDuringExecution
优先调度满