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

(一)  核心概念

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

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

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

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

(二)  POD调度器配置变化介绍

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

Kubernetes1.6新特性:POD高级调度-POD调度器配置变化_第1张图片

在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版本,那么就无法使用annotationsscheduler.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的目的,文章里面就不详细介绍了。

 

你可能感兴趣的:(容器)