第2章 ROSA アーキテクチャー
2.1. アーキテクチャーの概念
Red Hat OpenShift Service on AWS アーキテクチャーで使用される OpenShift およびコンテナーの基本概念を説明します。
2.1.1. OpenShift
OpenShift は、エンタープライズワークロードを実行するための信頼できる環境を提供する Kubernetes コンテナープラットフォームです。これは、ビルトインソフトウェアで Kubernetes プラットフォームを拡張し、アプリケーションのライフサイクルの開発、操作、およびセキュリティーを強化します。OpenShift を使用すると、複数のハイブリッドクラウドプロバイダーおよび環境全体でワークロードを一貫した方法でデプロイできます。
2.1.2. Kubernetes
Red Hat OpenShift Service on AWS (ROSA) は、エンタープライズ Kubernetes プラットフォームである Red Hat OpenShift を使用します。Kubernetes は、コンテナー化されたワークロードおよびサービスを複数のホスト間で管理するためのオープンソースプラットフォームであり、手動の介入を最小限に抑えるか、手動の介入なしにコンテナー化されたアプリケーションをのデプロイ、自動化、監視、スケーリングを行う管理ツールを提供します。Kubernetes の詳細は、Kubernetes ドキュメント を参照してください。
- クラスター、コンピュートノード、およびコンピュートノード
Kubernetes クラスターは、コントロールプレーンおよび 1 つまたは複数のコンピュートノードで設定されます。コンピュートノードは、CPU、メモリー、オペレーティングシステム、割り当てられたディスク、およびその他のプロパティーのタイプまたはプロファイルごとにコンピュートプールで整理されます。コンピュートノードは Kubernetes
Nodeリソースに対応し、クラスター内のすべての Kubernetes リソースを制御し、監視する Kubernetes コントロールプレーンによって管理されます。コンテナー化されたアプリケーションのリソースをデプロイする場合、Kubernetes コントロールプレーンは、デプロイメント要件およびクラスターで利用可能な容量を考慮して、これらのリソースをデプロイするコンピュートノードを判別します。Kubernetes リソースには、サービス、デプロイメント、および Pod が含まれます。
- namespace
-
Kubernetes namespace は、クラスターを複数のチームと共有する場合などに、アプリケーションをデプロイし、アクセスを制限できる複数の領域にクラスターリソースを分割する方法です。たとえば、設定されるシステムリソースは、
kube-systemなどの別の namespace に保持されます。Kubernetes リソースの作成時に namespace を指定しない場合、リソースはdefaultnamespace に自動的に作成されます。 - Pod
- クラスターにデプロイされるコンテナー化アプリケーションはすべて、Pod と呼ばれる Kubernetes リソースによってデプロイされ、実行され、管理されます。Pod は、Kubernetes クラスターの小規模なデプロイ可能な単位を表し、単一の単位として処理する必要のあるコンテナーをグループ化するために使用されます。ほとんどの場合、各コンテナーは独自の Pod にデプロイされます。ただし、アプリケーションではコンテナーおよび他のヘルパーコンテナーを 1 つの Pod にデプロイして、それらのコンテナーを同じプライベート IP アドレスを使用して処理できるようにする必要がある場合があります。
- アプリケーション
- アプリケーションは、アプリケーションの完全なアプリケーションまたはアプリケーションのコンポーネントを指すことがあります。アプリケーションのコンポーネントを別の Pod にデプロイすることも、別のコンピュートノードにデプロイできます。
- サービス
- サービスは、Pod のセットをグループ化し、各 Pod の実際のプライベート IP アドレスを公開せずにこれらの Pod へのネットワーク接続を提供する Kubernetes リソースです。サービスを使用して、クラスター内またはパブリックインターネットでアプリケーションを利用できるようにすることができます。
- デプロイメント
デプロイメントは、サービス、永続ストレージまたはアノテーションなどのアプリケーションの実行に必要な他のリソースまたは機能についての情報を指定できる Kubernetes リソースです。設定 YAML ファイルでデプロイメントを設定してから、これをクラスターに適用します。Kubernetes メインリソースを設定し、利用可能な容量を持つコンピュートノードの Pod にコンテナーをデプロイします。
ローリング更新時に追加する Pod の数や、同時に利用できない Pod 数など、アプリケーションの更新ストラテジーを定義します。ローリング更新の実行時に、デプロイメントは更新が機能しているかどうかを確認し、障害の検出時にロールアウトを停止します。
デプロイメントは、Pod を管理するのに使用できるワークロードコントローラーの 1 つのタイプです。
2.1.3. コンテナー
コンテナーは、アプリケーションコード、設定、および依存関係を単一のユニットにパッケージ化する標準的な方法を提供します。コンテナーは、コンピュートホストで分離されたプロセスとして実行し、ホストオペレーティングシステムとそのハードウェアリソースを共有します。コンテナーは環境をまたがって移動でき、変更せずに実行できます。仮想マシンとは異なり、コンテナーはデバイス、そのオペレーティングシステム、および基礎となるハードウェアの仮想化を行いません。アプリケーションコード、ランタイム、システムツール、ライブラリーおよび設定のみがコンテナー内でパッケージ化されます。この方法により、コンテナーは仮想マシンと比較してより軽量で移植可能となり、より効率的になります。
OCI 準拠のコンテナーイメージは、既存の Linux コンテナーテクノロジー (LXC) 上にビルドされ、ソフトウェアをアプリケーションの実行に必要なすべての要素を含む標準化された単位にパッケージ化する方法に関するテンプレートを定義します。Red Hat OpenShift Service on AWS (ROSA) は CRI-O をコンテナーランタイムとして使用し、コンテナーをクラスターにデプロイします。
ROSA の Kubernetes でアプリケーションを実行するには、最初にコンテナーレジストリーに保存するコンテナーイメージを作成してアプリケーションをコンテナー化する必要があります。
- イメージ
- コンテナーイメージは、実行するすべてのコンテナーのベースです。コンテナーイメージは、イメージをビルドする方法を定義し、アプリケーション、アプリケーション設定、およびその依存関係などの追加するアーティファクトをビルドするテキストファイルの Dockerfile です。イメージは常に他のイメージからビルドされるため、迅速に設定できます。
- レジストリー
- イメージレジストリーは、コンテナーイメージを保存し、取得し、共有する場所です。レジストリーに保存されているイメージには、公開されている (パブリックレジストリー) か、小規模なユーザーのグループ (プライベートレジストリー) がアクセスできます。ROSA は、最初のコンテナー化されたアプリケーションを作成する際に使用できるパブリックイメージを提供します。エンタープライズアプリケーションの場合は、プライベートレジストリーを使用して、権限のないユーザーがイメージを使用できないようにできます。