このドキュメントでは、オープンソースのコンテナ オーケストレーション プラットフォームである 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 はデータを管理するために、 ボリュームや PersistentVolume などのさまざまなストレージ抽象化を提供します 。
クラスタ リソースと 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 システムもあります。これは、DNS 名(helloserver.default.cluster.local
など)を Service に割り当てます。
これにより、クラスタ内の Pod が安定したアドレスでクラスタ内の他の Pod
にアクセスできます。この DNS 名は、gdcloud CLI などクラスタの外部からは使用できません。
詳細については、Kubernetes Service のドキュメントをご覧ください。
ストレージ
アプリケーションが 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 の用語がわからない場合は、用語集を参照してください。