You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.6 KiB

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