您的位置:首页 > 其它

Kubernetes1.6新特性:POD高级调度-POD调度器配置变化

2017-06-01 08:32 786 查看
(一)  核心概念
Pod是kubernetes中的核心概念,kubernetes对于Pod的管理也就是对Pod生命周期的管理以及对Pod进行调度管理。
Kubernetes早期版本使用系统默认调度器来对Pod进行统一调度管理,在1.2版本中增加了多个调度器特性,多个调度器可以并行调度不同的Pod,并且可以允许用户自己定义新的调度器并以插件的方式供kubernetes使用。
在1.6版本中对POD调度进行了增强,这里称之为“高级调度”,涉及到多个调度器配置变化、节点亲和性/反亲和性特性、Pod亲和性/反亲和性特性、污点和容忍特性、报告节点问题特性。
在1.6版本这些“高级调度”特性中,多个调度器配置变化、节点亲和性/反亲和性特性、Pod亲和性/反亲和性特性、污点和容忍特性,这四个特性属于β特性,报告节点问题特性属于α特性,所以大家在使用的时候应该注意。
(二)  POD调度器配置变化介绍
我们先来看看1.6版本中Pod相关的几个核心结构体:



在1.6版本中,PodSpec结构体中新增了四个属性,分别是AutomountServiceAccountToken、Affinity、SchedulerName、Tolerations。其中Affinity属性对应结构体Affinity,负责节点亲和性/反亲和性特性和Pod亲和性/反亲和性特性;Tolerations属性对应结构体Toleration,负责污点和容忍特性;SchedulerName属性就是这篇文章要介绍的多个调度器配置变化。其中结构体Affinity和结构体Toleration在1.5版本中已经存在了,但是并不是通过PodSpec结构体中Affinity和Tolerations两个属性进行关联的。
我们先来看看1.5版本中,是如何配置多个调度器的:annotations:

scheduler.alpha.kubernetes.io/name: my-scheduler
我们在看看现在1.6版本中,是如何配置多个调度器的:spec:

schedulerName: my-scheduler
通过上面两个例子可以看出来,多个调度器这个特性从α版本变成β版本后,由原先使用annotations方式定义Pod变成了直接在spec中定义Pod。
需要注意的是,一旦你使用的是1.6版本,那么就无法使用annotations中scheduler.alpha.kubernetes.io/name来配置多个调度器的,也就是说scheduler.alpha.kubernetes.io/name这个属性在1.6中是无法使用的,只能使用Pod spec中的schedulerName属性来进行多调度器配置。
(三)  配置多个调度器使用示例
1)       定义第一个Pod,使用默认调度器apiVersion: v1

kind: Pod

metadata:

name: annotation-default-scheduler

labels:

name: multischeduler-example

spec:

schedulerName: default-scheduler

containers:

-name: pod-with-default-annotation-container

image: gcr.io/google_containers/pause:2.0
2)       定义第二个Pod,使用自定义调度器apiVersion:v1

kind:Pod

metadata:

name: annotation-second-scheduler

labels:

name: multischeduler-example

spec:

schedulerName: my-scheduler

containers:

- name: pod-with-second-annotation-container

image: gcr.io/google_containers/pause:2.0
这里面我们需要根据自己需要自定义一个调度器my-scheduler,用它来完成我们实现多个调度器同时调度管理不同Pod的目的,文章里面就不详细介绍了。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: