# ノードのコンテナランタイムをDocker Engineからcontainerdに変更する

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

---

このタスクでは、コンテナランタイムをDockerからcontainerdに更新するために必要な手順について説明します。
これは、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="/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)を参照してください。

## ノードのドレイン

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

`<node-to-drain>`は、ドレイン対象のノード名に置き換えてください。

## Dockerデーモンの停止

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

## containerdのインストール

containerdをインストールする手順の詳細については、[ガイド](/docs/setup/production-environment/container-runtimes/#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>公式のDockerリポジトリから<code>containerd.io</code>パッケージをインストールします。
各Linuxディストリビューション向けにDockerリポジトリを設定し、<code>containerd.io</code>パッケージをインストールする手順については、<a href="https://github.com/containerd/containerd/blob/main/docs/getting-started.md">Getting started with 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(Kubernetesのpauseイメージ)</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>


## containerdをコンテナランタイムとして使用するためのkubeletの設定

`/var/lib/kubelet/kubeadm-flags.env`ファイルを編集し、フラグに`--container-runtime-endpoint=unix:///run/containerd/containerd.sock`を追加して、containerdランタイムを指定します。

kubeadmを使用しているユーザーは、`kubeadm`ツールが各ホストのCRIソケットを、そのホストのノードオブジェクトにアノテーションとして保存していることに注意してください。
これを変更するには、`/etc/kubernetes/admin.conf`ファイルが存在するマシン上で次のコマンドを実行します。

```shell
kubectl edit no <node-name>
```

これによりテキストエディタが起動し、ノードオブジェクトを編集できます。
使用するテキストエディタを指定するには、`KUBE_EDITOR`環境変数を設定してください。

- `kubeadm.alpha.kubernetes.io/cri-socket`の値を`/var/run/dockershim.sock`から、使用したいCRIソケットのパス(例: `unix:///run/containerd/containerd.sock`)に変更します。

  新しいCRIソケットのパスは、原則として`unix://`で始める必要がある点に注意してください。

- テキストエディタで変更を保存すると、ノードオブジェクトが更新されます。

## kubeletの再起動

```shell
systemctl start kubelet
```

## ノードが正常であることの確認

`kubectl get nodes -o wide`を実行し、先ほど変更したノードのランタイムとしてcontainerdが表示されていることを確認します。

## Docker Engineの削除

<div class="alert alert-secondary callout third-party-content" role="note"><strong>備考:</strong>&puncsp;このセクションでは、Kubernetesが必要とする機能を提供するサードパーティプロジェクトにリンクしています。これらのプロジェクトはアルファベット順に記載されていて、Kubernetesプロジェクトの作者は責任を持ちません。このリストにプロジェクトを追加するには、変更を提出する前に<a href="/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 Engineのアンインストール手順には、containerdを削除してしまうリスクがあります。コマンドの実行には十分注意してください。</div>


## ノードのuncordon

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

`<node-to-uncordon>`は、以前にドレインしたノードの名前に置き換えてください。
