このドキュメントでは、オープンソースのコンテナ オーケストレーション プラットフォームである Kubernetes の基本的な原理について説明します。Google Distributed Cloud(GDC)エアギャップの多くのコンポーネントは Kubernetes をベースにしています。このドキュメントの多くは、Kubernetes の基本的なコンセプトと用語をすでに理解していることを前提としています。Kubernetes に慣れていない場合は、このドキュメントを参考にして、おすすめの書籍を読み始めることをおすすめします。
Kubernetes の基本を学習することは、GDC アプリケーションと基盤となるシステム コンポーネントの設計、デプロイ、管理に不可欠です。GDC を正常に運用するには、次の技術専門家が Kubernetes を理解している必要があります。
- 基盤となる GDC ソフトウェアとハードウェア インフラストラクチャのインストールと保守を担当するインフラストラクチャ オペレーター グループ内のオペレーター。
- GDC で復元力のあるインフラストラクチャとアプリケーション アーキテクチャの設計を担当するプラットフォーム管理者グループ内の管理者。
- アプリケーションの構築を担当するアプリケーション オペレーター グループ内のデベロッパー。
詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。
Kubernetes について
Kubernetes はオープンソースのコンテナ オーケストレーション プラットフォームです。Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するノードと呼ばれるワーカーマシンのセットです。クラスタ全体は、API サーバー、スケジューラ、etcd データベースなどのコンポーネントを含むコントロール プレーンによって管理され、クラスタの状態を維持する役割を担います。
アプリケーションは、Kubernetes でデプロイ可能な最小単位である Pod にパッケージ化されます。Pod には 1 つ以上のコンテナを含めることができ、ノードで実行できます。クラスタ内のリソース(多くの場合、異なるチームまたは環境用)を整理するために、Kubernetes は Namespace を使用します。
Pod のライフサイクルと状態は、コントローラによって管理されます。たとえば、Deployment オブジェクトはローリング アップデートを管理し、ReplicaSet オブジェクトは特定の数の Pod レプリカが実行されていることを確認します。Pod にアクセスするための IP アドレスや DNS 名などの安定したネットワーク エンドポイントを提供するために、Kubernetes は Service を使用します。
コンテナ ストレージはデフォルトでエフェメラルであるため、Kubernetes には、データを管理するためのボリュームや永続ボリュームなど、さまざまなストレージ抽象化が用意されています。
クラスタ リソースと Kubernetes API へのアクセスを保護するために、Kubernetes はロールベース アクセス制御(RBAC)を使用して、ロール、クラスタロール、バインディングを定義し、ユーザーとサービス アカウントに特定の権限を付与します。
主なコンセプト
GDC ドキュメント全体で使用される主なコンセプトを次に示します。これは、Kubernetes のコンセプトをすべて網羅したリストではありません。Kubernetes のドキュメントと推奨されるドキュメントで提供されているトピックで、さらに多くのコンセプトを確認できます。
ノードとクラスタ
すべての Kubernetes ワークロードはノードで実行されます。GDC では、ノードは仮想マシン(VM)です。その他の Kubernetes プラットフォームでは、ノードは物理マシンまたは仮想マシンになります。各ノードは Kubernetes コントロール プレーンによって管理されます。ノードには、Pod の実行に必要なすべてのコンポーネントが含まれています。クラスタとは、1 つのエンティティとしてまとめて処理できる一連のノードのことで、コンテナ化されたアプリケーションをデプロイする場所になります。
詳細については、Kubernetes のドキュメントをご覧ください。
Kubernetes コントロール プレーン
Kubernetes のコントロール プレーンは、クラスタの全体的な状態を管理するシステム コンポーネントのセットです。これには、kubectl CLI などのツールを使用してクラスタやアプリケーションを操作できる Kubernetes API サーバー、使用可能なノードで Pod をスケジュールするスケジューラ、クラスタの状態を追跡して管理するコントローラが含まれます。コントロール プレーンは GDC によって提供および管理されます。
詳細については、Kubernetes のコントロール プレーン コンポーネントのドキュメントをご覧ください。
Pod
Kubernetes では、コンテナ化されたアプリケーションは Pod 内で実行されます。Pod は、Kubernetes で作成して管理できる、デプロイ可能なコンピューティングの最小単位です。Pod には 1 つ以上のコンテナがあります。Pod で複数のコンテナ(アプリケーション サーバーやプロキシ サーバーなど)が実行される場合、コンテナは単一のエンティティとして管理され、Pod のリソースを共有します。
詳細については、Kubernetes のドキュメントをご覧ください。
名前空間
Kubernetes Namespace は、クラスタ内の Pod や Service などのリソースをさらにグループ化して選択するためのメカニズムを提供します。たとえば、単一のクラスタでワークロードを実行する複数のアプリケーション チームがある場合などです。
詳細については、Kubernetes の Namespace のドキュメントをご覧ください。
コントローラ
Kubernetes コントローラは、指定した状態(たとえば「このクラスタでこの Pod を 3 つ実行し、各 Pod にこのコンテナを配置する」など)に基づいて、クラスタとワークロードの状態を追跡して管理します。コントローラによって、次のような異なる Kubernetes リソースタイプが追跡されます。
Kubernetes コントローラは、指定した状態に基づいて、クラスタとワークロードの状態を追跡して管理します。たとえば、クラスタの動作を、各 Pod に指定されたコンテナを含む 3 つの Pod を実行するように設定できます。コントローラによって、次のような異なる Kubernetes リソースタイプが追跡されます。
- Deployment:
Deploymentカスタム リソースは、レプリカと呼ばれる 1 つ以上の同一の Pod を表す Kubernetes オブジェクトです。Deployment は、クラスタのノード間で分散された Pod の複数のレプリカを実行します。Deployment は、失敗した Pod や応答しなくなった Pod を自動的に置き換えます。 - StatefulSet:
StatefulSetカスタム リソースは Deployment に似ていますが、各 Pod に一意の永続 ID を保持します。StatefulSetリソースは、ステートフル アプリケーションなど、永続状態を使用するアプリケーションで役立ちます。 - DaemonSet:
DaemonSetカスタム リソースを使用すると、一部またはすべてのノードにデフォルトの Pod を追加できます。多くの場合、これらはワークロードのヘルパー サービスです(ログ収集デーモンやモニタリング デーモンなど)。 - ReplicaSet:
ReplicaSetカスタム リソースは、同一の Pod のセットです。ReplicaSetは通常、Deploymentリソースの一部として管理されます。
詳細については、Kubernetes のドキュメントをご覧ください。
Kubernetes Service
デフォルトでは、Pod を実行するクラスタノードを制御できないため、Pod には安定した IP アドレスがありません。Kubernetes で実行されているアプリケーションの IP アドレスを取得するには、Pod の上に Kubernetes Service と呼ばれるネットワーク抽象化を定義する必要があります。Kubernetes Service は、一連の Pod に安定したネットワーク エンドポイントを提供します。Service のタイプには、クラスタ外からアプリケーションにアクセスできるように外部 IP アドレスを公開する LoadBalancer Service などがあります。
Kubernetes には、内部アドレス解決用の組み込み DNS システムもあります。これは、helloserver.default.cluster.local などの DNS 名をサービスに割り当てます。これにより、クラスタ内の Pod が安定したアドレスを使用してクラスタ内の他の Pod にアクセスできます。この DNS 名は、gdcloud CLI などクラスタの外部からは使用できません。
詳細については、Kubernetes の Services ドキュメントをご覧ください。
ストレージ
ステートフル アプリケーションなど、アプリケーションが Pod の存続期間を超えて存在するデータを保存する必要がある場合は、Kubernetes PersistentVolume オブジェクトを使用してこのストレージをプロビジョニングできます。エフェメラル ストレージを使用することもできます。エフェメラル ストレージは、対応する Pod が終了すると破棄されます。
詳細については、Kubernetes のドキュメントをご覧ください。
ロールベースのアクセス制御
Kubernetes には、クラスタとそのリソースへのアクセスの認可ポリシーを作成できるロールベース アクセス制御(RBAC)メカニズムが用意されています。GDC を使用する場合は、Kubernetes RBAC と GDC の Identity and Access Management(IAM)を組み合わせてアプリケーションを保護することがよくあります。
詳細については、Kubernetes のロールベースのアクセス制御に関するドキュメントをご覧ください。
関連情報
このセクションでは、Kubernetes の詳細を確認するためのおすすめのリソースへのリンクを示します。特に、Kubernetes の公式ウェブサイトである Kubernetes.io には、Kubernetes に関する包括的で信頼できる資料が多数あります。
外部のガイドとチュートリアル
- Kubernetes の概要: Kubernetes の概念的な概要を説明しています。
- チュートリアル: Kubernetes の基本を学ぶ: 例を使用して Kubernetes の基本を学習します。
- Kubernetes チュートリアル: 基本を学んだら、Kubernetes ドキュメントのこのセクションで、ステートフル アプリケーションからセキュリティまで、さまざまな Kubernetes トピックに関するチュートリアルをご覧ください。
リファレンス ドキュメント
- Kubernetes 用語集: Kubernetes 用語の包括的で標準化されたリスト。Kubernetes の用語がわからない場合は、用語集を参照してください。