Kubernetes的污点和容忍(上篇)

简介: Kubernetes的污点和容忍(上篇)

背景


搭建了一个k8s(Kubernetes)的事件监听服务,监听事件之后对数据做处理。有天报了一个问题经调查是新版本的k8s集群添加会把unschedule等信息通过污点的方式反映。而这些污点是只有key没有value的。我的服务中只对value不会空的进行了处理就不对了。


发现这个问题,我跟leader解释了一下。解释的时候我就把k8s官方文档 拿出来。但是我当时只能给leader指一下是哪一行。现场翻译不能优雅的表达出来。


静儿是翻译出身的,很惭愧啊。所以今天把这篇文章笔译一下,也顺便加深一下理解。为避免篇幅过长,分成两篇。上篇是概念,下篇是使用场景。

 

译文


node(宿主机)的affinity,是pod(容器)用来关联到一组node的属性(不管是作为preference还是强需求)。污点是相反的,他们允许一个node排斥一组pod。


污点和容忍一起协作来确保pod不被调度到不合适的node上。一个或者多个污点如果被应用于一个node,这个标志着这个node不应该接收任何不容忍这个污点的pod。


容忍被应用于pod,允许这个pod被调度到相对应的污点上。


概念


添加一个污点到一个node上,使用kubectl taint。例如:


1112728-20190319075256799-588029923.png


在一个node上打上污点node1。污点有key「key」,value「value」,污点effect「NoSchedule」。


这意味着除非有相应的容忍,没有pod能够调度到node1上。想删除这个污点,可以执行下面的命令


1112728-20190319075318836-165792069.png


在PodSpec可以指定一个容忍到一个pod上。下面的两个容忍都能匹配上面node上的污点,因此带有下面任意一个容忍的pod都能调度到node1上。


1112728-20190319075345631-1189165703.png


一个匹配污点容忍的条件是:key相同、effect相同,并且满足 operator 是Exists(这时候不应该指定value)或者operator是Equal并且value相同。


注意:有两种特殊的场景


1.一个空的key,operator是Exists 匹配所有的key、value、effect。就是说容忍任何污点


1112728-20190319075358338-849166305.png


2. 一个空的effect 匹配所有的key为「key」的effect


1112728-20190319075417001-1164735214.png


上面的例子使用了effect=NoSchedule。也可以使用effect=PreferNoSchedule。这是一个preference或者soft版本的NoSchedule。系统会尽量避免将没有容忍的pod调度到这台node上,但是不是必须的。还有第三种effect叫NoExcute,一会儿讲。


一个node可以有多个污点,一个pod可以有多个node。k8s执行多个污点和容忍方法类似于过滤器:从node的所有污点开始,忽略pod所带的相应容忍,剩余不能被忽略的污点显式的作用到pod上。


注意:


  • 如果至少有一个不能被忽略的污点带有effect=NoSchedule,k8s就不会调度pod到这台node上。


  • 如果没有不能被忽略的污点带有effect=NoSchedule,但是至少有一个不能被忽略的污点带有effect=PreferNoShedule,这时候k8s会努力不要调度这个pod到这个node上。


  • 如果至少有一个不能被忽略的污点effect=NoExecute,这个已经在node上运行的pod会被从node上驱逐掉。没有运行在node的pod不能被调度到这个node上。


举个例子:如果一个node被打了下面的污点


1112728-20190319075437618-1036380975.png


1112728-20190319075437618-1036380975.png一个pod有两个容忍。


1112728-20190319075453840-382750429.png


在这种场景下,pod就不能被调度到这个node上。因为没有容忍能够匹配第三个污点。但是添加这个污点的时候,如果pod已经在这个node上运行了,这个pod不会被踢掉,仍然可以继续运行。因为第三个污点是这个pod唯一没有容忍的污点。


正常情况下,如果一个污点带有effect=NoExecute被添加到了这个node。那么不能容忍这个污点的所有pod就会立即被踢掉。而带有容忍标签的pod就不会踢掉。然而,一个带有effect=Noexecute的容忍可以指定一个tolerationSeconds来指定当这个污点被添加的时候在多长时间内不被踢掉。例如:


1112728-20190319075505909-923489324.png


意思是如果这个pod已经在有一个对应的污点上跑了。这个pod可以一直跑3600s后再被踢掉。如果这时候node的污点被移除了,这个pod就不会被踢掉。

 

总结


感悟


最近静儿发布代码的质量越来越高。在工作中也有了更大的灵活性。发现一个特别舒服的现象:我们leader从来路过我的工位不看我在干什么。这是基于一种信任:能进美团基础架构部的,都是有技术追求和职业素养的。另外也是基于一种理念和文化:活儿干好了管你在干什么呢。


技术人员没有上班时间和下班时间,有空就多为工作思考。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 调度 Perl
在K8S中,说下Pod污点与容忍的理解?
在K8S中,说下Pod污点与容忍的理解?
|
Kubernetes 调度 容器
在K8S中,内置的污点主要有哪些?
在K8S中,内置的污点主要有哪些?
|
Kubernetes 调度 开发者
在K8S中,如何理解Pod污点与容忍?
在K8S中,如何理解Pod污点与容忍?
|
运维 Kubernetes 调度
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
|
Kubernetes 应用服务中间件 调度
k8s-高级调度-污点容忍、亲和性调度
k8s-高级调度-污点容忍、亲和性调度
212 1
|
存储 Kubernetes 调度
K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(下)
本文全面探讨了Kubernetes集群中Pod的四种关键机制——Pod亲和性、污点(Taints)、容忍度(Tolerations)、生命周期以及健康探测,为读者提供了深入理解并有效应用这些特性的指南。
|
Kubernetes Cloud Native 调度
云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度
云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度
985 0
|
Kubernetes Cloud Native 调度
k8s学习-污点和容忍(概念、模版、创建、删除)
k8s学习-污点和容忍(概念、模版、创建、删除)
186 0
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
142 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。

推荐镜像

更多