Oracle Cloud Infrastructure DevOpsを使用したHelmベースのアプリケーションのデプロイ

アプリケーションのクラウドでの効率的な実行には、ソフトウェアの迅速な配信が不可欠です。パイプライン・デプロイメントを使用してソフトウェア・リリースを自動化することで、開発者の生産性が向上し、機能をより頻繁にリリースでき、エラーが減少します。これは、デプロイメント中のダウンタイムを回避し、アプリケーションの更新の複雑さを自動化するのに役立ちます。

Oracle Cloud Infrastructure DevOpsサービスは、開発者にエンドツーエンドの継続的なデプロイメント・エクスペリエンスを提供します。Oracle Cloud Infrastructure DevOpsサービスには、継続的なソフトウェア配信およびデプロイメント・プロセス(CD)をOracle Cloud Infrastructure (OCI)プラットフォーム(Oracle Cloud Infrastructure Container Engine for KubernetesOracle FunctionsおよびOracle Cloud Infrastructure Computeインスタンス)に自動化するデプロイメント・パイプラインが含まれています。

オンプレミスまたは他のクラウドからOCIにワークロードを移行しており、OCIで新しいアプリケーションを開発している顧客はOracle Cloud Infrastructureを使用できます。

アーキテクチャ

このアーキテクチャは、Oracle Cloud Infrastructure (OCI) DevOpsサービスを使用してコード・リポジトリからHelmチャートとともにデプロイされたサンプルNodeJSアプリケーションを示しています。アプリケーションはOracle Cloud Infrastructure Container Engine for Kubernetes (OKE)クラスタにデプロイされます。プロセスを簡素化するため、インフラストラクチャの自動化にTerraformを使用します。

次の図は、このリファレンス・アーキテクチャを示しています。

deploy-helm-based-app.pngの説明が続きます
図deploy-helm-based-app.pngの説明

Deploy-helm-based-app-oracle.zip

アーキテクチャには次のコンポーネントがあります。

  • リージョン

    Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的な領域です。リージョンは他のリージョンから独立しており、巨大な距離は(国全体または大陸にわたって)分離できます。

  • 仮想クラウド・ネットワーク(VCN)とサブネット

    VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。従来のデータ・センター・ネットワークと同様に、CNはネットワーク環境を完全に制御できます。VCNには、VCNの作成後に変更できる複数の重複しないCIDRブロックを含めることができます。VCNをサブネットにセグメント化できます。これは、リージョンまたは可用性ドメインにスコープを設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックでもプライベートでもかまいません。

  • OCI DevOpsプロジェクト

    OCI DevOpsプロジェクトは、継続的インテグレーションおよびデプロイメント(CI/CD)ワークロードの実装に必要なリソースの論理グループです。OCI DevOpsリソースは、アーティファクト、デプロイメント・パイプラインおよび環境です。OCI DevOpsプロジェクトにより、OCI DevOpsリソースのロギング、監視および通知を簡単に有効化できます。

  • パイプラインのビルド

    ビルド・パイプラインでは、ソース・コード・リポジトリからコミットIDを受け取り、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインは、ソフトウェア・アーティファクトの作成、テストおよびコンパイル、OCIリポジトリへのアーティファクトの提供、およびオプションでデプロイメントのトリガーなど、ビルド・プロセスのステージのセットを定義します。ビルド実行のフローおよび指示はビルド仕様ファイルで定義します。

  • ビルド・ステージ

    ビルド・ステージは、ビルド・パイプラインの実行中に実行される個々のアクションです。OCIのDevOpsビルド・パイプラインには、次の3つのステージがあります。
    1. Build Container: build_spec.yaml命令を実行して、必要なアーティファクトをコンパイル、構築および準備します。
    2. アーティファクトのアップロード: dockerイメージなどのすべてのプリペアド・アーティファクトが構成済のOracle Cloud Infrastructure Registryリポジトリにプッシュされます。
    3. トリガー・デプロイメント:デプロイ・パイプラインをトリガーして、構成済のOKEに変更を適用します。
  • デプロイメント・パイプライン

    デプロイメント・パイプラインには、一連のアーティファクトを環境に提供するために満たす必要がある要件が保持されます。パイプラインには、パイプラインの構成要素であるステージが含まれます。パイプラインには、シリアルまたはパラレルに実行されるステージを含めることができるため、ソフトウェア・リリースのフローおよびロジックを制御できます。

  • デプロイメント・ステージ

    ステージは、パイプラインの実行中に実行される個々のアクションです。OCI DevOpsデプロイメント・パイプラインには、Helmチャートを使用してKubernetesアプリケーションをデプロイするためのDeploy Helmという事前定義済のステージが1つのみ含まれています。HelmチャートURLおよびオプションのvalues.yamlファイルOCI DevOpsアーティファクトは、引数としてHelmのデプロイ・ステージに送信されます。実行中に、「Helmのデプロイ」ステージによって、Oracle Cloud Infrastructure RegistryからHelmチャートがフェッチされ、オプションで提供されたvalues.yamlファイルで構成済のOKE OCI DevOps環境にも同じことが適用されます。

  • DevOpsアーティファクト

    OCI DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトを作成するときは、実際のアーティファクトのソースの場所をOCI DevOpsに通知する必要があります。OCI DevOpsでは、OCIコンテナ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリがサポートされます。

  • アーティファクト・リポジトリ

    アーティファクト・リポジトリは、類似したアーティファクトをグループ化するリポジトリを作成します。アーティファクトは、作成後にリポジトリにアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには、パス: versionで構成される名前があります。パスは、アーティファクトを編成するための文字列です。

  • Helm

    Helmは、アプリケーション・デプロイメントをHelmチャートのセットとして管理するKubernetesのパッケージ・マネージャで、様々なサービスとそのライフサイクルを簡単に管理できます。

    Oracle LinuxのHelmモジュールは、HelmをKubernetesモジュール(クラスタ)にインストールします。

  • Helmチャート

    Kubernetes YAMLマニフェストは、Kubernetesクラスタにデプロイできる単一のパッケージに統合されます。Helmチャートには、Kubernetes YAMLマニフェスト・ファイルのテンプレートと、デフォルトのテンプレート値を提供するvalues.yamlファイルが含まれています。Helmチャートを使用して、アプリケーションまたは大規模なアプリケーションの1つのコンポーネントをデプロイします。

  • OCIロギングおよびOCI通知サービス

    Oracle Cloud InfrastructureのロギングおよびOracle Cloud Infrastructure Notificationsサービスは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notificationsサービスでは、デプロイメント・プロジェクトとそのリソースの最新状態を可視化し、必要なアクションを実行できます。

  • 環境の配置

    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境には、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタがあります。

    • Oracle Kubernetesクラスタ(OKE): OCI Container Engine for Kubernetesは、完全に管理されたスケーラブルで可用性の高いサービスで、クラウドへのコンテナ化されたアプリケーションのデプロイに使用できます。

    • コンピュート・インスタンス: OCI Computeサービスでは、クラウドでコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用してコンピュート・インスタンスを起動できます。

    • ファンクション: Oracle Functionsは、完全に管理された、マルチテナントでスケーラビリティが高くオンデマンドのFunctions-as-a-Serviceプラットフォームです。エンタープライズグレードのOCI上に構築されており、Fn Projectのオープン・ソース・エンジンで稼働しています。

    このアーキテクチャーでは、OKEクラスタを環境として使用します。環境は、デプロイメント・パイプラインのリージョンとは異なるOCIリージョンに配置できます。これにより、開発者は同じデプロイメント・パイプラインを使用して複数のOCIリージョンにデプロイできます。

推奨

次の推奨事項を開始点として使用します。要件は、ここで説明するアーキテクチャとは異なる場合があります。
  • VCN

    VCNを作成する際、VCNのサブネットにアタッチする予定のリソース数に基づいて、必要なCIDRブロックの数および各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    このアーキテクチャでは、パブリックVCNを使用してOKEクラスタをホストします。プライベートVCNを使用することもできます。その場合、NATゲートウェイを使用して、パブリック・インターネットを介したクラスタ・アクセス権を付与します。

  • コンピュート・シェイプ

    このアーキテクチャは、OKEクラスタノード内のコンピュートホストをホストするために、E4フレックスシェイプを持つ Oracle Linux OSイメージを使用します。アプリケーションでより多くのメモリーまたはコアが必要な場合は、別のシェイプを選択できます。

  • Kubernetes(所有)

    このアーキテクチャは、OKEクラスタにターゲット・エンドポイントとしてデプロイされます。ワーカー・ノードは、E4 Oracle Linux OSにデプロイされます。このアーキテクチャでは、クラスタ内の3つのワーカー・ノードを使用しますが、各クラスタに最大1,000個のノードを作成できます。

  • コンテナ・イメージ・レジストリ

    このアーキテクチャは、レジストリを内部使用のためのプライベートDockerレジストリとしてデプロイします。Dockerイメージはレジストリにプッシュされ、レジストリからプルされます。レジストリをパブリックDockerレジストリとして使用することもできます。これにより、インターネットにアクセスし、適切なURLの知識があるユーザーはOracle Cloudのパブリック・リポジトリからイメージをプルできます。このアーキテクチャでは、同じコンテナ・レジストリを使用してHelmチャートを格納します。

  • アーティファクト・レジストリ

    このアーキテクチャーは、OKEクラスタによって使用されるソフトウェアおよび構成用のアーティファクトを作成します。アーキテクチャは、内部使用のためにアーティファクト・レジストリ・リポジトリを作成します。ソフトウェア・バイナリ、テキストおよびデプロイメント構成は、アーティファクト・レジストリ・リポジトリにアップロードおよびダウンロードされます。

注意事項

この参照アーキテクチャをデプロイするときは、次の点を考慮してください。

  • Oracle Cloud Infrastructure DevOpsでサポートされているデプロイメント

    DevOpsは、Kubernetes (OKE)、コンピュート・ホストおよびOracle Functionsへのデプロイメントをサポートします。このアーキテクチャは、Helm Chartを使用してOKEクラスタにデプロイされます。要件に基づいて他のエンドポイントにデプロイすることを検討してください。

  • サポートされるホスト

    Oracle Cloud Infrastructure Computeインスタンスへのインスタンス・グループ・デプロイメントでは、Linuxホストのみがサポートされています。

  • アーティファクト

    Oracle Cloud Infrastructure DevOpsでデプロイするアーティファクトは、Oracle Cloud Infrastructureアーティファクト・レジストリまたはコンテナ・イメージ・レジストリ・リポジトリ内にある必要があります。

  • プロジェクト

    ベスト・プラクティスは、各アプリケーションおよびすべてのマイクロサービスを単一のプロジェクトにグループ化することです。

デプロイ

このリファレンス・アーキテクチャのTerraformコードは、GitHubで入手できます。

  • Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
    1. Oracle Cloudへのデプロイをクリックします。

      まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。

    2. スタックをデプロイするリージョンを選択します。
    3. 画面上のプロンプトと手順に従ってスタックを作成します。
    4. スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
    5. ジョブが完了するまで待機し、プランをレビューします。

      変更するには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」アクションを再度実行します。

    6. これ以上の変更が必要ない場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
  • GitHubでTerraformコードを使用してデプロイします。
    1. GitHubにアクセスします。
    2. リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
    3. READMEドキュメントの指示に従います。

謝辞

作成者: Ashok Raja CM

協力者: Saurabh Shah、 Lukasz Feldman