pod详解 list-watch机制 预选优选策略 如何指定节点调度pod

K8S是通过 list-watch 机制实现每个组件的协同工作

controller-manager、scheduler、kubelet 通过 list-watch 机制监听 apiserver 发出的事件,apiserver 也会监听 etcd 发出的事件

scheduler的调度策略:

预选策略(Predicates):通过调度算法过滤掉不满足条件的node节点;如果没有满足条件的node节点,Pod会处于Pending状态,直到有符合条件的node节点出现

PodFitsResources(根据Pod的requests资源量)、PodFitsHost(根据Pod的nodeName)、PodFitsHostPorts(根据Pod使用的端口)、PodSelectorMatches(根据Pod的节点标签选择器)、NoDiskConflict(根据Pod使用存储卷)

优选策略(Priorities):根据优先级选项为满足预选策略条件的node节点进行优先级排序,最终选择优先级最高的node节点来调度Pod

LeastRequestedPriority(倾向资源使用率更低的节点)、BalancedResourceAllocation(倾向CPU和内存使用率更接近的节点)、ImageLocalityPriority(倾向本地已有要使用的镜像的节点)

标签的管理操作:

复制代码
kubectl label <资源类型> <资源名称>  标签key=value                      #添加标签
kubectl label <资源类型> <资源名称>  标签key=value --overwrite          #修改标签
kubectl label <资源类型> <资源名称>  标签key-                           #删除标签

kubectl get <资源类型> [资源名称]  --show-labels
kubectl get <资源类型> -l 标签key[=value]

如何指定node节点调度Pod?

键值运算关系

●In:label 的值在某个列表中

●NotIn:label 的值不在某个列表中

●Gt:label 的值大于某个值

●Lt:label 的值小于某个值

●Exists:某个 label 存在

●DoesNotExist:某个 label 不存在

1)使用 nodeName 指定node节点名称

2)使用 nodeSelector 指定node节点的标签

3)使用 节点亲和性、Pod亲和性、Pod反亲和性'

节点亲和:

pod亲和:

pod反亲和:

4)使用 给node节点设置污点,Pod设置容忍

设置容忍:

复制代码
Pod设置容忍:tolerations(与containers字段同一层级)
spec:
  tolerations:
  - operator: Exists|Equal
    key: 污点key
    value:  污点value
    effect: NoSchedule|NoExecute|PreferNoSchedule

#其中的 key、vaule、effect 都要与 Node 上设置的 taint 保持一致
#operator 的值为 Exists 将会忽略 value 值,即存在即可
#tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Node 上继续保留运行的时间

设置污点:

复制代码
Kubctl taint node 节点名称 污点key=[value]:类型
类型:NoSchedule(一定不被调度)    PreferNoSchedule(尽量不被调度)    NoExecute(不会被调度并驱逐Pod)

kubectl taint node 节点名称 污点key-

kubectl describle node 节点名称 | grep - A taints

设置节点不可调度:

复制代码
kubectl cordon 节点名称

kubectk uncordon 节点名称

kubectl taint node <节点名称>  key=:NoSchedule

设置节点不可调度并驱逐Pod

复制代码
kubectl drain <节点名称>  --ignore-daemonsets --delete-emptydir-data --force

kubectl taint node <节点名称>  key=:NoExecute
相关推荐
代码中介商2 小时前
数据结构开篇:从问题到解决方案
数据结构
AKDreamer_HeXY3 小时前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj
Rabitebla3 小时前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
Sarvartha4 小时前
N 个字符串最长公共子序列(LCS)求解问题
数据结构·算法
m0_629494734 小时前
LeetCode 热题 100-----16.除了自身以外数组的乘积
数据结构·算法·leetcode
迷途之人不知返5 小时前
优先级队列:priority_queue
数据结构·c++
jieyucx5 小时前
Go 零基础数据结构:顺序表(像「排抽屉」一样学增删改查)
java·数据结构·golang
想唱rap5 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
jinyishu_6 小时前
链表经典OJ题
c语言·数据结构·算法·链表
澈2076 小时前
C++引用与指针:核心区别全解析
开发语言·数据结构·c++