Kubernetes(k8sまたはkubeとも呼ばれます)は、コンテナ化されたアプリケーションのデプロイメント、管理、スケーリングをスケジュールおよび自動化するためのオープンソースのコンテナ・オーケストレーション・プラットフォームです。
現在、Kubernetesがコンテナ関連テクノロジーのより広範なエコシステムに統合され、最新のクラウド・インフラストラクチャーの構成要素が形成されています。組織はこのエコシステムを利用して、インフラストラクチャーと運用にかかわる複雑なタスクを実行するための、生産性の高いハイブリッド・マルチクラウド型のコンピューティング環境を実現できます。また、アプリケーションを構築する際に、一度開発すれば、どこにでもデプロイできるアプローチを可能にすることで、クラウドネイティブ開発にも対応しています。
「Kubernetes」という名称は、舵取りまたは水先案内人を意味するギリシャ語の単語に由来するため、Kubernetesのロゴには船の舵が描かれています。
コンテナとは、ソースコードと、そのコードをあらゆる環境で実行するために必要なすべてのオペレーティング・システム(OS)ライブラリーや依存関係を組み合わせた、軽量で実行可能なアプリケーション・コンポーネントです。
コンテナでは、プロセスを分離してそれぞれがアクセス可能なCPU、メモリー、ディスクの容量を制御することにより、複数のアプリケーションがOSの単一インスタンスを共有できるようにするオペレーティング・システム(OS)の仮想化の一形態が利用されます。コンテナは仮想マシン(VM)よりも小さく、リソース効率が高く、移植性が高いため、最新のクラウドネイティブ・アプリケーションの実質的なコンピュート・ユニットとなっています。リソース効率の高さにより、使用するOSインスタンスの数を減らして、より少ないマシン(仮想サーバーおよび物理サーバー)でより多くのアプリケーションを実行できます。
コンテナはどこでも一貫して実行できるため、オンプレミス、プライベートクラウド、パブリッククラウド、複数のクラウド・ベンダーが提供する複数のクラウド・サービスが組み合わさった、ハイブリッド・マルチクラウド環境に対応する基盤アーキテクチャーにとって不可欠となっています。
Dockerは、Linux®コンテナの作成と実行に利用される最も人気の高いツールです。コンテナの初期形態は(FreeBSD JailsやAIX Workload Partitionsのような技術と共に)数十年前に導入されましたが、2013年にDockerがクラウドに適した新たな開発者向け実装でコンテナを一般に提供したことで、民主化されました。
Dockerはオープンソース・プロジェクトとして始まりましたが、現在では Docker Inc.も指します。Docker社は、オープンソース・プロジェクトに基づいて構築された商用コンテナ・ツールキットを製造し、それによるメリットをオープンソース・コミュニティーに還元しています。
Dockerは従来のLinuxコンテナ・テクノロジーに基づいて構築されていますが、Linuxカーネル・プロセスのよりきめ細かい仮想化を実現し、開発者がコンテナを容易に構築、デプロイ、管理、保護できる機能を追加しています。
今日では、Open Container Initiative(OCI)、CoreOS、Canonical(Ubuntu)LXDなどの代替コンテナ・ランタイム・プラットフォームも存在しますが、最も広く使用されているのはDockerです。実際、Dockerはコンテナの代名詞とみなされているほどです。また、Kubernetesなどの補完的なテクノロジーの競合ブランドと誤解されることもあります。
現在、DockerとKubernetesは主要なコンテナ化ツールとなっており、2024年の市場シェア率は、Dockerが82%、Kubernetesが11.52%を占めています。
コンテナが急増するにつれて、今日、1つの組織が数百個から数千個のコンテナを持つことすら珍しくなくなっており、運用チームは、コンテナのデプロイメント、ネットワーク、拡張性、可用性をスケジュールおよび自動化する必要があります。そこで役に立つのが、コンテナ・オーケストレーション・ツールです。
Google社の社内用コンテナ・オーケストレーション・プラットフォームであった「Borg」をベースに開発されたKubernetesは、2014年にオープンソース・ツールとして一般公開され、Microsoft社、Red Hat®社、IBMなどの大手テクノロジー企業がKubernetesコミュニティーの初期メンバーとして参加しました。2015年にGoogle社は、オープンソースでベンダー・ニュートラルなクラウドネイティブ・コンピューティングのハブである、Cloud Native Computing Foundation(CNCF)9にKubernetesを寄贈しました。
2016年3月、KubernetesはCNCFがホストするプロジェクトの第一弾になりました。以来、Kubernetesは、コンテナベースのワークロードの実行に世界で最も広く使用されるコンテナ・オーケストレーション・ツールとなっています。CNCFレポートによると、Kubernetesは世界で2番目に大きなオープンソース・プロジェクト(首位はLinux)であり、Fortune構成企業100社の71%で、主要なコンテナ・オーケストレーション・ツールに選ばれています。
2018年、KubernetesはCNCFの最初の卒業プロジェクトとなり、史上最も急速に成長したオープンソース・プロジェクトの1つとなりました。Docker SwarmやApache Mesosなど、他のコンテナ・オーケストレーション・オプションの中には早い段階で注目を集めたものもありましたが、急速に成長し、その後最も広く採用されるようになったのはKubernetesでした。
Kubernetesが2016年にCNCFに寄贈されて以来、コントリビューターの数は8,012人と、実に996%も増加しました。この記事を執筆している時点で、コントリビューターによって123,000件を超えるコミットがGitHubのKubernetesリポジトリーに追加されています。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
Kubernetesは、アプリケーションのライフサイクル全体を通じて、以下のようなコンテナ関連のタスクをスケジュールし、自動化する。
指定された数のコンテナを指定されたホストにデプロイし、それらを望ましい状態で実行し続けます。
ロールアウトとは、デプロイに対する変更です。Kubernetesを使用すると、ロールアウトを開始、一時停止、再開、ロールバックすることができます。
Kubernetesは、DNS名やIPアドレスを使用して、コンテナをインターネットや他のコンテナに自動的に公開することができます。
必要に応じてコンテナの永続的なローカル・ストレージまたはクラウド・ストレージを追加するようにKubernetesを設定できます。
Kubernetesのロード・バランシング機能を使用すると、CPU使用率またはカスタム・メトリクスを基にネットワーク全体でワークロードを分散して、パフォーマンスと安定性を維持できます。
トラフィックが急増すると、Kubernetes自動スケーリングは、追加のワークロードを処理するために、必要に応じて新しいクラスターを起動できます。
コンテナに障害が発生した場合、Kubernetesはコンテナを自動的に再起動または交換して、ダウンタイムを防ぎます。また、ヘルスチェック要件を満たさないコンテナを削除することもできます。
Kubernetesのデプロイには、Kubernetesアーキテクチャーの構成要素であるクラスターが含まれます。クラスターはノードで構成され、各ノードは単一のコンピューティング・ホスト(物理マシン(Bare Metal Servers)、略称VM)を表します。
Kubernetesアーキテクチャーは、コントロール・パネル・コンポーネントと個々のノードを管理するコンポーネントという2つの主要な部分で構成されます。
ノードはポッドで構成されます。これらは、同じコンピューティング・リソースと同じネットワークを共有するコンテナのグループであると同時に、Kubernetesの拡張性の単位でもあります。ポッド内のコンテナが、処理できる量を超えるトラフィックを取得している場合、Kubernetesはそのポッドをクラスタ内の他のノードに複製します。
コントロール・プレーンは、クラスター内のノード全体でポッドのスケジュールを自動的に処理します。
各クラスターには、クラスターのコントロール・プレーンを処理するマスター・ノードがあります。マスター・ノードは、開発者が設定したデプロイメント要件と利用可能なコンピューティング容量に基づいて、コンテナがいつどこにデプロイされるかを自動化するスケジューラー・サービスを実行します。
Kubernetesクラスターの主なコンポーネントは、kube-apiserver、etcd、kube-scheduler、kube-controller-manager、cloud-controller-managerです。
API Server:Kubernetesのアプリケーション・プログラミング・インターフェース(API)Serverは、Kubernetes API(Kubernetesクラスターの管理、作成、構成に使用されるインターフェース)を公開し、すべてのコマンドとクエリのエントリー・ポイントとして機能します。
etcd:etcdは、分散システムが実行し続けるために必要な情報を保持および管理するために使用される、オープンソースの分散キー値ストアです。Kubernetesでは、etcdが構成データ、状態データ、メタデータを管理します。
Scheduler:このコンポーネントは、新しく作成されたポッドを追跡し、ポッドを実行するノードを選択します。 Schedulerは、リソースの可用性と割り当てにおける制約、ハードウェアとソフトウェアの要件などを考慮します。
Controller-manager:組み込みコントローラーを一式まとめたKubernetes Controller-managerは、クラスターの共有状態を監視し、APIサーバーと通信してリソース、ポッド、またはサービスのエンドポイントを管理する制御ループを実行します。Controller-managerは、複雑な手順を簡素化し、1つのプロセスで実行できるようまとめられた個別のプロセスで構成されています。
Cloud-controller-manager:このコンポーネントは、controller-managerリンクと機能が似ています。クラウド・プロバイダーのAPIにリンクし、そのクラウド・プラットフォームと対話するコンポーネントを、クラスター内でのみ対話するコンポーネントから分離します。
Worker nodesは、コンテナ化されたアプリケーションのデプロイ、実行、管理を担当します。
Kubelet:Kubeletは、マスター・ノードからの命令を受信して実行し、コンテナがポッド内で確実に実行されるようにするソフトウェア・エージェントです。
Kube-proxy:
クラスター内のすべてのノードにインストールされたkube-proxyは、ホスト上のネットワーク・ルールを維持し、サービスとポッドの変更を監視します。
現在、90種類を超えるKubernetes認定製品があり、その中には、コンテナ化されたアプリケーションの開発と提供を加速するツール、アップグレード、アドオン機能を提供するエンタープライズ・グレードの管理プラットフォームが含まれています。
Kubernetesはコンテナベースのクラウド・アプリケーションをオーケストレーションするための最適なテクノロジーですが、完全に機能するには、ネットワーク、Ingress、負荷分散、ストレージ、継続的インテグレーション、継続的デリバリー(CI/CD)など、他のコンポーネントに依存します。
クラウドベースの環境でKubernetesクラスターをセルフ・ホスティングすることは可能ですが、企業のセットアップと管理が複雑になる可能性があります。ここでKubernetesマネージト・サービスが役に立ちます。
Kubernetesマネージト・サービスでは通常、プロバイダーがKubernetesのコントロール・プレーン・コンポーネントを管理します。マネージド・サービス・プロバイダーは、更新、負荷分散、スケーリング、監視の日常的なプロセスの自動化を支援します。例えば、Red Hat OpenShiftは、Amazon Web Services(AWS)、Microsoft Azure、Google Cloud、IBM Cloudなど、あらゆる環境やすべての主要なパブリッククラウドに導入できるKubernetesサービスです。多くのクラウド・プロバイダーは、独自のKubernetesマネージト・サービスも提供しています。
Kubernetes監視とは、Kubernetesクラスター内で実行されているコンテナ化されたアプリケーションの健全性、パフォーマンス、コスト特性に関連するデータを収集して分析することを指します。
Kubernetesクラスターを監視することで、管理者とユーザーは稼働時間、クラスター・リソースの使用状況、クラスター・コンポーネント間の相互作用を追跡できます。監視は、リソース不足、障害、クラスターに参加できないノードなどの問題を迅速に特定するのに役立ちます。今日のKubernetes監視ソリューションには、アプリケーション・パフォーマンス管理(APM)、可観測性、アプリケーション・リソース管理(ARM)などの自動化ツールが含まれています。
Kubernetesはポッドをデプロイおよびスケーリングできますが、ポッド間のルーティングを管理または自動化することはできず、これらの接続を監視、保護、またはデバッグするためのツールも提供していません。クラスター内のコンテナ数が増えると、コンテナ間の接続パスの数が激増します。例えば、2つのコンテナには2種類の接続方法がありますが、10個のポッドを作成するには90種類の接続方法があるため、構成と管理が困難になる可能性があります。
構成可能なオープンソースのサービス・メッシュ・レイヤーであるIstioは、Kubernetesクラスター内のコンテナを接続、監視、保護するソリューションを提供します。その他の重要な利点としては、デバッグ機能の向上や、DevOpsチームと管理者がコンテナ間の接続の遅延、サービス時間エラー、その他の特性を監視するために使用できるダッシュボードなどがあります。
Knative(「ケイネイティブ」と読みます)は、サーバーレス・コンピューティングへの容易な導入を提供するオープンソース・プラットフォームです。サーバーレス・コンピューティングは、開発者がサーバーやバックエンド・インフラストラクチャーをプロビジョニングまたは管理する必要がなく、アプリケーション・コードを構築して実行できるクラウド・コンピューティング・アプリケーションの開発および実行モデルです。
サーバーレスは、リクエストを待っている間、アイドル状態のコードの進行中のインスタンスをデプロイする代わりに、必要に応じてコードを起動し、需要の変動に応じてスケールアップまたはスケールダウンし、使用していないときはコードを停止します。サーバーレスでは、コードを実際に実行するときにのみ支払いが発生するため、コンピューティング容量と電力の無駄を防ぎ、コストを削減できます。
Tektonは、継続的統合とデリバリー(CI/CD)システムを作成するためのオープンソースでベンダーニュートラルなフレームワークであり、継続的デリバリー・ファウンデーション(CDF)によって管理されています。
Kubernetesネイティブのフレームワークであり、パイプライン、ワークフロー、その他のビルディング・ブロックの業界仕様を提供することで、継続的デリバリーのモダナイズを後押しし、複数のクラウド・プロバイダーやハイブリッド環境へのデプロイメントを迅速化、容易化させます。
Tektonは、一部のKnativeディストリビューションで引き続きサポートされているKnative Buildの後続フレームワークです。Tektonパイプラインは、コンテナ・イメージを構築し、Kubernetes 環境のコンテナ・レジストリーにデプロイするための標準となっています。
企業は、Kubernetesを使用して、最新のITインフラストラクチャーを構成する上で重要な役割を果たす次のようなユースケースを支援しています。
クラウドネイティブは、クラウドベースのアプリケーションを構築、デプロイ、管理するためのソフトウェア開発アプローチです。クラウドネイティブの主な利点は、DevOpsやその他のチームが一度コーディングすれば、任意のクラウド・サービス・プロバイダーの任意のクラウド・インフラストラクチャーにデプロイできることです。
この最新の開発プロセスで採用されるマイクロサービスに依存するアプローチでは、単一アプリケーションは疎結合で独立してデプロイ可能な多数の小さなコンポーネントまたはサービスで構成され、Kubernetesによって管理されるコンテナにデプロイされます。
Kubernetesは、各マイクロサービスが効率的に実行するために必要なリソースを確保すると同時に、複数のコンテナを手動で管理することに伴う運用諸経費を最小限に抑えるのに役立ちます。
ハイブリッドクラウドは、パブリッククラウド、プライベートクラウド、オンプレミスのデータセンター・インフラストラクチャーを組み合わせ、柔軟性が高くコストが最適化された単一のITインフラストラクチャーを構成します。
現在、ハイブリッドクラウドは、複数のクラウド・ベンダーのマルチクラウド・パブリッククラウド・サービスと統合され、ハイブリッド・マルチクラウド環境が構築されています。
ハイブリッド・マルチクラウド・アプローチにより柔軟性が向上し、組織の単一ベンダーへの依存度が軽減され、ベンダー・ロックインを回避できます。Kubernetesはクラウドネイティブ開発の基盤を構築するため、ハイブリッド・マルチクラウドの導入の鍵となります。
Kubernetesは、自動スケーリングによる大規模なクラウド・アプリのデプロイメントをサポートします。このプロセスにより、アプリケーションはスケールアップまたはスケールダウンして、需要の変化に自動的に適応し、スピードと効率性を維持し、ダウンタイムを最小限に抑えることができます。
Kubernetesデプロイメントの柔軟な拡張性により、小売店Webサイトでのフラッシュ・セールなど、ユーザー・トラフィックの変化に基づいてリソースを追加または削除できます。
Kubernetesは、アプリケーションの最新化をサポートし、モノリシックなレガシー・アプリケーションをマイクロサービス・アーキテクチャー上に構築されたクラウド・アプリケーションに移行および変換するために必要な最新のクラウド・プラットフォームを提供します。
オートメーションはDevOpsに書かせません。ソフトウェア開発チームとIT運用チームの作業を連携させて自動化することで、より高品質なソフトウェアの開発速度を短縮します。
Kubernetesは、アプリケーションの構成とデプロイを自動化することで、DevOpsチームがアプリケーションを迅速に構築および更新できるようにします。
AIをサポートするMLモデルと大規模言語モデル(LLM)には、個別に管理するのが難しく時間のかかるコンポーネントが含まれています。Kubernetesは、クラウド環境全体の構成、デプロイメント、拡張を自動化することで、これらの複雑なモデルを迅速かつ柔軟にトレーニング、テスト、デプロイします。
Kubernetesの使用を開始したい場合、またはKubernetesおよびKubernetesエコシステム・ツールに関する既存のスキルを強化したい場合は、次のチュートリアルのいずれかをお試しください。
Red Hat OpenShift on IBM Cloudは、フルマネージドのOpenShiftコンテナ・プラットフォーム(OCP)です。
コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントにより、コンテナ化されたワークロードを実行およびスケールアップします。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。