K8S亲和性,反亲和性,及污点

2024-01-10 06:20
文章标签 云原生 k8s 亲和性 污点

本文主要是介绍K8S亲和性,反亲和性,及污点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

nodeName:硬匹配,不走调度策略

nodeSelector:根据节点的标签选择,会走调度的算法

只要是走调度算法,在不满足预算策略的情况下,所有pod都是pending

node节点的亲和性:

硬策略:必须满足的条件。匹配原则也是根据节点的标签

软策略:尽量满足你的要求,而不是一定满足

拓扑域:k8s集群节点当中的一个组织结构,可以根据节点的物理关系或者逻辑关系进行

可以用来表示节点之间的空间关系,网络关系或者其他类型的关系

标签。主机标签

pod

node01 node02 node03

app1 app2 app3

pod的亲和性和反亲和性

调度策略

匹配标签

操作符

拓扑域

node的亲和性

主机标签

In Notin exists DoesNotExist Gt Lt

不支持

pod的亲和性

pod的标签

In Notin exists DoesNotExit

支持

pod的反亲和性

pod的标签

In Notin exists DoesNotExit

支持

注意点:

1、pod的亲和性策略,在配置时,必须要加上拓扑域的关键字topologykey,指向的是节点标签

2、pod亲和性的策略也分为硬策略和软策略。

3、pod亲和性的notIn可以替代反亲和性

4、pod亲和性只是为了把相关联的pod部署在同一节点。lnmp

污点和容忍可以配合node的亲和性一起使用

污点:是node的调度机制 。不是pod

被设为污点的节点,不会部署pod

污点和亲和性相反,亲和性是尽量或者一定选择,污点则是一定不被选择

污点的节点一定不被选择么?

taint三种:

1、Noschedule:K8S不会将pod调度到这个节点上

2、PreferNoschedule:如果污点类型是这个,那么只是尽量避免把pod布置在该节点上

3、NoExecute:如果污点类型是他,那么k8s将会把该节点上的pod全部驱逐出去,而且也不会调度

基于控制器创建的pod虽然被驱逐,但是会在其他节点重新部署

自主pod会被直接杀死

注意点:节点服务器需要维护的,服务器关机,节点上的pod将会失效。在工作中我们主要部署Pod的方式控制器部署,deployment最多的,一旦节点设置为驱逐,控制器创建的pod会在其他节点重新部署

所有的pod都会驱逐,跟命名空间无关,所有的一切都会被驱逐

不论你的创建方式是什么,都会被驱逐

系统集群组件不会被驱逐

容忍:

即使节点上设置了污点,有了容忍机制,依然可以在设置为污点的节点上部署pod

特殊情况: NoExecute依然可以部署pod,但是有生命周期,时间一到,pod会被销毁,重新拉起

生命周期结束之后会驱逐一部分pod到其他节点,有的节点还是会保留在这个污点节点上

      tolerations:- key: keyoperator: Exists 
指定key的值,指标节点的标签值,但是不指定污点的类型
那么所有节点上只要包含了这个指定的标签名,可以容忍所有的污点tolerations:- operator: Exists - effect: NoSchedule
没有key,不匹配节点标签,他会容忍所有污点,但是类型是所指定的类型    

node的亲和性

pod的亲和性和反亲和性

污点和容忍

如何选择node节点来部署pod

选择一个我期望的节点来部署pod

多个master节点:

kubectl taint node master节点名称 node-role.kubernetes.io/master=PreferNoSchedule

尽量不往master节点上部署pod,但是不是一定的,防止资源浪费。自定义一个标签。

业务维护:

node02需要维护两个小时

但是这个节点还有业务pod在运行

就需要把这个节点的污点设置为:NoExwcute

部署pod一般都是使用deployment部署的Pod,会在其他节点重新生成,重新部署

自主式的Pod,会被删除,杀死

一旦节点恢复,一定要把污点去除

cordon和drain

cordon:可以直接把节点标记为不可用状态

drain:排水,把该节点下的pod全部转移到node节点上运行。

1、一旦执行了drain,node被执行的节点,会变成不可调度状态

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

node亲和性

pod的亲和性,反亲和性

污点:

NoExecute

cordon 可以直接用命令行来设置

drain

--ignore-daemonsets:daemonsets部署的一般都是重要的后台运行的系统pod,所以不动

重要的就是node亲和性,pod亲和性,反亲和性,污点:NoExcute

都有软策略和硬策略,针对亲和和反亲和性来的

如何部署pod是比较重要的集群资源的调度机制,合理的配置pod的调度机制可以使资源最大化利用

这篇关于K8S亲和性,反亲和性,及污点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589848

相关文章

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4

用Cri-O,Sealos CLI,Kubeadm方式部署K8s高可用集群

3.6 Cri-O方式部署K8s集群 注意:基于Kubernetes基础环境 3.6.1 所有节点安装配置cri-o [root@k8s-all ~]# VERSION=1.28[root@k8s-all ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensu

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux  [root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.servi

k8s 存储(PV、PVC、SC、本地存储、NFS)

存储持久化相关三个概念: PersistentVolume (PV) 是对具体存储资源的描述,比如NFS、Ceph、GlusterFS等,通过PV可以访问到具体的存储资源;PersistentVolumeClaim (PVC) Pod想要使用具体的存储资源需要对接到PVC,PVC里会定义好Pod希望使用存储的属性,通过PVC再去申请合适的存储资源(PV),匹配到合适的资源后PVC和PV会进行绑定

CPU亲和性设置 代码示例 sched_setaffinity sched_getaffinity

视频教程在这: cpu亲和性设置,NCCL,sched_setaffinity sched_getaffinity,CPU_ZERO、SET、ISSET、linux_哔哩哔哩_bilibili 一、CPU亲和性简介 CPU亲和性(CPU Affinity)设置是操作系统中一个重要的性能优化手段,它允许程序或进程被绑定到特定的CPU核心上运行。这样做的好处包括减少缓存未命中、降低线程迁移(co

k8s调度(pod亲和、反亲和、污点、容忍度)

pod亲和性 针对对象为Pod,目的是实现,新建Pod和目标Pod调度到一起,在同一个Node上。 示例: apiVersion: v1kind: Podmetadata:name: testpod01labels:app: myapp01env: test1spec:containers:- name: testpod01image: nginx:1.23.2---apiVersio