Files
kuboard-press/learning/k8s-intermediate/config/priority-preemption.md
huanqing.shao ba09871630 optimization
2019-10-23 23:22:38 +08:00

3.8 KiB
Raw Permalink Blame History

vssueId, layout, description, meta
vssueId layout description meta
148 LearningLayout Kubernetes教程_通过Pod安全策略_您可以在更细的颗粒度上授权您的用户执行Pod的创建和更新的操作
name content
keywords Kubernetes 教程,Resource Quota,ResourceQuota

Pod 优先权

参考文档:Pod Priority and Preemption

FEATURE STATE Kubernetes v1.14 stable

Pod 中可以定义 优先级 priority,用于标识该 Pod 相对于其他 Pod 的重要程度。当存在 Pod 等待调度时(处于 Pending 状态调度器将尝试抢占preempt 或 驱逐 evict低优先级priority的 Pod以便调度 Pending 中的 Pod。

自 Kubernetes 1.9 开始Priority 也会对如下两个场景产生影响:

  • Pod 的调度顺序
  • 资源耗尽时,从节点上驱逐 Pod 的顺序

Pod 优先权priority and preemption的特性在 Kubernetes 1.11 中是 beta状态并默认激活在1.14 中是 GAGenerally Available 正式发布)状态。如下表所示:

Kubernetes Version Priority and Preemption State Enabled by default
1.8 alpha no
1.9 alpha no
1.10 alpha no
1.11 beta yes
1.14 stable yes

::: danger 警告 如果集群中的用户并不是全部可信,可能会出现一些恶意的用户,创建最高优先级的 Pod使得其他的 Pod 被驱逐或者不能正常调度。可以通过在 ResourceQuota 中指定 priority 来解决此问题。 :::

TOC

使用Pod优先权

在 Kubernetes v1.11 及以后的版本中参考下面的步骤启用Pod优先权Pod priority and preemption

  1. 添加一个或多个 PriorityClass
  2. 创建Pod时指定 priorityClassName 为其中一个 PriorityClass。通常在 Deployment/StatefulSet等 的 spec.template.spec.priorityClassName 中指定,而不是直接创建 Pod

如果你尝试过该特性之后,想要将其禁用,你必须在 API Server 和 Scheduler 的命令行启动参数中移除 PodPriority 参数,或者将其设置为 false。禁用该特性之后:

  • 已经创建的 Pod 将保留 priority 字段但是抢占行为preemption)被禁用了,且 priority 字段也将被忽略
  • 新创建的 Pod 将不能在设置 priorityClassName 字段

如何禁用 preemtion

preemption英文愿意为先买权此处可以理解为抢占行为

::: tip 在 Kubernetes 1.12+,当前集群资源不足时,关键的 Pod 将依赖于抢占权才能被调度。因此,并不建议禁用 preemption :::

::: tip 在 Kubernetes 1.15+,如果 NonPreemptingPriority 被启用了PriorityClass 可以设置为 preemptionPolicy: Never,此时,该 PriorityClass 的所有 Pod 将不会抢占preempty其他 Pod 的资源 :::

在 Kubernetes 1.11+preemption 由 kube-scheduler 的参数 disablePreemption 设置,默认为 false。如果在您已经知晓上面的提示的情况下,仍然要禁用 preemption可以将 disablePreemption 参数设置为 true

该参数需要通过 YAML 文件配置,而不能通过命令行参数设定。示例配置如下所示:

apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
algorithmSource:
  provider: DefaultProvider

...

disablePreemption: true

PriorityClass

待续 ...

Pod priority