Updating Windows intro and resource management pages (#34083)
* Updating some Windows docs pages including: - Fixinig heading levels for /docs/concepts/windows/intro.md - Misc updates to /docs/concepts/windows/intro.ms - Updates to /docs/concepts/configuration/windows-resource-management.md for accuracy Signed-off-by: Mark Rossetti <marosset@microsoft.com> * Apply suggestions from code review Co-authored-by: Qiming Teng <tengqm@outlook.com> Co-authored-by: Tim Bannister <tim@scalefactory.com> Co-authored-by: divya-mohan0209 <divya.mohan0209@gmail.com> Co-authored-by: Qiming Teng <tengqm@outlook.com> Co-authored-by: Tim Bannister <tim@scalefactory.com> Co-authored-by: divya-mohan0209 <divya.mohan0209@gmail.com>
This commit is contained in:
@@ -32,52 +32,48 @@ host, and thus privileged containers are not available on Windows.
|
||||
Containers cannot assume an identity from the host because the Security Account Manager
|
||||
(SAM) is separate.
|
||||
|
||||
## Memory reservations {#resource-management-memory}
|
||||
## Memory management {#resource-management-memory}
|
||||
|
||||
Windows does not have an out-of-memory process killer as Linux does. Windows always
|
||||
treats all user-mode memory allocations as virtual, and pagefiles are mandatory.
|
||||
|
||||
Windows nodes do not overcommit memory for processes running in containers. The
|
||||
Windows nodes do not overcommit memory for processes. The
|
||||
net effect is that Windows won't reach out of memory conditions the same way Linux
|
||||
does, and processes page to disk instead of being subject to out of memory (OOM)
|
||||
termination. If memory is over-provisioned and all physical memory is exhausted,
|
||||
then paging can slow down performance.
|
||||
|
||||
You can place bounds on memory use for workloads using the kubelet
|
||||
parameters `--kubelet-reserve` and/or `--system-reserve`; these account
|
||||
for memory usage on the node (outside of containers), and reduce
|
||||
[NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).
|
||||
As you deploy workloads, set resource limits on containers. This also subtracts from
|
||||
`NodeAllocatable` and prevents the scheduler from adding more pods once a node is full.
|
||||
## CPU management {#resource-management-cpu}
|
||||
|
||||
{{< note >}}
|
||||
When you set memory resource limits for Windows containers, you should either set a
|
||||
limit and leave the memory request unspecified, or set the request equal to the limit.
|
||||
{{< /note >}}
|
||||
Windows can limit the amount of CPU time allocated for different processes but cannot
|
||||
guarantee a minimum amount of CPU time.
|
||||
|
||||
On Windows, good practice to avoid over-provisioning is to configure the kubelet
|
||||
with a system reserved memory of at least 2GiB to account for Windows, Kubernetes
|
||||
and container runtime overheads.
|
||||
|
||||
## CPU reservations {#resource-management-cpu}
|
||||
|
||||
To account for CPU use by the operating system, the container runtime, and by
|
||||
Kubernetes host processes such as the kubelet, you can (and should) reserve a
|
||||
percentage of total CPU. You should determine this CPU reservation taking account of
|
||||
to the number of CPU cores available on the node. To decide on the CPU percentage to
|
||||
reserve, identify the maximum pod density for each node and monitor the CPU usage of
|
||||
the system services running there, then choose a value that meets your workload needs.
|
||||
|
||||
You can place bounds on CPU usage for workloads using the
|
||||
kubelet parameters `--kubelet-reserve` and/or `--system-reserve` to
|
||||
account for CPU usage on the node (outside of containers).
|
||||
This reduces `NodeAllocatable`.
|
||||
The cluster-wide scheduler then takes this reservation into account when determining
|
||||
pod placement.
|
||||
|
||||
On Windows, the kubelet supports a command-line flag to set the priority of the
|
||||
On Windows, the kubelet supports a command-line flag to set the
|
||||
[scheduling priority](https://docs.microsoft.com/windows/win32/procthread/scheduling-priorities) of the
|
||||
kubelet process: `--windows-priorityclass`. This flag allows the kubelet process to get
|
||||
more CPU time slices when compared to other processes running on the Windows host.
|
||||
More information on the allowable values and their meaning is available at
|
||||
[Windows Priority Classes](https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities#priority-class).
|
||||
To ensure that running Pods do not starve the kubelet of CPU cycles, set this flag to `ABOVE_NORMAL_PRIORITY_CLASS` or above.
|
||||
|
||||
## Resource reservation {#resource-reservation}
|
||||
|
||||
To account for memory and CPU used by the operating system, the container runtime, and by
|
||||
Kubernetes host processes such as the kubelet, you can (and should) reserve
|
||||
memory and CPU resources with the `--kube-reserved` and/or `--system-reserved` kubelet flags.
|
||||
On Windows these values are only used to calculate the node's
|
||||
[allocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable) resources.
|
||||
|
||||
{{< caution >}}
|
||||
As you deploy workloads, set resource memory and CPU limits on containers.
|
||||
This also subtracts from `NodeAllocatable` and helps the cluster-wide scheduler in determining which pods to place on which nodes.
|
||||
|
||||
Scheduling pods without limits may over-provision the Windows nodes and in extreme
|
||||
cases can cause the nodes to become unhealthy.
|
||||
{{< /caution >}}
|
||||
|
||||
On Windows, a good practice is to reserve at least 2GiB of memory.
|
||||
|
||||
To determine how much CPU to reserve,
|
||||
identify the maximum pod density for each node and monitor the CPU usage of
|
||||
the system services running there, then choose a value that meets your workload needs.
|
||||
|
||||
Reference in New Issue
Block a user