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