Autonomous Databaseに接続されたKubernetesへのマイクロサービスベースのアプリケーションのデプロイ
開発者またはアプリケーション管理者は、クラウド・ネイティブ・アプリケーションを設計および管理する際に、プロビジョニングとメンテナンスが容易で、設計とビジネスの目標に集中できるインフラストラクチャが必要です。OCI Kubernetes Engine(OKE)を使用すると、高可用性でスケーラブルなマイクロサービスベースのアプリケーションをクラウドにデプロイして実行できます。
アーキテクチャ
マイクロサービス・アーキテクチャでは、各マイクロサービスは単純なタスクを実行し、REST APIリクエストなどの軽量メカニズムを使用してクライアントまたはその他のマイクロサービスと通信します。
このリファレンス・アーキテクチャは、KubernetesクラスタにDockerコンテナとしてデプロイされた複数の多言語マイクロサービスで構成されるeコマース・アプリケーション向けです。データの永続性は、Oracle Autonomous Transaction Processingデータベースを使用して実現されます。eコマース・アプリケーションのメディアおよびイメージ・ファイルは、Oracle Cloud Infrastructure Object Storageに格納されます。
次の表に、このアーキテクチャを示します。
mushop-infrastructure-oracle.zip
アーキテクチャには次のコンポーネントがあります。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインをホストする1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、長距離の場合は(国または大陸にまたがって)分離できます。
- 可用性ドメイン
可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害は、リージョン内の他の可用性ドメインに影響を与えないでください。
- フォルト・ドメイン
フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、それぞれに電源とハードウェアが独立しています。OCI Kubernetes Engineは、クラスタ内のノードを複数のフォルト・ドメインに分散します。したがって、コンテナ化されたアプリケーションは、フォルト・ドメイン内の物理サーバー障害、システム・メンテナンスおよび電源障害から保護されます。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義ネットワークです。従来のデータ・センター・ネットワークと同様に、VCNsではネットワーク環境を制御できます。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- サービス・ゲートウェイ
サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and does not traverse the internet.
- ネットワークアドレス変換(NAT)ゲートウェイ
NATゲートウェイにより、VCN内のプライベート・リソースは、受信インターネット接続にリソースを公開することなく、インターネット上のホストにアクセスできます。
- インターネット・ゲートウェイ
インターネット・ゲートウェイは、VCN内のパブリック・サブネットとパブリック・インターネット間のトラフィックを許可します。
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processingは、トランザクション処理ワークロード用に最適化された、自動運転、自己保護、自己修復が可能なデータベース・サービスです。ハードウェアの構成や管理、ソフトウェアのインストールを行う必要はありません。Oracle Cloud Infrastructureは、データベースの作成、バックアップ、パッチ適用、アップグレードおよびチューニングを処理します。
- オブジェクト・ストレージ
OCIオブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データにアクセスできます。インターネットまたはクラウド・プラットフォーム内から直接、データを安全かつセキュアに格納できます。パフォーマンスやサービスの信頼性を低下させることなく、ストレージを拡張できます。
このアーキテクチャでは、アプリケーションのメディア・アセットは、標準ストレージ・クラスのバケット内のOracle Cloud Infrastructure Object Storageに格納されます。
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)は、コンテナ化アプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションで必要なコンピュート・リソースを指定すると、KubernetesエンジンがそれらをOracle Cloud Infrastructureの既存のテナンシにプロビジョニングします。OKEは、Kubernetesを使用して、ホストのクラスタにわたるコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。
次の図は、このアーキテクチャのコンテナ化されたマイクロサービス間の相互作用を示しています。
mushop-infrastructure-expand-oracle.zip
パブリック・インターネットからのトラフィックは、Webアプリケーション・ファイアウォール(WAF)を介してDNSサービスによってロード・バランサにルーティングされ、これにより、受信リクエストがイングレス(Nginx)マイクロサービスに転送されます。イングレス・マイクロサービスは、トラフィックをルーター(Traefik)マイクロサービスに送信します。リクエストの性質に応じて、ルーター・マイクロサービスはそれらをアプリケーション内の適切なマイクロサービスにルーティングします。他のマイクロサービスとのやり取りに加えて、多くのマイクロサービスは、Oracle Cloud Infrastructureサービス(OCI Object Storage、OCI API Gateway、OCI Functions、OCI Email Delivery、OCI StreamingおよびOracle Autonomous Database)ともやり取りします。
レコメンデーション
- VCN
VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを、セキュリティ境界として機能できる同じサブネットにアタッチします。
リージョナル・サブネットを使用します。
ノート:
このアーキテクチャを実装するTerraformコードは、Oracleサービス・ネットワークにOracle Autonomous Transaction Processingデータベースをプロビジョニングします。データベースのプライベート・エンドポイントのみを公開する場合は、アーキテクチャの図に示すように、Terraformコードを調整してデータベースをプライベート・サブネットにアタッチできます。 - OCI Kubernetes Engine
このアーキテクチャでは、Kubernetesクラスタのワーカー・ノードはVM.Standard2.1シェイプを使用し、Oracle Linuxで実行されます。1つのクラスタに最大1000個のノードを作成できます。
考慮事項
このアーキテクチャを実装するときは、次のパラメータの要件を考慮してください。
- スケーラビリティ
負荷に応じてKubernetesクラスタ内のワーカー・ノードの数を更新することで、アプリケーションをスケール・アウトできます。同様に、クラスタ内のワーカー・ノードの数を減らすことでスケール・インできます。Kubernetesクラスタでサービスを作成すると、ロード・バランサを作成して、サービスに割り当てられているノード間でサービス・トラフィックを分散できます。このアーキテクチャでは、ロード・バランサを使用して受信リクエストを処理します。
- アプリケーションの可用性
フォルト・ドメインは、単一の可用性ドメイン内に自己回復性を提供します。複数の可用性ドメインで同じタスクを実行するインスタンスまたはノードをデプロイすることもできます。この設計により、冗長性が導入され、単一障害点が排除されます。このアーキテクチャでは、Oracle Cloud Infrastructure Kubernetes Engineは、可用性ドメイン内のフォルト・ドメインにノードを分散し、Kubernetesクラスタ内の使用可能なノード間でマイクロサービスの分散を管理する必要があります。
- 管理性
すべてのマイクロサービスは、Dockerを使用してコンテナ化されます。これらのイメージは、Oracle Cloud Infrastructure Registryサービスに格納されます。デプロイメントはTerraformを使用して自動化され、Grafana、Prometheus、Helmチャートなどの他の共通サービスもデプロイされます。
OCI API Gateway、OCI Functions、OCI Email Deliveryなどの他のOracle Cloud Infrastructureサービスを使用して、バックエンドAPIを管理し、製品関連のニュースレターまたは電子メールのサブスクリプションを有効にできます。
- セキュリティ
OCI Kubernetes EngineはOracle Cloud Infrastructure Identity and Access Management (IAM)と統合されており、ネイティブ・アイデンティティ機能を使用した簡単な認証を提供します。IAMポリシーを使用して、リソースにアクセスできるユーザーと、リソースが実行できるアクションを制御します。
Oracle Cloud Infrastructure Web Application Firewall (WAF)を使用して、パブリック・インターネットからの悪意のあるトラフィックからアプリケーションを保護することを検討してください。
Oracle Cloud Infrastructure Streamingサービスを使用して、アプリケーション・レベルのイベントをストリーミングおよび記録できます。
Kubernetesシークレットを保護するには、それらをボールトに格納するか、Oracle Cloud Infrastructure Vaultサービスでメンテナンスするキーを使用してシークレットを暗号化します。Kubernetesクラスタは、アクセス・リクエストをパブリック・インターネットに公開することなく、VCNのサービス・ゲートウェイを介してボールト、キーおよびシークレットにプライベートにアクセスできます。Oracle Cloud Infrastructure Identity and Access Managementで定義したポリシーによって、ボールトへのアクセスが制御されます。Oracle Cloud Infrastructure Auditサービスでは、ボールトで保護されたキーおよびシークレットの使用状況を監視および追跡できます。
デプロイ
このリファレンス・アーキテクチャのデプロイに必要なコードは、GitHubにあります。コードを1回のクリックでOracle Cloud Infrastructure Resource Managerにプルし、スタックを作成してデプロイできます。または、GitHubからコンピュータにコードをダウンロードし、コードをカスタマイズして、Terraform CLIを使用してアーキテクチャをデプロイします。
- Oracle Cloud Infrastructure Resource Managerを使用してデプロイします:
- をクリックします
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- 利用規定を確認して受諾します。
- スタックをデプロイするリージョンを選択します。
- 画面に表示されるプロンプトと手順に従ってスタックを作成します。
- スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するまで待機し、計画をレビューします。
変更を行うには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして、必要な変更を行います。次に、「プラン」アクションを再度実行します。
- これ以上の変更が必要ない場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして、「適用」を選択します。
- をクリックします
- Terraform CLIを使用してデプロイします:
- GitHubに移動します。
- コードをローカル・コンピュータにダウンロードまたはクローニングします。
deploy/complete/README.md
の手順に従います。