検索
ニュース

「Kubernetes v1.20」からコンテナランタイムとしての「Docker」が非推奨にマネージドサービスの利用者に影響あり

Kubernetesプロジェクトは最新版の「Kubernetes v1.20」から、コンテナランタイムとしての「Docker」が非推奨となることについて、公式ブログで解説した。

Share
Tweet
LINE
Hatena

 Kubernetesプロジェクトは2020年12月8日(米国時間)、「Kubernetes v1.20」を公開した。これに先立ち、公式ブログで「Don't Panic: Kubernetes and Docker」と題する投稿を公開し、コンテナランタイムとしての「Docker」が非推奨となることについて解説した。

 Kubernetesプロジェクトはブログの冒頭で、「パニックになる必要はない」と呼び掛け、コンテナランタイムとしてのDockerが非推奨となることの意味と影響を説明している。

 その一方でKubernetes向けに作成された「Container Runtime Interface」(CRI)を使用するランタイムを推奨した。Dockerで生成されたイメージはこれまでと同様に、クラスタにおいて全てのランタイムで引き続き動作する。

 Kubernetesを使用するエンドユーザーにとっては、あまり変わることはないと述べ、次のように説明している。「これはDockerの死を意味するわけではない。Dockerをもう開発ツールとして使えない、あるいは使ってはならない、ということでもない。Dockerはこれまで通り、便利なコンテナ構築ツールであり、『docker build』コマンドを実行して得られるイメージは、Kubernetesクラスタで動作する」

マネージドKubernetesサービスを使っているなら要注意

 一方、「Google Kubernetes Engine」(GKE)や「Amazon Elastic Kubernetes Service」(EKS)、「Azure Kubernetes Service」(AKS)といったマネージドKubernetesサービスのユーザーは要注意だ。Kubernetesの将来のバージョンでDockerサポートが打ち切りになる前に、ワーカーノードが、サポートされているコンテナランタイムを使用するようにしなければならない。ノードをカスタマイズしている場合は、環境とランタイムの要件を基に、ノードをアップデートする必要があるかもしれない。

 独自のクラスタを展開している場合も、クラスタが壊れないように変更を加える必要がある。Kubernetes v1.20では、Dockerの非推奨化についての警告を出力する。DockerランタイムのサポートがKubernetesの将来のリリース(現在の計画では、2021年末に公開予定のv1.23)で打ち切られたら、「containerd」や「CRI-O」のような、CRIに対応するコンテナランタイムのいずれかに切り替える必要がある。現在使用中のDockerデーモン構成をサポートするランタイムを選ばなければならない。

ランタイムとしてのDockerは何が問題なのか

 Kubernetesプロジェクトは、Dockerはコンテナラインタイムとして一般的な選択肢(他の一般的な選択肢には、containerdやCRI-Oなどがある)だが、Kubernetes内に組み込むように設計されておらず、それが問題を引き起こしていると述べている。

 「Dockerは魅力的で便利だ。ユーザーエクスペリエンス(UX)を高める多くの工夫が施されており、開発作業の中で非常に扱いやすい。だが、こうしたUXの強化はKubernetesには必要ない」(Kubernetesプロジェクト)

 Dockerがヒューマンフレンドリーな抽象化レイヤーを備えていることから、Kubernetesクラスタは、「Dockershim」という別のツールを介してcontainerdを使用する必要がある。containerdは、技術スタックとしてのDockerの一部である高レベルコンテナランタイムだ。

 もう一つの問題はDockerがCRIをサポートしていないことだ。このため、KubernetesクラスタがDockershimを使用しなければならない。

 だが、DockershimのメンテナンスはKubernetesプロジェクトにとって負担となっていた。そこでKubernetes v1.23から、KubeletからDockershimを削除することになった。この時点でコンテナランタイムとしてのDockerのサポートが終了する。

開発者にはどの程度の影響があるのか

 Kubernetesプロジェクトは、次のように説明している。「今回の変更はほとんどの場合、Dockerを扱うために使っている環境とは別の環境に関わるものだ。開発に使われるDocker環境は、Kubernetesクラスタ内のDockerランタイムとは無関係だ。Dockerが生成するイメージは、実はDocker固有のイメージではなく、OCI(Open Container Initiative)イメージだ。OCIに準拠したイメージは、構築に使用するツールが何であるかにかかわらず、Kubernetesからは同じように見える。containerdとCRI-Oはいずれも、こうしたイメージをプルし、実行する方法を理解している」

 さらにKubernetesプロジェクトは、「Kubernetesをどのように使っているかによって、今回の変更から受ける影響は異なるものの、長期的には、今回の変更によって物事が容易になる」と述べている。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る