# Налаштування драйвера cgroup

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Ця сторінка пояснює, як налаштувати драйвер cgroup kubelet, щоб він відповідав драйверу cgroup контейнера для кластерів kubeadm.

## Перш ніж ви розпочнете

Вам слід ознайомитися з [вимогами до контейнерних середовищ](/docs/setup/production-environment/container-runtimes) Kubernetes.

<!-- steps -->

## Налаштування драйвера cgroup середовища виконання контейнерів {#configure-the-container-runtime-cgroup-driver}

Сторінка [Середовища виконання контейнерів](/docs/setup/production-environment/container-runtimes) пояснює, що для налаштувань на основі kubeadm рекомендується використовувати драйвер `systemd` замість [типового](/docs/reference/config-api/kubelet-config.v1beta1) драйвера `cgroupfs` kubelet, оскільки kubeadm керує kubelet як [сервісом systemd](/docs/setup/production-environment/tools/kubeadm/kubelet-integration).

На сторінці також наведено деталі щодо того, як налаштувати різні контейнерні середовища зі стандартним використанням драйвера `systemd`.

## Налаштування драйвера cgroup для kubelet {#configure-the-kubelet-cgroup-driver}

kubeadm дозволяє передавати структуру `KubeletConfiguration` під час ініціалізації за допомогою `kubeadm init`. Ця структура `KubeletConfiguration` може включати поле `cgroupDriver`, яке контролює драйвер cgroup для kubelet.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Починаючи з v1.22, якщо користувач не встановить поле <code>cgroupDriver</code> у <code>KubeletConfiguration</code>, kubeadm стандартно задає його як <code>systemd</code>.</p>
<p>У Kubernetes v1.28 можна увімкнути автоматичне виявлення драйвера cgroup як експериментальну функцію. Див. <a href="/uk/docs/setup/production-environment/container-runtimes/#systemd-cgroup-driver">Драйвер cgroup системи systemd</a> для отримання детальнішої інформації.</p>
</div>


Ось мінімальний приклад, який явним чином вказує значення поля `cgroupDriver`:

```yaml
# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kubernetesVersion: v1.21.0
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
```

Такий файл конфігурації можна передати команді kubeadm:

```shell
kubeadm init --config kubeadm-config.yaml
```


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Kubeadm використовує ту саму конфігурацію <code>KubeletConfiguration</code> для всіх вузлів у кластері. <code>KubeletConfiguration</code> зберігається в обʼєкті <a href="/uk/docs/concepts/configuration/configmap/">ConfigMap</a> в просторі імен <code>kube-system</code>.</p>
<p>Виконання підкоманд <code>init</code>, <code>join</code> та <code>upgrade</code> призведе до запису kubeadm <code>KubeletConfiguration</code> у файл під <code>/var/lib/kubelet/config.yaml</code> і передачі його до kubelet локального вузла.</p>
<p>На кожному вузлі kubeadm виявляє сокет CRI та зберігає його деталі у файлі <code>/var/lib/kubelet/instance-config.yaml</code>. Коли виконуються підкоманди <code>init</code>, <code>join</code> або <code>upgrade</code>, kubeadm вносить зміни до значення <code>containerRuntimeEndpoint</code> з цієї конфігурації інстансу у <code>/var/lib/kubelet/config.yaml</code>.</p>
</div>


## Використання драйвера `cgroupfs` {#using-the-cgroupfs-driver}

Для використання `cgroupfs` і запобігання модифікації драйвера cgroup в `KubeletConfiguration` під час оновлення `kubeadm` в поточних налаштуваннях, вам потрібно явно вказати його значення. Це стосується випадку, коли ви не хочете, щоб майбутні версії `kubeadm` стандартно застосовували драйвер `systemd`.

Дивіться нижче розділ "[Зміна ConfigMap у kubelet](#modify-the-kubelet-configmap)" для отримання деталей щодо явного вказання значення.

Якщо ви хочете налаштувати середовище виконання контейнерів на використання драйвера `cgroupfs`, вам слід звернутися до документації вашого середовища виконання контейнерів.

## Міграція на використання драйвера `systemd` {#migrating-to-the-systemd-driver}

Щоб змінити драйвер cgroup поточного кластера kubeadm з `cgroupfs` на `systemd` на місці, потрібно виконати подібну процедуру до оновлення kubelet. Це повинно включати обидва зазначені нижче кроки.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Також можливо замінити старі вузли в кластері новими, які використовують драйвер <code>systemd</code>. Для цього потрібно виконати лише перший крок нижче перед приєднанням нових вузлів та забезпечити те, що робочі навантаження можуть безпечно переміщатися на нові вузли перед видаленням старих вузлів.</div>


### Зміна ConfigMap у kubelet {#modify-the-kubelet-configmap}

- Викличте `kubectl edit cm kubelet-config -n kube-system`.
- Змініть наявне значення `cgroupDriver` або додайте нове поле, яке виглядає наступним чином:

  ```yaml
  cgroupDriver: systemd
  ```

  Це поле повинно бути присутнє у розділі `kubelet:` в ConfigMap.

### Оновлення драйвера cgroup на всіх вузлах {#update-the-cgroup-driver-on-all-nodes}

Для кожного вузла в кластері:

- [Відключіть вузол](/docs/tasks/administer-cluster/safely-drain-node) за допомогою `kubectl drain <імʼя-вузла> --ignore-daemonsets`
- Зупиніть kubelet за допомогою `systemctl stop kubelet`
- Зупиніть середовище виконання контейнерів
- Змініть драйвер cgroup середовища виконання контейнерів на `systemd`
- Встановіть `cgroupDriver: systemd` у `/var/lib/kubelet/config.yaml`
- Запустіть середовище виконання контейнерів
- Запустіть kubelet за допомогою `systemctl start kubelet`
- [Увімкніть вузол](/docs/tasks/administer-cluster/safely-drain-node) за допомогою `kubectl uncordon <імʼя-вузла>`

Виконайте ці кроки на вузлах по одному, щоб забезпечити достатній час для розміщення робочих навантажень на різних вузлах.

Після завершення процесу переконайтеся, що всі вузли та робочі навантаження є справними.
