Skip to content

Commit faad4b9

Browse files
committed
Rework documentation
Remove the cgroup schema as it's not really actionnable => the link to kubernetes documenation and design doc over here already has that stuff.
1 parent 629c88e commit faad4b9

File tree

2 files changed

+40
-82
lines changed

2 files changed

+40
-82
lines changed

docs/operations/cgroups.md

Lines changed: 23 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,42 @@
11
# cgroups
22

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.
45

5-
## Enforcing Node Allocatable
6+
## Node Allocatable
67

7-
You can use `kubelet_enforce_node_allocatable` to set node allocatable enforcement.
8+
Node Allocatable is calculated by subtracting from the node capacity:
89

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
1713

18-
Here is an example:
14+
You can set those reservations:
1915

2016
```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 }}"
2917
kube_memory_reserved: 256Mi
3018
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"
3821

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, ...)
4323
system_memory_reserved: 512Mi
4424
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"
5227
```
5328
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)).
5535
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
7140
```
7241
7342
You can learn more in the [official kubernetes documentation](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/).

inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -250,47 +250,36 @@ default_kubelet_config_dir: "{{ kube_config_dir }}/dynamic_kubelet_dir"
250250
# Download kubectl onto the host that runs Ansible in {{ bin_dir }}
251251
# kubectl_localhost: false
252252

253-
# A comma separated list of levels of node allocatable enforcement to be enforced by kubelet.
254-
# Acceptable options are 'pods', 'system-reserved', 'kube-reserved' and ''. Default is "".
255-
# kubelet_enforce_node_allocatable: pods
253+
## Reserving compute resources
254+
# https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/
256255

257-
## Set runtime and kubelet cgroups when using systemd as cgroup driver (default)
258-
# kubelet_runtime_cgroups: "/{{ kube_service_cgroups }}/{{ container_manager }}.service"
259-
# kubelet_kubelet_cgroups: "/{{ kube_service_cgroups }}/kubelet.service"
260-
261-
## Set runtime and kubelet cgroups when using cgroupfs as cgroup driver
262-
# kubelet_runtime_cgroups_cgroupfs: "/system.slice/{{ container_manager }}.service"
263-
# kubelet_kubelet_cgroups_cgroupfs: "/system.slice/kubelet.service"
264-
265-
# Whether to run kubelet and container-engine daemons in a dedicated cgroup.
266-
# kube_reserved: false
256+
# Optionally reserve resources for kube daemons.
267257
## Uncomment to override default values
268-
## The following two items need to be set when kube_reserved is true
269-
# kube_reserved_cgroups_for_service_slice: kube.slice
270-
# kube_reserved_cgroups: "/{{ kube_reserved_cgroups_for_service_slice }}"
271258
# kube_memory_reserved: 256Mi
272259
# kube_cpu_reserved: 100m
273260
# kube_ephemeral_storage_reserved: 2Gi
274261
# kube_pid_reserved: "1000"
275-
# Reservation for master hosts
276-
# kube_master_memory_reserved: 512Mi
277-
# kube_master_cpu_reserved: 200m
278-
# kube_master_ephemeral_storage_reserved: 2Gi
279-
# kube_master_pid_reserved: "1000"
280262

281263
## Optionally reserve resources for OS system daemons.
282-
# system_reserved: true
283264
## Uncomment to override default values
284265
## The following two items need to be set when system_reserved is true
285-
# system_reserved_cgroups_for_service_slice: system.slice
286-
# system_reserved_cgroups: "/{{ system_reserved_cgroups_for_service_slice }}"
287266
# system_memory_reserved: 512Mi
288267
# system_cpu_reserved: 500m
289268
# system_ephemeral_storage_reserved: 2Gi
290-
## Reservation for master hosts
291-
# system_master_memory_reserved: 256Mi
292-
# system_master_cpu_reserved: 250m
293-
# system_master_ephemeral_storage_reserved: 2Gi
269+
# system_pid_reserved: "1000"
270+
#
271+
# Make the kubelet enforce with cgroups the limits of Pods
272+
# enforce_allocatable_pods: true
273+
274+
# Enforce kube_*_reserved as limits
275+
# WARNING: this limits the resources the kubelet and the container engine can
276+
# use which can cause instability on your nodes
277+
# enforce_allocatable_kube_reserved: false
278+
279+
# Enforce system_*_reserved as limits
280+
# WARNING: this limits the resources system daemons can use which can lock you
281+
# out of your nodes (by OOMkilling sshd for instance)
282+
# enforce_allocatable_system_reserved: false
294283

295284
## Eviction Thresholds to avoid system OOMs
296285
# https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#eviction-thresholds

0 commit comments

Comments
 (0)