From ec405cce3c359740966d075aa9f6025a79e2ec6b Mon Sep 17 00:00:00 2001 From: Mengjiao Liu Date: Mon, 16 Aug 2021 19:20:10 +0800 Subject: [PATCH] [zh] Concept files to sync for 1.22 - (9) Scheduling --- .../scheduling-eviction/assign-pod-node.md | 8 +- .../scheduling-eviction/eviction-policy.md | 47 ----------- .../scheduling-eviction/kube-scheduler.md | 6 +- .../pod-priority-preemption.md | 27 ++++--- .../resource-bin-packing.md | 80 +++++++++++-------- .../scheduler-perf-tuning.md | 8 +- .../scheduling-framework.md | 2 +- .../taint-and-toleration.md | 50 +++++++++--- 8 files changed, 111 insertions(+), 117 deletions(-) delete mode 100644 content/zh/docs/concepts/scheduling-eviction/eviction-policy.md diff --git a/content/zh/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/zh/docs/concepts/scheduling-eviction/assign-pod-node.md index 7f93a31186375..ca16706ff23a9 100644 --- a/content/zh/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/zh/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -579,7 +579,7 @@ must be satisfied for the pod to be scheduled onto a node. --> #### 名字空间选择算符 -{{< feature-state for_k8s_version="v1.21" state="alpha" >}} +{{< feature-state for_k8s_version="v1.22" state="beta" >}} -此功能特性是 Alpha 版本的,默认是被禁用的。你可以通过针对 kube-apiserver 和 +此功能特性是 Beta 版本的,默认是被启用的。你可以通过针对 kube-apiserver 和 kube-scheduler 设置 [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) -`PodAffinityNamespaceSelector` 来启用此特性。 +`PodAffinityNamespaceSelector` 来禁用此特性。 - - - -本页提供 Kubernetes 驱逐策略的概览。 - - - - -## 驱逐策略 {#eviction-policy} - -{{< glossary_tooltip text="Kubelet" term_id="kubelet" >}} 主动监测和防止 -计算资源的全面短缺。在资源短缺时,`kubelet` 可以主动地结束一个或多个 Pod -以回收短缺的资源。 -当 `kubelet` 结束一个 Pod 时,它将终止 Pod 中的所有容器,而 Pod 的 `Phase` -将变为 `Failed`。 -如果被驱逐的 Pod 由 Deployment 管理,这个 Deployment 会创建另一个 Pod 给 -Kubernetes 来调度。 - -## {{% heading "whatsnext" %}} - - -- 阅读[配置资源不足的处理](/zh/docs/tasks/administer-cluster/out-of-resource/), - 进一步了解驱逐信号和阈值。 - diff --git a/content/zh/docs/concepts/scheduling-eviction/kube-scheduler.md b/content/zh/docs/concepts/scheduling-eviction/kube-scheduler.md index 65306db584b0b..c950fb1e2097f 100644 --- a/content/zh/docs/concepts/scheduling-eviction/kube-scheduler.md +++ b/content/zh/docs/concepts/scheduling-eviction/kube-scheduler.md @@ -95,7 +95,7 @@ the API server about this decision in a process called _binding_. kube-apiserver,这个过程叫做 _绑定_。 -如果悬决 Pod 与节点上的一个或多个较低优先级 Pod 具有 Pod 间亲和性, +如果悬决 Pod 与节点上的一个或多个较低优先级 Pod 具有 Pod 间{{< glossary_tooltip text="亲和性" term_id="affinity" >}}, 则在没有这些较低优先级 Pod 的情况下,无法满足 Pod 间亲和性规则。 在这种情况下,调度程序不会抢占节点上的任何 Pod。 相反,它寻找另一个节点。调度程序可能会找到合适的节点, @@ -620,7 +620,7 @@ Pod 优先级和 {{}} 或者最低优先级的 Pod 受 PodDisruptionBudget 保护时,才会考虑优先级较高的 Pod。 kubelet 使用优先级来确定 -[资源不足时驱逐](/zh/docs/tasks/administer-cluster/out-of-resource/) Pod 的顺序。 +[节点压力驱逐](/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/) Pod 的顺序。 你可以使用 QoS 类来估计 Pod 最有可能被驱逐的顺序。kubelet 根据以下因素对 Pod 进行驱逐排名: 1. 对紧俏资源的使用是否超过请求值 1. Pod 优先级 1. 相对于请求的资源使用量 -有关更多详细信息,请参阅[驱逐最终用户的 Pod](/zh/docs/tasks/administer-cluster/out-of-resource/#evicting-end-user-pods)。 +有关更多详细信息,请参阅 +[kubelet 驱逐时 Pod 的选择](/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/#pod-selection-for-kubelet-eviction)。 -当某 Pod 的资源用量未超过其请求时,kubelet 资源不足驱逐不会驱逐该 Pod。 +当某 Pod 的资源用量未超过其请求时,kubelet 节点压力驱逐不会驱逐该 Pod。 如果优先级较低的 Pod 没有超过其请求,则不会被驱逐。 另一个优先级高于其请求的 Pod 可能会被驱逐。 diff --git a/content/zh/docs/concepts/scheduling-eviction/resource-bin-packing.md b/content/zh/docs/concepts/scheduling-eviction/resource-bin-packing.md index b8c097e5dfca4..08eb73003ab06 100644 --- a/content/zh/docs/concepts/scheduling-eviction/resource-bin-packing.md +++ b/content/zh/docs/concepts/scheduling-eviction/resource-bin-packing.md @@ -32,60 +32,70 @@ The kube-scheduler can be configured to enable bin packing of resources along wi ## 使用 RequestedToCapacityRatioResourceAllocation 启用装箱 -在 Kubernetes 1.15 之前,Kube-scheduler 通常允许根据对主要资源(如 CPU 和内存) -的请求数量和可用容量 之比率对节点评分。 -Kubernetes 1.16 在优先级函数中添加了一个新参数,该参数允许用户指定资源以及每类资源的权重, +Kubernetes 允许用户指定资源以及每类资源的权重, 以便根据请求数量与可用容量之比率为节点评分。 这就使得用户可以通过使用适当的参数来对扩展资源执行装箱操作,从而提高了大型集群中稀缺资源的利用率。 `RequestedToCapacityRatioResourceAllocation` 优先级函数的行为可以通过名为 -`requestedToCapacityRatioArguments` 的配置选项进行控制。 +`RequestedToCapacityRatioArgs` 的配置选项进行控制。 该标志由两个参数 `shape` 和 `resources` 组成。 -`shape` 允许用户根据 `utilization` 和 `score` 值将函数调整为最少请求 -(least requested)或 -最多请求(most requested)计算。 +`shape` 允许用户根据 `utilization` 和 `score` 值将函数调整为 +最少请求(least requested)或最多请求(most requested)计算。 `resources` 包含由 `name` 和 `weight` 组成,`name` 指定评分时要考虑的资源, `weight` 指定每种资源的权重。 以下是一个配置示例,该配置将 `requestedToCapacityRatioArguments` 设置为对扩展资源 `intel.com/foo` 和 `intel.com/bar` 的装箱行为 -```json -{ - "kind": "Policy", - "apiVersion": "v1", - ... - "priorities": [ - ... - { - "name": "RequestedToCapacityRatioPriority", - "weight": 2, - "argument": { - "requestedToCapacityRatioArguments": { - "shape": [ - {"utilization": 0, "score": 0}, - {"utilization": 100, "score": 10} - ], - "resources": [ - {"name": "intel.com/foo", "weight": 3}, - {"name": "intel.com/bar", "weight": 5} - ] - } - } - } - ], -} +```yaml +apiVersion: kubescheduler.config.k8s.io/v1beta1 +kind: KubeSchedulerConfiguration +profiles: +# ... + pluginConfig: + - name: RequestedToCapacityRatio + args: + shape: + - utilization: 0 + score: 10 + - utilization: 100 + score: 0 + resources: + - name: intel.com/foo + weight: 3 + - name: intel.com/bar + weight: 5 ``` + +使用 kube-scheduler 标志 `--config=/path/to/config/file` +引用 `KubeSchedulerConfiguration` 文件将配置传递给调度器。 + diff --git a/content/zh/docs/concepts/scheduling-eviction/scheduler-perf-tuning.md b/content/zh/docs/concepts/scheduling-eviction/scheduler-perf-tuning.md index 8a43385d1337a..398a06f18d5e4 100644 --- a/content/zh/docs/concepts/scheduling-eviction/scheduler-perf-tuning.md +++ b/content/zh/docs/concepts/scheduling-eviction/scheduler-perf-tuning.md @@ -81,11 +81,11 @@ kube-scheduler 的表现等价于设置值为 100。 -要修改这个值,先编辑 [kube-scheduler 的配置文件](/zh/docs/reference/config-api/kube-scheduler-config.v1beta1/) +要修改这个值,先编辑 [kube-scheduler 的配置文件](/zh/docs/reference/config-api/kube-scheduler-config.v1beta2/) 然后重启调度器。 大多数情况下,这个配置文件是 `/etc/kubernetes/config/kube-scheduler.yaml`。 @@ -298,6 +298,6 @@ After going over all the Nodes, it goes back to Node 1. ## {{% heading "whatsnext" %}} - + -* 参见 [kube-scheduler 配置参考 (v1beta1)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta1/) +* 参见 [kube-scheduler 配置参考 (v1beta1)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta2/) diff --git a/content/zh/docs/concepts/scheduling-eviction/scheduling-framework.md b/content/zh/docs/concepts/scheduling-eviction/scheduling-framework.md index 1107c195656d9..303b707a2fe37 100644 --- a/content/zh/docs/concepts/scheduling-eviction/scheduling-framework.md +++ b/content/zh/docs/concepts/scheduling-eviction/scheduling-framework.md @@ -16,7 +16,7 @@ weight: 90 -{{< feature-state for_k8s_version="1.15" state="alpha" >}} +{{< feature-state for_k8s_version="1.19" state="stable" >}} + +控制平面使用节点{{}}自动创建 +与[节点状况](/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/#node-conditions)对应的带有 `NoSchedule` 效应的污点。 + +调度器在进行调度时检查污点,而不是检查节点状况。这确保节点状况不会直接影响调度。 +例如,如果 `DiskPressure` 节点状况处于活跃状态,则控制平面 +添加 `node.kubernetes.io/disk-pressure` 污点并且不会调度新的 pod +到受影响的节点。如果 `MemoryPressure` 节点状况处于活跃状态,则 +控制平面添加 `node.kubernetes.io/memory-pressure` 污点。 + + + +对于新创建的 Pod,可以通过添加相应的 Pod 容忍度来忽略节点状况。 +控制平面还在具有除 `BestEffort` 之外的 {{}}的 pod 上 +添加 `node.kubernetes.io/memory-pressure` 容忍度。 +这是因为 Kubernetes 将 `Guaranteed` 或 `Burstable` QoS 类中的 Pod(甚至没有设置内存请求的 Pod) +视为能够应对内存压力,而新创建的 `BestEffort` Pod 不会被调度到受影响的节点上。 + + -Node 生命周期控制器会自动创建与 Node 条件相对应的带有 `NoSchedule` 效应的污点。 -同样,调度器不检查节点条件,而是检查节点污点。这确保了节点条件不会影响调度到节点上的内容。 -用户可以通过添加适当的 Pod 容忍度来选择忽略某些 Node 的问题(表示为 Node 的调度条件)。 DaemonSet 控制器自动为所有守护进程添加如下 `NoSchedule` 容忍度以防 DaemonSet 崩溃: @@ -512,8 +542,8 @@ arbitrary tolerations to DaemonSets. ## {{% heading "whatsnext" %}} -* 阅读[资源耗尽的处理](/zh/docs/tasks/administer-cluster/out-of-resource/),以及如何配置其行为 -* 阅读 [Pod 优先级](/zh/docs/concepts/configuration/pod-priority-preemption/) +* 阅读[节点压力驱逐](/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/),以及如何配置其行为 +* 阅读 [Pod 优先级](/zh/docs/concepts/scheduling-eviction/pod-priority-preemption/)