Kubernetes1.6新特性:POD高级调度-污点和容忍特性/报告节点问题特性

本文介绍了Kubernetes 1.6版本中关于Pod的高级调度特性,重点关注污点和容忍(Taints and Tolerations)以及报告节点问题特性。污点用于阻止Pod调度到特定节点,而容忍则允许Pod在能容忍污点的节点上运行。此外,1.6版还引入了报告节点问题的α特性,允许在特定问题发生时自动处理Pod的撤离。
摘要由CSDN通过智能技术生成

(一)  核心概念

Pod是kubernetes中的核心概念,kubernetes对于Pod的管理也就是对Pod生命周期的管理以及对Pod进行调度管理。

Kubernetes早期版本使用系统默认调度器来对Pod进行统一调度管理,在1.2版本中增加了多个调度器特性,多个调度器可以并行调度不同的Pod,并且可以允许用户自己定义新的调度器并以插件的方式供kubernetes使用。

在1.6版本中对POD调度进行了增强,这里称之为“高级调度”,涉及到多个调度器配置变化、节点亲和性/反亲和性特性、Pod亲和性/反亲和性特性、污点和容忍特性、报告节点问题特性。

在1.6版本这些“高级调度”特性中,多个调度器配置变化、节点亲和性/反亲和性特性、Pod亲和性/反亲和性特性、污点和容忍特性,这四个特性属于β特性,可以报告节点问题特性属于α特性,所以大家在使用的时候应该注意。

(二)  污点和容忍特性(Taints and tolerations)和报告节点问题特性介绍

我们先来看看1.6版本中Pod相关的几个核心结构体:


在1.6版本中,PodSpec结构体中新增了四个属性,分别是AutomountServiceAccountToken、Affinity、SchedulerName、Tolerations。其中Affinity属性对应结构体Affinity,负责节点亲和性/反亲和性特性和Pod亲和性/反亲和性特性;Tolerations属性对应结构体Toleration,负责污点和容忍特性以及可以给每个Pod单独配置逃离行为特性;SchedulerName属性就是这篇文章要介绍的多个调度器配置变化。其中结构体Affinity和结构体Toleration在1.5版本中已经存在了,但是并不是通过PodSpec结构体中Affinity和Tolerations两个属性进行关联的。

1、污点和容忍特性介绍

我们先来看看1.5版本中,是如何配置污点和容忍特性的:

annotations:

  scheduler.alpha.kubernetes.io/tolerations:……

我们在看看现在1.6版本中,是如何配置节点亲和性/反亲和性的:

spec:

  tolerations:……

通过上面两个例子可以看出来,多个调度器这个特性从α版本变成β版本后,由原先使用annotations方式定义Pod变成了直接在spec中定义Pod。

节点亲和性的作用是让Pod部署在相关联的节点上,但是污点(Taints)的含义是相反的,污点(Taints)用来让节点不满足Pod要求。

污点和容忍(Taints and tolerations)在一起工作,目的是确保Pod不会被调度到不正确的节点上。通过给节点设置污点,可以标识出这些节点不接受任何Pod,这些Pod不能容忍任何污点。也可以通过给Pod设置容忍,让这些Pod部署到能够容忍污点的节点上。

2、报告节点问题特性介绍

在1.6中新增加了一个α特性,当把参数TaintBasedEvictions设置成true的时候,表示启动这个α特性。当启动了这个α特性后,污点会被自动增加到所有节点上,同时普通的Pod逃离逻辑会被设置成失效状态。目前这个α特性只支持node unreachable和node not ready两种节点问题。

对于1.6中Toleration结构体:


可以看到在1.6版本中新增加了一个属性TolerationSeconds,通过这个属性并且结合上述α特性,就可以给每个Pod单独配置逃离行为。

下面的例子展示了系统要进行一段时间网络维护,在网络维护时间100分钟内,不允许Pod进行逃离。

tolerations:

- key:"node.alpha.kubernetes.io/unreachable"

 operator: "Exists"

 effect: "NoExecute"

 tolerationSeconds: 6000

 

(三)  污点和容忍使用示例

1、给节点配置污点:

kubectl taint nodes node1key=value:NoSchedule

上面的例子给节点node1配置了一个污点,污点有一个key,对应的值是value,这个污点作用于NoSchedule。这表示没有Pod会被调度到node1节点上,除非Pod配置了容忍,而且这些容忍的配置同node1上污点配置相匹配。

下面配置的Pod可以被调度到node1节点上:

tolerations:

- key: "key"

 operator: "Equal"

 value: "value"

 effect: "NoSchedule"

下面是通过另一种方式配置的Pod,也可以被调度到node1节点上:

tolerations:

- key: "key"

 operator: "Exists"

  effect:"NoSchedule"

对于torelations配置,如果不设置operator具体的取值,那么系统默认设置成“Equal”。

2、下面是两种特殊的配置方法:

tolerations:

- operator: "Exists"

这个配置表示匹配所有的key、value和effect,也就是意味着Pod可以容忍任何污点。

tolerations:

- key: "key"

 operator: "Exists"

这个配置表示Pod匹配所有effect。

3、effect的取值

effect的取值包括NoSchedule、PreferNoSchedule和NoExecute三个值。其中每个取值的含义如下:

1)       NoSchedule:除非Pod配置了容忍,否则不允许Pod被调度到节点上。需要注意的是:kubernetes允许通过Kubelet命令绕过调度器,直接在这些节点上启动Pod,即使这些Pod没有配置容忍。Kubernetes允许已经运行的Pod继续运行,及时这些Pod不满足容忍条件。

2)       PreferNoSchedule:这个配置相比NoSchedule来说,在功能作用上是一样的,只不过不是强制执行的,只是参考执行。

3)       NoExecute:对已经运行的Pod,当这些Pod不容忍节点上的污点时,强制逃离到其他满足容忍条件的节点上。如果配置了NoExecute,那么可以选择是否配置tolerationSeconds参数。也就是说Pod会在tolerationSeconds时间过后进行逃离。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值