Kubernetesとは

Kubernetes(別名「K8s」)は、オープンソースのコンテナオーケストレーションプラットフォームです。ホストのクラスタ上で実行される移植性の高いコンテナベースのアプリケーションを管理することができます。Kubernetesを使用すると、クラウドネイティブアプリケーションをどこにでもデプロイすることができ、それがどこにあっても好きな方法で管理できます。

Kubernetesという名前は、「操舵手」または「水先案内人」を表すギリシャ語に由来します。通称の「K8s」は、頭文字のK、中間の文字数である8、末尾のsをとったものです。

Kubernetesとコンテナ化の説明

コンテナ化により、アプリケーションは小さな単位(多くの場合、マイクロサービス)に分けられ、どのような環境でもアプリケーションを確実に実行できるよう、必要なすべての要素とともにパッケージ化されます。組織では、オンプレミスやマルチクラウドといった様々な環境にこうした移植性の高いコンテナを大量にデプロイすることが多くなっています。コンテナは開発環境と本番環境に移植することができ、サービスの需要が増えた場合、ITチームがすばやく簡単に拡張することが可能です。

Kubernetesは、こうしたコンテナを追跡、スケジュール、管理するためのオーケストレーションソリューションです。Kubernetesは、各コンテナが所定の場所にあることを確認したり、他のコンテナとうまく連携できるようにしたりすることで、サービスをスムーズかつ設計どおりに実行できるようにします。また、長期間実行されるサービスの実行を継続しつつ、ビルドなどの短期間で集中的に実行される作業とのバランスを保つことを可能にします。

Kubernetesで進化するローコードプラットフォーム

ITチームに負担をかけずにKubernetesを導入する方法を紹介しています。

ホワイトペーパーを入手

Kubernetesは、フレームワーク、プラットフォーム、コンテナ管理ツール、コンテナオーケストレーションシステムといった様々な言葉で説明されます。そして、そのすべてが正解です。Kubernetesを管理する非営利団体であるCloud Native Computing Foundation(CNCF)は、「コンテナベースのクラスタ環境でデプロイを自動化し、アプリケーションの管理を行うことができるオープンソースのフレームワーク」としています。

コンテナ管理用プラットフォームはほかにもありますが、Kubernetesには大規模で今も拡大中のツール、サービス、サポートのエコシステムがあり、コンテナシステムの管理とオーケストレーションを行うフレームワークとして最も幅広く利用されています。

Kubernetesの仕組み

複数のサービスや環境に多数のコンテナがあり複雑化している場合、これらを管理したり自動化したりする必要があります。Kubernetesは、オープンソースのAPIによってコンテナを実行する場所と方法を管理します。さらに、リソースの自動化とプロビジョニングタスクも請け負ってくれるため、拡張プロセスが簡単になります。

KubernetesはOS上で実行されます。Linuxで最も多く利用されていますが、Windowsやその他のOSでも利用できます。Kubernetesをデプロイするとクラスタが作成されます。最もベーシックなレベルでは、ここに含まれるのはワーカーマシン(ノード)とマネージャ(コントロールプレーン)のみです。このクラスタは、物理マシン上、仮想マシン上、または物理マシン上と仮想マシン上の両方に存在することができ、共有ネットワークを介して互いに通信します。このクラスタ内にKubernetesのすべてのコンポーネントと機能が入っています。

Kubernetesは利用可能なコンピューティングリソースや各コンテナの要件に基づいてこれらのクラスタを管理し、最も効率よくコンテナを実行できるようにスケジューリングを行います。こうしたクラスタや、クラスタが必要とするストレージを管理することを「オーケストレーション」といいます。

ここで、Kubernetesのレイヤーを理解するために役立つ基本的な用語を紹介しましょう。

  • コントロールプレーン: コントロールプレーンはオーケストレーションレイヤーです。プロセスを統制し、Kubernetesクラスタの通信ディレクター役を果たします。コントロールプレーンの中核をなすのがKubernetes APIサーバーです。開発者はこれを利用してリソースのプロビジョニングや管理に関連するタスクを自動化できます。負荷のスケジューリングや分配、アプリケーションの起動などのタスクの割り当ては、すべてコントロールプレーンが指示します。Kubernetesのコントロールプレーンは1つの主ノード上で実行されます。高可用性クラスタでは複数のノードにわたって存在することもできます。

  • ノード: ノードは、コントロールプレーンからリクエストされた処理を実行するワーカーマシンです。各ノードには、DockerやKubeletなどのコンテナランタイムが必要です。Dockerはコンテナイメージにアクセスしてアプリケーションを実行します。Kubeletは、コントロールプレーンがノードを管理できるようにする通信プロセスです。ノードは1つまたは複数のPodで構成されます。

  • Pod: PodはKubernetesエコシステムで最小の単位です。1つ以上のコンテナベースのアプリで構成され、それぞれに存在する場所のIPアドレスがあります。Podはノード内で動作します。

  • クラスタ: Kubernetesクラスタは、コントロールプレーンとともにコンテナベースのアプリケーションを実行するノード群です。

  • サービス: アプリケーションは、ユーザーがアクセスできるように公開する必要があります。アプリケーションが他のアプリケーションに含まれる機能にアクセスできるようにするには、機能をサービスとして構成し、キーと値のペアと呼ばれるメタデータを、ラベルと注釈の形式で追加します。このラベルと注釈を使用することで、Kubernetesサービスとポッドを関連付けることができます。このアーキテクチャのおかげで疎結合のサービスディスカバリが可能になり、必要なサービスの検出プロセスを自動化できます。

組織がKubernetesを選択する理由とそのメリット

コンテナベースのアプリケーションに含まれるマイクロサービスを管理する必要性が増えてくると、組織はKubernetesを導入するようになります。開発組織は、コンテナのデプロイ、拡張、管理を自動化し、必要な運用リソースを減らすためにKubernetesを活用しています。Kubernetesは、アプリケーションを機能ユニットにグループ化することで管理やディスカバリを簡素化します。また、オープンソースAPIを使用してコンテナの実行方法や実行場所を管理します。

Kubernetes導入のメリットは以下のとおりです。

  • 高速化の実現と開発への集中。開発者がレガシーアプリケーションを小さな機能クラスタにリファクタリングして新しいクラウドネイティブアプリケーションを作成する際、Kubernetesを使用すると準備ができたサービスから新しいサービスとしてリリースすることができます。アプリケーション全体の完成を待つ必要はありません。開発者は、ソフトウェアのPodの状態を変更することで新しいソフトウェアのデプロイ、デプロイの一時停止、拡張、ロールバック、不要なPodのクリーンアップを行うことができます。こうした自動化によって手動のプロセスがなくなります。

  • アプリケーションをあらゆる場所にデプロイ可能。Kubernetesはあらゆる場所で実行できるように設計されているため、オンプレミス、パブリッククラウド、ハイブリッドクラウドなど自由に環境を組み合わせてクラスタを実行することができます。

  • サービスの健全性を維持。Kubernetesはシステムの健全性を監視し、必要なときに必要な場所でサービスを利用できるようにします。可用性を確保し、自己修復機能によってレジリエンスを提供します。さらに、障害のあるコンテナを検出して再起動したり、障害のあるノードを再スケジュールしたり、応答していないコンテナを破棄したりもします。

  • コンテナとアプリケーションを効率よく実行。自動パッケージ化により、開発者がコンテナの要件だけ指定して、リソースの割り当て方法はKubernetesの判断に任せることが可能です。Kubernetesが自動的にコンテナをノードに振り分けるため、手作業が減り、リソースを最大限に利用できます。Kubernetesは、需要に基づいて自動的にクラスタを拡張したり、負荷分散機能によってトラフィックを均等に分散させたりすることもできます。

Kubernetesの起源と管理

Kubernetesは、Googleで15年以上も前に開発され、毎週数十億ものコンテナを作成していた「Borg」と呼ばれる社内クラスタ管理システムから生まれました。2014年にKubernetesを公開したGoogleは、これが技術シーズであると考え、2015年にLinux Foundationに寄付しました。これを受け、Linux FoundationはKubernetesを管理する非営利技術コンソーシアムとしてCNCFを創設しました。2018年、GoogleはKubernetesの運用権をコミュニティに正式に譲渡しました。Linux Foundationによると、Kubernetesはオープンソースソフトウェア史上最も成長の早いプロジェクトのひとつだそうです。

Kubernetes環境のサポートを強化するため、CNCFはCertified Kubernetes Administrator(CKA)資格認定やCertified Kubernetes Application Developer(CKAD)認定を行っています。また、Certified Kubernetes Conformance Program(KCSP)ではベンダーの製品やサービスの認定を行っています。このプログラムを活用することで、ベンダーは自社の製品やサービスが所定のKubernetes APIに適合し、他のKubernetes実装で動作することを証明できます。

Kubernetesによるコンテナベースのアプリの効率的な管理

大規模アプリケーションの高速開発とデプロイの競争が続く中、Kubernetesは開発チームの必須ツールになっています。Kubernetesの使用と管理の詳細については、このトピックに関するテックトークをご覧ください