pod的亲和性和反亲和性
调度策略: 匹配标签 操作符 拓扑域 调度目标
node的亲和性 主机标签 In Notin exists doesexists Gt Lt 不支持 指定主机
pod的亲和性 pod的标签 In Notin exists doesexists 支持 pod和指定标签的pod部署在同一拓扑域
pod的反亲和性 pod的标签 In Notin exists doesexists 支持 pod和指定标签的pod部署在不同拓扑域
拓扑域:k8s集群节点当中的一个组织结构,可以根据节点的物理关系或者逻辑关系进行划分,可以用来表示节点之间的空间关系,网络关系或者其他类型的关系
反亲和性:
注意点:
1、pod的亲和性策略,在配置时,必须要加上拓扑域的关键字topologykey,指向的是节点标签
2、pod亲和性的策略分为硬策略和软策略
3、pod亲和性的notln可以替代反亲和性
4、pod亲和性主要是为了相关联的pod部署在同一节点。lnmp
你在进行部署的时候怎么考虑node节点?
污点和容忍可以配合node的亲和性一块使用
污点:是node的调度机制,不是pod
被设为污点的节点,不会部署pod
污点和亲和性相反,亲和性是尽量选择和一定选择
污点的节点一定不被选择?
taint三种:
1、NoSchedule:k8s不会把pod调度到这个节点上
2、PreferNoschedule:如果污点类型他,尽量避免把pod部署在该节点上,不是一定(master节点的污点就是这个)
3、NoExecute:如果污点类型是他,k8s将会把该节点上的pod驱逐出去,而且也不会调度到这个节点
基于控制器创建的pod,虽然被驱逐,会在其他节点重新部署
自主pod会被直接杀死
注意点:节点服务器需要维护的,服务器关机,节点上pod将会失效。在工作中我们主要部署pod的方式控制器部署。deployment最多的,一旦节点设置为驱逐,控制器创建的pod会在其他节点重新部署
所有的pod都会被驱逐,跟命名空间无关,所有的一切都会被驱逐
不论你的创建方式是什么,都会被驱逐
系统集群组件不会被驱逐*
查看污点:kubectl describe nodes master01 | grep -i taints
设置污点:kubectl taint node node01 key=1:NoSchedule
去除污点:kubectl taint node01 key:NoSchedule-
容忍:即使节点上设置了污点,有了容忍机制,依然可以部署pod
特殊情况:NoExecute依然可以部署pod,但是有生命周期,时间一到,pod会被销毁,生命周期结束之后,会被驱逐一部分pod到其他节点,有的节点还是会保留在污点节点上
该节点维护完毕,测试以下节点的工作是否正常
加上容忍时间
tolerations:
-key:key
operator:Exists
指定key的值,指标节点的标签值,但是不指定污点的类型,那么所有节点上只要包含了这个指定的标签名,可以容忍所有的污点
node的亲和性
pod的亲和性和反亲和性
污点和容忍
如何选择node节点部署pod
选择一个期望的节点来部署pod
一旦节点恢复,一定要把污点去除
cordon和drain
cordon:可以直接把节点标记为不可用状态
drain:排水,把该节点下的pod全部转移到其他的node节点上运行
1、一旦执行drain,被执行的节点会变成不可调度状态
2、会驱逐该节点上的所有的pod
kubectl drain node02 --ignore-daemonsets --delete-local-data --force
drain:排水,标记node节点为不可调度,然后驱逐pod
--ignore-daemonsets:忽视daemonsets部署的pod,daemonsets部署的pod还在节点
--delete-local-data:有本地挂载卷的pod会被强制杀死
--force:强制释放不是控制器管理的pod
还是如何来管理和部署pod
node亲和性
pod的亲和性和反亲和性
污点:
NoExecute