|
1 | 1 | # cgroups
|
2 | 2 |
|
3 |
| -To avoid resource contention between containers and host daemons in Kubernetes, the kubelet components can use cgroups to limit resource usage. |
| 3 | +To avoid resource contention between containers and host daemons in Kubernetes, |
| 4 | +the kubelet components can use cgroups to limit resource usage. |
4 | 5 |
|
5 |
| -## Enforcing Node Allocatable |
| 6 | +## Node Allocatable |
6 | 7 |
|
7 |
| -You can use `kubelet_enforce_node_allocatable` to set node allocatable enforcement. |
| 8 | +Node Allocatable is calculated by subtracting from the node capacity: |
8 | 9 |
|
9 |
| -```yaml |
10 |
| -# A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. |
11 |
| -kubelet_enforce_node_allocatable: "pods" |
12 |
| -# kubelet_enforce_node_allocatable: "pods,kube-reserved" |
13 |
| -# kubelet_enforce_node_allocatable: "pods,kube-reserved,system-reserved" |
14 |
| -``` |
15 |
| - |
16 |
| -Note that to enforce kube-reserved or system-reserved, `kube_reserved_cgroups` or `system_reserved_cgroups` needs to be specified respectively. |
| 10 | +- kube-reserved reservations |
| 11 | +- system-reserved reservations |
| 12 | +- hard eviction thresholds |
17 | 13 |
|
18 |
| -Here is an example: |
| 14 | +You can set those reservations: |
19 | 15 |
|
20 | 16 | ```yaml
|
21 |
| -kubelet_enforce_node_allocatable: "pods,kube-reserved,system-reserved" |
22 |
| - |
23 |
| -# Set kube_reserved to true to run kubelet and container-engine daemons in a dedicated cgroup. |
24 |
| -# This is required if you want to enforce limits on the resource usage of these daemons. |
25 |
| -# It is not required if you just want to make resource reservations (kube_memory_reserved, kube_cpu_reserved, etc.) |
26 |
| -kube_reserved: true |
27 |
| -kube_reserved_cgroups_for_service_slice: kube.slice |
28 |
| -kube_reserved_cgroups: "/{{ kube_reserved_cgroups_for_service_slice }}" |
29 | 17 | kube_memory_reserved: 256Mi
|
30 | 18 | kube_cpu_reserved: 100m
|
31 |
| -# kube_ephemeral_storage_reserved: 2Gi |
32 |
| -# kube_pid_reserved: "1000" |
33 |
| -# Reservation for master hosts |
34 |
| -kube_master_memory_reserved: 512Mi |
35 |
| -kube_master_cpu_reserved: 200m |
36 |
| -# kube_master_ephemeral_storage_reserved: 2Gi |
37 |
| -# kube_master_pid_reserved: "1000" |
| 19 | +kube_ephemeral_storage_reserved: 2Gi |
| 20 | +kube_pid_reserved: "1000" |
38 | 21 |
|
39 |
| -# Set to true to reserve resources for system daemons |
40 |
| -system_reserved: true |
41 |
| -system_reserved_cgroups_for_service_slice: system.slice |
42 |
| -system_reserved_cgroups: "/{{ system_reserved_cgroups_for_service_slice }}" |
| 22 | +# System daemons (sshd, network manager, ...) |
43 | 23 | system_memory_reserved: 512Mi
|
44 | 24 | system_cpu_reserved: 500m
|
45 |
| -# system_ephemeral_storage_reserved: 2Gi |
46 |
| -# system_pid_reserved: "1000" |
47 |
| -# Reservation for master hosts |
48 |
| -system_master_memory_reserved: 256Mi |
49 |
| -system_master_cpu_reserved: 250m |
50 |
| -# system_master_ephemeral_storage_reserved: 2Gi |
51 |
| -# system_master_pid_reserved: "1000" |
| 25 | +system_ephemeral_storage_reserved: 2Gi |
| 26 | +system_pid_reserved: "1000" |
52 | 27 | ```
|
53 | 28 |
|
54 |
| -After the setup, the cgroups hierarchy is as follows: |
| 29 | +By default, the kubelet will enforce Node Allocatable for pods, which means |
| 30 | +pods will be evicted when resource usage excess Allocatable. |
| 31 | +
|
| 32 | +You can optionnaly enforce the reservations for kube-reserved and |
| 33 | +system-reserved, but proceed with caution (see [the kubernetes |
| 34 | +guidelines](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#general-guidelines)). |
55 | 35 |
|
56 |
| -```bash |
57 |
| -/ (Cgroups Root) |
58 |
| -├── kubepods.slice |
59 |
| -│ ├── ... |
60 |
| -│ ├── kubepods-besteffort.slice |
61 |
| -│ ├── kubepods-burstable.slice |
62 |
| -│ └── ... |
63 |
| -├── kube.slice |
64 |
| -│ ├── ... |
65 |
| -│ ├── {{container_manager}}.service |
66 |
| -│ ├── kubelet.service |
67 |
| -│ └── ... |
68 |
| -├── system.slice |
69 |
| -│ └── ... |
70 |
| -└── ... |
| 36 | +```yaml |
| 37 | +enforce_allocatable_pods: true # default |
| 38 | +enforce_allocatable_kube_reserved: true |
| 39 | +enforce_allocatable_system_reseverd: true |
71 | 40 | ```
|
72 | 41 |
|
73 | 42 | You can learn more in the [official kubernetes documentation](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/).
|
0 commit comments