このページに記載されている情報は古い可能性があります

このページの更新日は英語版よりも古いため、記載されている情報が古い可能性があります。最新の情報をご覧になりたい方は英語版のページをご覧ください: 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をインストールする手順の詳細については、ガイドを参照してください。

  1. 公式のDockerリポジトリからcontainerd.ioパッケージをインストールします。 各Linuxディストリビューション向けにDockerリポジトリを設定し、containerd.ioパッケージをインストールする手順については、Getting started with containerdを参照してください。

  2. containerdを設定する:

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    
  3. containerdを再起動する:

    sudo systemctl restart containerd
    

PowerShellセッションを開始し、$Versionに目的のバージョンを設定します(例: $Version="1.4.3")。 その後、次のコマンドを実行します:

  1. 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
    
  2. 展開および設定:

    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"
    
  3. 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のアンインストール手順に従ってください。

ノードのuncordon

kubectl uncordon <node-to-uncordon>

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

このページの項目は、Kubernetesが必要とする機能を提供するサードパーティー製品またはプロジェクトです。Kubernetesプロジェクトの作者は、それらのサードパーティー製品またはプロジェクトに責任を負いません。詳しくは、CNCFウェブサイトのガイドラインをご覧ください。第三者のリンクを追加するような変更を提案する前に、コンテンツガイドを読むべきです。

最終更新 June 26, 2025 at 11:03 PM PST: reflect feedback (b423540ff5)