Kubernetesとは
Kubernetesは、コンテナのオーケストレーションを行うソフトウェアです。アプリケーションコンテナを、デプロイ・管理します。Kubernetesは字数が多いので、「k8s」(最初がk、間が8文字、最後がs)または「Kube」と短縮後で表すことも多いです。読み方は「クバネティス」「クバネテス」「クーべネティス」等と表現します。ギリシャ語で操舵手やパイロットを表します。
ここで言うオーケストレーションとは、コンピュータシステムのサービス設定や提供・管理の各種手続きを自動的に行う考え方です。Kubernetesではクラスタ内でデプロイ・スケール・管理を実行できます。全体の効率向上・品質向上・スピード向上が実現でき、可能性向上により企業向けに活用が進んでいます。 【参考】:Kubernetes
Kubernetesで用いる用語
ここではより理解を深めるために、Kubernetesで用いる用語を解説していきます。最初に紹介するのは、アプリケーション実行部分で用いられる用語です。
「Pod」とはKubernetesのアプリケーションの管理で用いる用語で、基本的な実行単位です。Podの集合体を「サービス」と言います。管理対象となるインフラを「ノード」(Node)と言います。Podは最小のデプロイメント単位なため、単一インスタンスで構成可能です。さらに協調動作が必要なアプリケーションをカプセル化し、単一で管理可能なエンティティとしてまとめることもできます。
続いてアプリケーションが動作するにあたって、動作をコントロールするために必要な要素を紹介します。ノードを制御し、タスクを割り当てる機器を「マスター」あるいは「コントロールプレーン」と呼びます。マスターへのリクエストは、Kubernetesのコマンドラインツールである「kubectl」を用います。
マスターと対比させて、各実行ノードを「スレーブ」あるいは「ワーカーノード」という場合もあります。
Kubernetesの特徴とメリット
Kubernetesはコンテナ操作と制御を自動で行うことができます。それを支える代表的機能として以下のものが提供されています。
・管理対象を抽象化し簡素化が可能 管理対象はPodやサービスであり、各ノードを管理します。そのため、コンテナと実行マシンを厳密に結び付けずに簡単な操作で管理が可能です。
・クラスタ対応 ノードを超えたクラスタリングに対応します。各ノードへのPodのスケジュールやクラスタでのデプロイが簡単にできます。
・自動スケーリング 負荷に応じてワークロードが調整可能です。負荷分散のためのスケーリングを簡単に行うことができます。
・可用性・耐障害性の向上 ノードに障害が発生した際に自動復旧を行うことが可能で、Podの障害発生の自動復旧についても設定可能です。このため、スケーリングと併用することで耐障害性の向上ができます。
・ローリングアップデート アプリケーションのバージョンアップをPod単位で行うことができます。これにより、ダウンタイムなしでアプリケーションメンテナンスの可用性が確保できます。
上記の基本的な特性・メリットを活用し、Kubernetesでは自動化ソリューションとして大量のコンテナを管理することで短期間でデプロイすることが可能となりました。
Kubernetesの活用事例
Kubernetesは障害復旧にも強いため、業務活用が進んでいます。公式サイトでは、ユーザーケーススタディとして事例や採用理由が掲載されています。
Booking.comやadidas、デンソーやYahoo! JAPAN等の業種問わず多岐にわたって事例が掲載されています。掲載事例を見てみると、運用の生産性向上が見込まれることを選定理由に挙げているケースが多いです。 【参考】:Kubernetesのユーザーケーススタディ
Kubernetesの学び方
Kubernetesの公式サイトには、多くのトレーニングパートナーが登録されています。無料の入門コースを利用して、Kubernetes・Linux・クラウド技術を総合的に学習することができます。 【参考】:Kubernetesのトレーニングと資格
Kubernetes認定資格として、認定Kubernetesアプリケーション開発者(Certified Kubernetes Application Developer、CKAD)と認定Kubernetes管理者(Certified Kubernetes Administrator、CKA)の情報も掲載されています。
Docker非推奨とは
ここでいうDocker非推奨とは、Docker本体ではなくDockershimのことを指します。2020年にKubernetes公式Blogで告知されたように、Dockershimは1.2で非推奨となっています。
Dockershimとは、Dockerに対応するランタイムインターフェイスです。Dockershimを介さずに、ContainerdのCRIプラグインにより、kubeletとのランタイムインターフェイス接続が可能なため、利用上の問題はありません。 【参考】:Dockershim Deprecation FAQ 【参考】:Migrating from dockershim 【参考】:Dockershim removal is coming. Are you ready?
KubernetesにおけるDockerの役割
ここでは、KubernetesにおけるDockerの役割を整理します。Kubernetesはオーケストレーション機能を担当し、Dockerはコンテナを管理することを目的としています。Podがノードに割り当てられた際に、各ノード上で実行されているサービスプロセスであるkubeletがコンテナの起動をDockerに要求して連携します。その後コンテナの状態をkubeletが収集し、マスターに伝達します。
これまでのDocker単独の状態では手動による指示・操作が必要でしたが、Kubernetesではkubeletが処理を代行することで自動化に対応します。
DockerとKubernetesの違い
Dockerは、コンテナ仮想化によるOSレベル仮想化プラットフォームソリューションです。CI/CD(継続的インテグレーション/継続的デリバリー)のパイプラインに合わせて、迅速かつ継続的に実施することができます。これにより開発ライフサイクルの効率性を高めることができ、DevOps等で活用されています。 【参考】:Docker
現在、仮想化ソフトウェアの利用が増加しており、たびたびDockerとKubernetesが仮想化ソフトウェアとして比較されます。DockerとKubernetesは必ずしも同じカテゴリーの比較製品ではなく、互いを補完する関係があります。
Dockerはアプリケーションを分離し、コンテナ化することが主な役割です。動作環境は単一ノードに限定されます。KubernetesはDockerでコンテナ化されたアプリケーションの実行を管理します。複数ノードで動作が可能で処理を自動実行することができます。より効率的な運用に近づけることを目的とします。さらに自動障害復旧の用途にはKubernetesを利用します。
Kubernetesを使わずにDockerで自動化を行うには?
Dockerは単一ノード向けですので、クラスタでの自動化オーケストレーションを行うKubernetesとは補完関係にあります。単一ノードで複数コンテナを実行するには、 Kubernetesを使わずにDocker Composeを利用することもできます。自動化のワークフローとして利用することができます。
Kubernetesはサーバーインフラ(Node)をまたがるコンテナ仮想化に対応し、大規模システムに適したクラスターを構成可能です。Dockerのみでクラスタリング対応するには、Swarm modeが提供されています。
しかしながら、大多数がKubernetesをすでに選択していることから、Dockerのオーケストレーションモジュールとして現在Kubernetesも正式採用されています。特別な事情がない場合は、Kubernetesを利用するのが賢明だと考えます。 【参考】:Docker Orchestration
オーケストレーションにより自動化を進めて運用効率を高めましょう。
Kubernetesは、ノードを超えたクラスタリングに対応します。自動スケールが可能ですので業務の需要変動に素早く対応できます。さらに障害の自動復旧機能は業務利用に最適です。今後も需要が見込まれるKubernetesは動向を見守る必要があると考えられます。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから