Kubernetes(K8s)クラスタとは

最新のアプリケーションの構築やデプロイを担うエンタープライズ デベロッパーにとっての共通の課題は、コンテナ化されたワークロードを大規模に管理することです。Kubernetes(K8s と略されることもあります)は、コンテナ オーケストレーションの標準として台頭しており、この強力なオープンソース システムの中核をなすのが Kubernetes クラスタです。これは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するために設計された堅牢な環境を提供します。

Kubernetes クラスタ
Kubernetes クラスタの図

Kubernetes クラスタの定義

Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するためにグループ化されたノード(マシン)のセットです。統合および抽象化されたコンピューティング環境が提供されるため、個々のサーバーと直接やり取りすることなく、サービスのデプロイや管理が可能になります。

K8s クラスタの主な役割はコンテナ オーケストレーションです。アプリケーションの可用性の維持、需要に応じたリソースのスケーリング、ダウンタイムを伴わないアップデートのロールアウトなど、複雑なタスクを自動化します。

Kubernetes クラスタは、コンテナのライフサイクル全体を管理することで、スケーラブルかつアジャイルなエンタープライズ アプリケーション構築に必要な基盤プラットフォームを提供します。

ノード

ノードは Kubernetes クラスタ内のワーカーマシンであり、クラウド プロバイダの仮想マシン(VM)、またはデータセンターの物理サーバーのいずれかです。各ノードは、コンテナを実行するために必要な CPU、メモリ、ネットワーク リソースを提供します。K8s クラスタは少なくとも、1 つのコントロール プレーンと 1 つ以上のワーカーノードで構成され、これらが連携してクラスタのコンピューティング能力を提供します。

Pod

Kubernetes オブジェクト モデルにおいて、最も基本的なデプロイ可能な最小単位は Pod です。Pod は、クラスタ内のアクティブなプロセスの単一インスタンスを表し、密結合された 1 つ以上のコンテナ、共有ストレージ リソース、一意のネットワーク IP アドレスをカプセル化します。Pod には複数のコンテナを含めることができますが、最も一般的なパターンは、Pod に 1 つのコンテナを格納し、Pod とコンテナ化されたアプリケーションの間に 1 対 1 のマッピングを作成することです。

コンテナ

コンテナは、軽量かつスタンドアロンの実行可能なソフトウェアのパッケージで、コード、ランタイム、システムツール、システム ライブラリ、設定など、アプリケーションの実行に必要なすべての要素を含みます。このカプセル化により、コンピューティング環境間でアプリケーションをすばやく信頼性のある方法で実行できます。コンテナはポータブルで効率的であるため、最新のマイクロサービスをベースとしたアプリケーションにとって理想的な構成要素です。

K8s クラスタのアーキテクチャ

Kubernetes クラスタ アーキテクチャは、アプリケーションを実行するためのフォールト トレラントなシステムを作成するのに役立つ 2 つの主要なコンポーネントで構成されています。

  • コントロール プレーン: クラスタを管理する頭脳として機能します。
  • ワーカーノード: ランタイム環境を提供することで、実際の実行を担います。

コントロール プレーン(マスターノード)

コントロール プレーンは、クラスタ全体の望ましい状態を維持する役割を担います。スケジューリングに関するグローバルな決定を行い、クラスタ イベントに対応し、すべての Kubernetes オブジェクトのライフサイクルを管理します。コントロール プレーンの主なコンポーネントは次のとおりです。

  • バッキング ストア(etcd): 整合性があり可用性の高い Key-Value ストアで、Kubernetes ですべてのクラスタデータのバックアップ保存先として使用されます。
  • API サーバー(kube-apiserver): コントロール プレーンのフロントエンドとして機能し、Kubernetes API を公開します。REST リクエストを管理および検証し、その後、etcd 内の関連オブジェクトの状態を更新します。
  • スケジューラ(kube-scheduler): ノードが割り当てられていない新しく作成された Pod を監視し、リソースの可用性、ポリシー、アフィニティの仕様に基づいて、その Pod を実行するノードを選択します。
  • コントローラ マネージャー(kube-controller-manager)[オプション]: クラスタの状態を調整するさまざまなコントローラ プロセスを実行します。たとえば、ノード障害の処理、デプロイにおける正しい Pod 数の維持、サービスのエンドポイントの管理を行います。

ワーカーノード(コンピューティング ノード)

ワーカーノードは、コンテナ化されたアプリケーションが実際に実行されるマシンです。各ノードはコントロール プレーンによって管理され、Pod の実行に必要なサービスが含まれています。各ワーカーノードのコア コンポーネントは次のとおりです。

  • kubelet: クラスタ内の各ノードで実行されるエージェント。kubelet はコントロール プレーンと通信し、Pod の仕様に記述されたコンテナが実行され、正常であることを確認します。
  • kube-proxy [オプション]: このネットワーク プロキシは各ノードで実行され、ノードのネットワーク ルールを維持する役割を担います。これらのネットワーク ルールにより、クラスタ内外のネットワーク セッションから Pod へのネットワーク通信が可能になります。
  • コンテナ ランタイム: コンテナの実行を管理し、さまざまなランタイムをサポートするソフトウェアです。最もよく利用されているのは containerd です。

K8s でのクラスタの使用

Kubernetes クラスタは汎用性が高く、企業開発チームや運用チームが直面する多くの課題に対処できます。

既存のアプリケーションのコンテナ化

大規模なリファクタリングを行わずに、レガシー アプリケーションをコンテナに移行して、ポータビリティ、スケーラビリティ、リソース使用率を向上させます。

新しいクラウドネイティブ アプリケーションの構築

K8s クラスタをマイクロサービス ベースのアーキテクチャの基盤として使用し、サービスの独立した開発、デプロイ、スケーリングを可能にします。

DevOps と CI / CD

Kubernetes クラスタと統合して、ビルド、テスト、デプロイのパイプラインを自動化し、リリース サイクルを加速し、信頼性を向上させます。

スケーラビリティと復元力

アプリケーションを自動的にスケールアップまたはスケールダウンして、変動するトラフィック負荷に対応します。また、障害が発生したコンテナを自動的に再起動または置き換えることで、自己修復を可能にします。

効率的なリソース

コンテナをより少ないノードに高密度に配置することでインフラストラクチャの使用率を向上させ、大幅な費用削減を実現します。


Google Cloud でビジネスの課題を解決する

新規のお客様には、Google Cloud で使用できる無料クレジット $300 分を差し上げます。

Kubernetes クラスタの管理

Kubernetes は非常に強力なプラットフォームですが、安全なプロダクション グレードの K8s クラスタをセットアップして運用するには、かなりの運用オーバーヘッドが発生します。こうした課題に対して、Google Kubernetes Engine(GKE)のようなマネージド サービスは、エンタープライズ チームに大きな価値をもたらします。GKE は、複雑で時間のかかるタスクの多くを自動化することで、Kubernetes クラスタの管理を簡素化します。

GKE はフルマネージドのコントロール プレーンを提供し、可用性、パッチ適用、アップデートの管理を代行するため、チームがそれを行う必要はありません。また、Autopilot モードなどの機能が用意されており、ノードやスケーリングなど、クラスタ全体の運用管理を自動化して、オーバーヘッドをさらに削減し、リソース使用率を最適化できます。GKE を活用すると、基盤となる Kubernetes クラスタ アーキテクチャとインフラストラクチャの管理、セキュリティ、信頼性、スケーラビリティの確保はプラットフォーム側で行われ、デベロッパーはコードの記述とアプリケーションの構築に集中できるようになります。

Kubernetes クラスタの学習用リソース

  • Google Cloud プロダクト
  • 100 種類を超えるプロダクトをご用意しています。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。また、すべてのお客様に 25 以上のプロダクトを無料でご利用いただけます(毎月の使用量上限があります)。
Google Cloud