# Заміна середовища виконання контейнерів на вузлі з Docker Engine на containerd

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

---

Це завдання визначає кроки, необхідні для оновлення вашого середовища виконання контейнерів на containerd з Docker. Воно буде корисним для операторів кластерів, які працюють з Kubernetes 1.23 або старішими версіями. Воно також охоплює приклад сценарію міграції з dockershim на containerd. З цієї [сторінки](/docs/setup/production-environment/container-runtimes/) можна вибрати альтернативні середовища виконання контейнерів.

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

<div class="alert alert-secondary callout third-party-content" role="note"><strong>Примітка:</strong>&puncsp;Цей розділ містить посилання на проєкти сторонніх розробників, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Проєкти вказано в алфавітному порядку. Щоб додати проєкт до цього списку, ознайомтеся з <a href="/uk/docs/contribute/style/content-guide/#third-party-content">посібником з контенту</a> перед надсиланням змін. <a href="#third-party-content-disclaimer">Докладніше.</a></div>


Встановіть containerd. Для отримання додаткової інформації дивіться [документацію з встановлення containerd](https://containerd.io/docs/getting-started/) і для конкретних передумов виконуйте кроки, описані в [посібнику containerd](/docs/setup/production-environment/container-runtimes/#containerd).

## Виведення вузла з експлуатації {#drain-the-node}

```shell
kubectl drain <node-to-drain> --ignore-daemonsets
```

Замініть `<node-to-drain>` на імʼя вузла, який ви збираєтеся виводити з експлуатації.

## Зупиніть службу Docker {#stop-the-docker-daemon}

```shell
systemctl stop kubelet
systemctl disable docker.service --now
```

## Встановлення Containerd {#install-containerd}

Дотримуйтесь настанов [посібника](/docs/setup/production-environment/container-runtimes/#containerd) для отримання детальних кроків з встановлення containerd.

<ul class="nav nav-tabs" id="tabs-tab-cri-containerd-installation" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-tab-cri-containerd-installation-0" role="tab" aria-controls="tabs-tab-cri-containerd-installation-0" aria-selected="true">Linux</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-tab-cri-containerd-installation-1" role="tab" aria-controls="tabs-tab-cri-containerd-installation-1">Windows (PowerShell)</a></li></ul>

<div class="tab-content" id="tabs-tab-cri-containerd-installation-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-tab-cri-containerd-installation-0" role="tabpanel" aria-labelledby="tabs-tab-cri-containerd-installation-0-tab" tabindex="tab-cri-containerd-installation"><ol>
<li>
<p>Встановіть пакунок <code>containerd.io</code> з офіційних репозиторіїв Docker. Інструкції щодо налаштування репозиторію Docker для вашого конкретного дистрибутиву Linux і встановлення пакунка <code>containerd.io</code> можна знайти у <a href="https://github.com/containerd/containerd/blob/main/docs/getting-started.md">Починаючи з containerd</a>.</p>
</li>
<li>
<p>Налаштуйте containerd:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo mkdir -p /etc/containerd
</span></span><span class="line"><span class="cl">containerd config default <span class="p">|</span> sudo tee /etc/containerd/config.toml
</span></span></code></pre></div></li>
<li>
<p>Перезапустіть containerd:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo systemctl restart containerd
</span></span></code></pre></div></li>
</ol>
</div><div class="tab-body tab-pane fade"
        id="tabs-tab-cri-containerd-installation-1" role="tabpanel" aria-labelledby="tabs-tab-cri-containerd-installation-1-tab" tabindex="tab-cri-containerd-installation"><p>Розпочніть сеанс PowerShell, встановіть значення <code>$Version</code> на бажану версію (наприклад, <code>$Version=&quot;1.4.3&quot;</code>), а потім виконайте наступні команди:</p>
<ol>
<li>
<p>Завантажте containerd:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">curl</span><span class="p">.</span><span class="py">exe</span> <span class="n">-L</span> <span class="n">https</span><span class="err">:</span><span class="p">//</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="p">/</span><span class="n">containerd</span><span class="p">/</span><span class="n">containerd</span><span class="p">/</span><span class="n">releases</span><span class="p">/</span><span class="n">download</span><span class="p">/</span><span class="n">v</span><span class="nv">$Version</span><span class="p">/</span><span class="n">containerd</span><span class="p">-</span><span class="nv">$Version</span><span class="n">-windows-amd64</span><span class="p">.</span><span class="py">tar</span><span class="p">.</span><span class="py">gz</span> <span class="n">-o</span> <span class="nb">containerd-windows</span><span class="n">-amd64</span><span class="p">.</span><span class="py">tar</span><span class="p">.</span><span class="py">gz</span>
</span></span><span class="line"><span class="cl"><span class="n">tar</span><span class="p">.</span><span class="py">exe</span> <span class="n">xvf</span> <span class="p">.\</span><span class="nb">containerd-windows</span><span class="n">-amd64</span><span class="p">.</span><span class="py">tar</span><span class="p">.</span><span class="py">gz</span>
</span></span></code></pre></div></li>
<li>
<p>Розпакуйте та налаштуйте:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Copy-Item</span> <span class="n">-Path</span> <span class="s2">&#34;.\bin\&#34;</span> <span class="n">-Destination</span> <span class="s2">&#34;</span><span class="nv">$Env:ProgramFiles</span><span class="s2">\containerd&#34;</span> <span class="n">-Recurse</span> <span class="n">-Force</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd </span><span class="nv">$Env:ProgramFiles</span><span class="p">\</span><span class="n">containerd</span><span class="p">\</span>
</span></span><span class="line"><span class="cl"><span class="p">.\</span><span class="n">containerd</span><span class="p">.</span><span class="py">exe</span> <span class="n">config</span> <span class="k">default</span> <span class="p">|</span> <span class="nb">Out-File</span> <span class="n">config</span><span class="p">.</span><span class="py">toml</span> <span class="n">-Encoding</span> <span class="n">ascii</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Перегляньте конфігурацію. Залежно від налаштувань можливо, ви захочете внести корективи:</span>
</span></span><span class="line"><span class="cl"><span class="c"># - образ sandbox_image (образ pause Kubernetes)</span>
</span></span><span class="line"><span class="cl"><span class="c"># - розташування cni bin_dir та conf_dir</span>
</span></span><span class="line"><span class="cl"><span class="nb">Get-Content</span> <span class="n">config</span><span class="p">.</span><span class="py">toml</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># (Необовʼязково, але дуже рекомендується) Виключіть containerd зі сканування Windows Defender</span>
</span></span><span class="line"><span class="cl"><span class="nb">Add-MpPreference</span> <span class="n">-ExclusionProcess</span> <span class="s2">&#34;</span><span class="nv">$Env:ProgramFiles</span><span class="s2">\containerd\containerd.exe&#34;</span>
</span></span></code></pre></div></li>
<li>
<p>Запустіть containerd:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="p">.\</span><span class="n">containerd</span><span class="p">.</span><span class="py">exe</span> <span class="p">-</span><span class="n">-register-service</span>
</span></span><span class="line"><span class="cl"><span class="nb">Start-Service</span> <span class="n">containerd</span>
</span></span></code></pre></div></li>
</ol>
</div></div>


## Налаштування kubelet для використання containerd як його середовища виконання контейнерів {#configure-the-kubelet-to-use-containerd-as-its-container-runtime}

Відредагуйте файл `/var/lib/kubelet/kubeadm-flags.env` та додайте containerd як середовище виконання контейнерів до прапорців; `--container-runtime-endpoint=unix:///run/containerd/containerd.sock`.

Використовуючи kubeadm, користувачі повинні знати, що інструмент kubeadm зберігає сокет CRI хоста в файлі `/var/lib/kubelet/instance-config.yaml` на кожному вузлі. Ви можете створити цей файл `/var/lib/kubelet/instance-config.yaml` на вузлі.

Файл `/var/lib/kubelet/instance-config.yaml` дозволяє налаштувати параметр `containerRuntimeEndpoint`.

Ви можете встановити значення цього параметра на шлях до вибраного вами сокета CRI (наприклад, `unix:///run/containerd/containerd.sock`).

## Перезапустіть kubelet {#restart-the-kubelet}

```shell
systemctl start kubelet
```

## Перевірте, що вузол справний {#verify-that-the-node-is-healthy}

Запустіть `kubectl get nodes -o wide`, і containerd зʼявиться як середовище виконання для вузла, який ми щойно змінили.

## Видаліть Docker Engine {#remove-docker-engine}

<div class="alert alert-secondary callout third-party-content" role="note"><strong>Примітка:</strong>&puncsp;Цей розділ містить посилання на проєкти сторонніх розробників, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Проєкти вказано в алфавітному порядку. Щоб додати проєкт до цього списку, ознайомтеся з <a href="/uk/docs/contribute/style/content-guide/#third-party-content">посібником з контенту</a> перед надсиланням змін. <a href="#third-party-content-disclaimer">Докладніше.</a></div>


Якщо вузол виглядає справним, видаліть Docker.

<ul class="nav nav-tabs" id="tabs-tab-remove-docker-engine" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-tab-remove-docker-engine-0" role="tab" aria-controls="tabs-tab-remove-docker-engine-0" aria-selected="true">CentOS</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-tab-remove-docker-engine-1" role="tab" aria-controls="tabs-tab-remove-docker-engine-1">Debian</a></li>
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-tab-remove-docker-engine-2" role="tab" aria-controls="tabs-tab-remove-docker-engine-2">Fedora</a></li>
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-tab-remove-docker-engine-3" role="tab" aria-controls="tabs-tab-remove-docker-engine-3">Ubuntu</a></li></ul>

<div class="tab-content" id="tabs-tab-remove-docker-engine-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-tab-remove-docker-engine-0" role="tabpanel" aria-labelledby="tabs-tab-remove-docker-engine-0-tab" tabindex="tab-remove-docker-engine"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo yum remove docker-ce docker-ce-cli
</span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-tab-remove-docker-engine-1" role="tabpanel" aria-labelledby="tabs-tab-remove-docker-engine-1-tab" tabindex="tab-remove-docker-engine"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo apt-get purge docker-ce docker-ce-cli
</span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-tab-remove-docker-engine-2" role="tabpanel" aria-labelledby="tabs-tab-remove-docker-engine-2-tab" tabindex="tab-remove-docker-engine"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo dnf remove docker-ce docker-ce-cli
</span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-tab-remove-docker-engine-3" role="tabpanel" aria-labelledby="tabs-tab-remove-docker-engine-3-tab" tabindex="tab-remove-docker-engine"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo apt-get purge docker-ce docker-ce-cli
</span></span></code></pre></div></div></div>


Попередні команди не видаляють образи, контейнери, томи або налаштовані файли конфігурації на вашому хості. Щоб їх видалити, слідуйте інструкціям Docker щодо [Видалення Docker Engine](https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine).

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4>Інструкції Docker щодо видалення Docker Engine створюють ризик видалення containerd. Будьте обережні при виконанні команд.</div>


## Введення вузла в експлуатацію {#uncordon-the-node}

```shell
kubectl uncordon <node-to-uncordon>
```

Замініть `<node-to-uncordon>` на імʼя вузла, який ви раніше вивели з експлуатації.
