このページに記載されている情報は古い可能性があります
このページの更新日は英語版よりも古いため、記載されている情報が古い可能性があります。最新の情報をご覧になりたい方は英語版のページをご覧ください: Changing the Container Runtime on a Node from Docker Engine to containerd
このタスクでは、コンテナランタイムをDockerからcontainerdに更新するために必要な手順について説明します。 これは、Kubernetes 1.23以前を使用しているクラスターオペレーターに適用されます。 また、dockershimからcontainerdへの移行を行う際の具体的なシナリオ例も含まれています。 代替のコンテナランタイムについては、このページを参照してください。
containerdをインストールします。 詳細についてはcontainerdのインストールドキュメントを参照してください。 特定の前提条件については、containerdガイドを参照してください。
kubectl drain <node-to-drain> --ignore-daemonsets
<node-to-drain>は、ドレイン対象のノード名に置き換えてください。
systemctl stop kubelet
systemctl disable docker.service --now
containerdをインストールする手順の詳細については、ガイドを参照してください。
公式のDockerリポジトリからcontainerd.ioパッケージをインストールします。
各Linuxディストリビューション向けにDockerリポジトリを設定し、containerd.ioパッケージをインストールする手順については、Getting started with containerdを参照してください。
containerdを設定する:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
containerdを再起動する:
sudo systemctl restart containerd
PowerShellセッションを開始し、$Versionに目的のバージョンを設定します(例: $Version="1.4.3")。
その後、次のコマンドを実行します:
containerdをダウンロードする:
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
tar.exe xvf .\containerd-windows-amd64.tar.gz
展開および設定:
Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
cd $Env:ProgramFiles\containerd\
.\containerd.exe config default | Out-File config.toml -Encoding ascii
# 設定内容を確認します。セットアップによっては、以下を調整する必要があります:
# - sandbox_image(Kubernetesのpauseイメージ)
# - cniのbin_dirおよびconf_dirの場所
Get-Content config.toml
# (オプションだが、強く推奨される)containerdをWindows Defenderのスキャン対象から除外する
Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
containerdを起動する:
.\containerd.exe --register-service
Start-Service containerd
/var/lib/kubelet/kubeadm-flags.envファイルを編集し、フラグに--container-runtime-endpoint=unix:///run/containerd/containerd.sockを追加して、containerdランタイムを指定します。
kubeadmを使用しているユーザーは、kubeadmツールが各ホストのCRIソケットを、そのホストのノードオブジェクトにアノテーションとして保存していることに注意してください。
これを変更するには、/etc/kubernetes/admin.confファイルが存在するマシン上で次のコマンドを実行します。
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://で始める必要がある点に注意してください。
テキストエディタで変更を保存すると、ノードオブジェクトが更新されます。
systemctl start kubelet
kubectl get nodes -o wideを実行し、先ほど変更したノードのランタイムとしてcontainerdが表示されていることを確認します。
ノードが正常に見える場合は、Dockerを削除します。
sudo yum remove docker-ce docker-ce-cli
sudo apt-get purge docker-ce docker-ce-cli
sudo dnf remove docker-ce docker-ce-cli
sudo apt-get purge docker-ce docker-ce-cli
前述のコマンドは、ホスト上のイメージ、コンテナ、ボリューム、またはカスタマイズされた設定ファイルを削除しません。 これらを削除するには、DockerのDocker Engineのアンインストール手順に従ってください。
kubectl uncordon <node-to-uncordon>
<node-to-uncordon>は、以前にドレインしたノードの名前に置き換えてください。
このページの項目は、Kubernetesが必要とする機能を提供するサードパーティー製品またはプロジェクトです。Kubernetesプロジェクトの作者は、それらのサードパーティー製品またはプロジェクトに責任を負いません。詳しくは、CNCFウェブサイトのガイドラインをご覧ください。第三者のリンクを追加するような変更を提案する前に、コンテンツガイドを読むべきです。