以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
在 Kubernetes 中,服务调度是指 kube-scheduler 组件根据特定的调度算法和策略,将 Pod 分配到最合适的 Node 节点上,以满足应用程序的资源需求和 Kubernetes 集群的资源限制,实现集群资源充分、合理的利用。
工作原理
kube-scheduler 持续监听 kube-apiserver,当检查到没有绑定 Node 节点的 Pod(即 PodSpec.NodeName 为空)时,会为其分配 Node 节点并进行绑定。
整个调度过程大致可以分为 3 个阶段:
- 预选阶段:过滤掉不满足条件的 Node 节点,这个过程称为 Predicates
- 优选阶段:对满足条件的 Node 节点进行优先级排序,称之为 Priorities
- 选定阶段:从多个优选出的 Node 节点中随机选择一个
如果中间任何一个阶段出现错误,就会直接返回错误。
节点绑定
节点绑定(Node Selector)是一种调度机制,该机制基于 Node 节点的标签,将 Pod 调度到具有特定标签的 Node 节点上,实现与指定 Node 节点的绑定。
资源清单示例如下:
代码语言:javascript复制# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: demo-deployment
template:
metadata:
labels:
app: demo-deployment
spec:
containers:
- name: demo-container
image: demo-image:latest
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/hostname: my-node01