目录
一、k8s调度简介
- 调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node 上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。
- kube-scheduler 是 Kubernetes 集群的默认调度器,并且是集群控制面的一部分。如果真的希望或者有这方面的需求,kube-scheduler 在设计上是允许你自己写一个调度组件并替换原有的 kube-scheduler。
- 在做调度决定时需要考虑的因素包括:单独和整体的资源请求、硬件/软件/策略限制、亲和以及反亲和要求(使用更多)、数据局域性、负载间的干扰等等。
二、影响kubernetes调度的因素
1.nodeName
2.nodeSelector
3.亲和与反亲和
4.Taints:污点
5.cordon、drain、delete
后面的文章会逐个介绍
三、nodeName(不推荐使用)
nodeName 是节点选择约束的最简单方法,但一般不推荐。如果 nodeName 在 PodSpec 中指定了,则它优先于其他的节点选择方法。
使用 nodeName 来选择节点的一些限制:(都会报错)
- 如果指定的节点不存在。
- 如果指定的节点没有资源来容纳 pod,则pod 调度失败。
- 云环境中的节点名称并非总是可预测或稳定的。
[root@k8s1 k8s-yaml]# vi nodename.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/nginx:1.27-alpine3.19
# 指定k8s2如果找不到指定的节点pod会出现pending
nodeName: k8s2
[root@k8s1 k8s-yaml]# kubectl apply -f nodename.yaml