このページに記載されている情報は古い可能性があります
このページの更新日は英語版よりも古いため、記載されている情報が古い可能性があります。最新の情報をご覧になりたい方は英語版のページをご覧ください: Changing the Container Runtime on a Node from Docker Engine to containerd
ノードのコンテナランタイムをDocker Engineからcontainerdに変更する
このタスクでは、コンテナランタイムをDockerからcontainerdに更新するために必要な手順について説明します。 これは、Kubernetes 1.23以前を使用しているクラスターオペレーターに適用されます。 また、dockershimからcontainerdへの移行を行う際の具体的なシナリオ例も含まれています。 代替のコンテナランタイムについては、このページを参照してください。
始める前に
containerdをインストールします。 詳細についてはcontainerdのインストールドキュメントを参照してください。 特定の前提条件については、containerdガイドを参照してください。
ノードのドレイン
kubectl drain <node-to-drain> --ignore-daemonsets
<node-to-drain>
は、ドレイン対象のノード名に置き換えてください。
Dockerデーモンの停止
systemctl stop kubelet
systemctl disable docker.service --now
containerdのインストール
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
containerdをコンテナランタイムとして使用するためのkubeletの設定
/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://
で始める必要がある点に注意してください。テキストエディタで変更を保存すると、ノードオブジェクトが更新されます。
kubeletの再起動
systemctl start kubelet
ノードが正常であることの確認
kubectl get nodes -o wide
を実行し、先ほど変更したノードのランタイムとしてcontainerdが表示されていることを確認します。
Docker Engineの削除
ノードが正常に見える場合は、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のアンインストール手順に従ってください。
注意:
Docker Engineのアンインストール手順には、containerdを削除してしまうリスクがあります。コマンドの実行には十分注意してください。ノードのuncordon
kubectl uncordon <node-to-uncordon>
<node-to-uncordon>
は、以前にドレインしたノードの名前に置き換えてください。
このページの項目は、Kubernetesが必要とする機能を提供するサードパーティー製品またはプロジェクトです。Kubernetesプロジェクトの作者は、それらのサードパーティー製品またはプロジェクトに責任を負いません。詳しくは、CNCFウェブサイトのガイドラインをご覧ください。第三者のリンクを追加するような変更を提案する前に、コンテンツガイドを読むべきです。