污点容忍策略
污点概述
● 什么是污点
- 污点(Taint)是使节点与Pod产生排斥的一类规则
● 污点策略是如何实现
- 污点策略通过嵌合在键值对上的污点标签进行声明
● 污点标签
- 尽量部调度:PreferNoSchedule
- 不会被调度:NoSchedule
- 驱逐节点:NoExecute
● 管理污点标签
- 污点标签必须绑定在键值对上,格式为: key=value:[污点标签]
- 查看污点标签: kubectl describe nodes [节点名字]
- 设置污点标签: kubectl taint node [节点命令] key=value:污点标签
- 删除污点标签: kubectl taint node [节点命令] key=value:污点标签-
# 查看污点策略
[root@master ~]# kubectl describe nodes|grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
Taints: <none>
Taints: <none>
Taints: <none>
Taints: <none>
Taints: <none>
# node-0001 设置污点策略 PreferNoSchedule
[root@master ~]# kubectl taint node node-0001 k=v1:PreferNoSchedule
node/node-0001 tainted
# node-0002 设置污点策略 NoSchedule
[root@master ~]# kubectl taint node node-0002 k=v2:NoSchedule
node/node-0002 tainted
[root@master ~]# kubectl describe nodes |grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
Taints: k=v1:PreferNoSchedule
Taints: k=v2:NoSchedule
Taints: <none>
Taints: <none>
Taints: <none>
容忍策略
● 容忍刚好与污点相反,某些时候我们需要在有污点的节点上运行Pod,这种无视污点标签的调度方式称为容忍
#配置容忍策略
spec:
toleratinos: #定义容忍策略
- operator: "Equal" #匹配方式,必选(Equal,Exists)
key: "k1" #设置键值对的key,为空代表任意键值对
value: "v1" #设置values的值
effect: "NoSchedule" #设置容忍的标签,为空代表所有污点标签
containers:
抢占与优先级
● 优先级是什么
○ 优先级表示一个Pod相当于其他Pod的重要性
● 优先级有什么用
○ 优先级可以先保证中重要的Pod被调度运行
● 如何使用优先级和抢占
○ 配置优先级类ProiorityClass
○ 创建Pod时为其设置对应的优先级
PriorityClass
● PriorityClass是一个全局资源对象,它定义了从优先级类名称到优先级整数值的映射。优先级在value字段中指定,可以设置小于10亿的整数值,值越大,优先级越高
● PriorityClass还有两个可选字段
○ globalDefault用于设置默认优先级状态,如果没有任何优先级设置Pod的优先级为零
○ description用于配置描述性信息,告诉用户优先级的用途
优先级策略:
● 非抢占优先:指的是在调度阶段进行调度分配,一旦容器调度完成就不可抢占,资源不足时,只能等待
● 抢占优先:强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占(删除)较低优先级的Pod的资源,来保证优先级Pod的运行
特权容器概述
● 什么是特权容器
○ 容器是通过名称空间技术隔离的,有时候我们执行一些应用服务,需要使用或修改敏感的系统信息,这时容器需要突破隔离限制,获取更高的权限,这类容器统称为特权容器
○ 运行特权容器会有一些安全风险,这种模式下运行容器对宿主机拥有root访问权限,可以突破隔离直接控制宿主机的资源配置