この記事では、Azure Kubernetes Service (AKS) をデプロイした後に、Cloud Native Computing Foundation (CNCF) からプロジェクトを使用するアプリケーションの概念を策定し、そのアプリケーションの設計、ビルド、デプロイを行う方法について説明します。 このアーキテクチャでは、GitHub 上の CNCF プロジェクト アプリについて説明します。 リポジトリのセットアップ手順では、アーキテクチャを展開するための手順を説明します。
アーキテクチャ
このアーキテクチャの Visio ファイルをダウンロードします。
このワークロードは、従業員が経費明細書を送信および表示するために使用できるシンプルな Web アプリケーションです。 従業員が経費明細書を送信すると、その従業員の上司が電子メールを受け取ります。
ワークフロー
アプリケーション フロー
1. 従業員は、NGINX イングレスを介して Web アプリにアクセスし、経費を送信します。
2. Web アプリは、その従業員のマネージャーを取得するために API アプリを呼び出します。
3. Web アプリは、経費明細書の作成用に生成されたメッセージを Knative ブローカーにプッシュします。
4. 経費明細書は MySQL に保存されます。
5. Knative は、ペイロードとして経費メッセージを使用して Email Dispatcher 関数をトリガーします。
6. Email Dispatcher によって SendGrid メッセージが作成されます。
7. SendGrid は、確認のために電子メールを取得した上司に送信します。
DevOps フロー
a. 開発者は Visual Studio Code でコードを作成または更新します。
b. 開発者は、Visual Studio Code のローカル ワークスペースから GitHub にコードをプッシュします。
c. Github Webhook は、GitHub コードを複製する Tekton パイプラインをトリガーします。
d. パイプラインがビルドされ、コンテナー イメージが Harbor レジストリにプッシュされます。
e. Tekton は、Web アプリ、API アプリ、および Email Dispatcher アプリケーションをデプロイします。
f. Prometheus は、アプリケーション メトリックをキャプチャします。
g. エンジニアは、Grafana ダッシュボードのメトリックを監視します。
h. DevOps のエンジニアは、Grafana ダッシュボードを監視します。
インフラストラクチャ
i. AKS ベースラインに示されているインフラストラクチャに基づく AKS クラスター。
ii. クラスター記憶域に使用される Rook Ceph。
iii. Linkerd サービス メッシュ。
iv. Kubernetes クラスターの全体的なアプリケーション トレースに使用する Jaeger。
クラスターの操作
GitOps 管理を使用して、クラスターとクラスター ブートストラップを管理すると便利な場合があります。 Flux は一般的な GitOps 演算子です。 多くの場合、更新されたマニフェストと Helm チャートの検証を可能にするために GitHub アクションと組み合わせて使用します。
コンポーネント
Azure
- Azure Kubernetes Service (AKS) マネージド クラスター インフラストラクチャを提供します。
オープンソース ソフトウェア
- Kubernetes。 CNCF。 コンテナー化されたアプリケーションのデプロイ、スケーリング、および管理が自動化されます。
- Flux。 CNCF。 インフラストラクチャ配信用の GitOps プロバイダー。
- Rook。 CNCF。 クラスターの記憶域管理を提供します。
- Harbor。 CNCF。 イメージのコンテナー レジストリ。
- Linkerd。 CNCF。 OpenFaaS、NGINX、Prometheus、Jaeger と統合されたサービス メッシュ。
- Prometheus。 CNCF。 アプリケーション メトリックをキャプチャします。
- Jaeger。 CNCF。 Kubernetes クラスター全体でのアプリケーション追跡を提供します。
- Knative。 CNCF。 サーバーレスおよびイベント駆動型アプリケーションの構築に使用されます。 Email Dispatcher 関数をデプロイします。
- MySQL。 経費明細書を格納するデータベース。
- NGINX。 経費明細書を送信するために従業員が Web アプリにアクセスするために使用する Kubernetes イングレス コントローラー。
- Tekton。 継続的インテグレーション/継続的配置 (CI/CD) に使用される継続的デリバリー ファンデーション プロジェクト。 Web アプリ、API アプリ、および Email Dispatcher アプリケーションをデプロイします。
- Grafana。 アプリケーション メトリックのダッシュボード。
- SendGrid。 経費明細書のレビューのためにメールを上司に送信する外部電子メール サービス。
- GitHub。 コード リポジトリ。 Tekton パイプラインは GitHub コードを使用します。
- .NET Core Web フロントエンドと Web API に使用されます。
- Flux。 GitOps 管理を提供します。
代替
このプロジェクトでは、CNCF の Graduated と Incubated プロジェクトを使用します。 使用されるサービスには複数の選択肢が存在する可能性があります。 代替方法については、CNCF の Web サイトを参照してください。 これらについて説明しているいくつかのリソースを次に示します。
- サービス メッシュ オプションの比較
- サービスとしての関数 (サーバーレス) の代替手段
- Vitess: Kubernetes のシャード化された MySQL
- Zipkin と OpenTracing を使用したマイクロサービスの監視
- 開発者中心のエクスペリエンスによる GitOps
さまざまな Azure サービスを代替として検討できます。 たとえば、Web アプリケーション ルーティング、Azure Container Registry、Azure Container Storage、Azure Monitor、Prometheus 用 Azure Monitor マネージド サービス、Azure Managed Grafana などです。
Microsoft では、Nginx、Istio、Prometheus、Grafana、OpenEBS など、マネージド アドオン/派生プロジェクトとして AKS でオープンソース ソフトウェア プロジェクトをサポートしています。
シナリオの詳細
このアーキテクチャは、AKS だけでなく、任意の Kubernetes クラスターにデプロイできます。 これは、AKS プラットフォームの柔軟性の一例を示しています。 AKS を使用すると、マネージド Kubernetes クラスターを Azure に簡単にデプロイできます。
この記事をお読みいただくと、大部分が CNCF プロジェクトで構成されている一般的なアプリケーションをデプロイする方法をよく理解できるようになります。
考えられるユース ケース
このような他のユース ケースには、同様の設計パターンがあります。
- コンテナーベースのワークロード用の CI/CD パイプラインを作成する
- AKS に GitOps を使用する
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
- Kubernetes クラスターでは、少なくとも 3 ノードのユーザーノード プールと仮想マシン (VM) SKU DS2_v2 以上が必要です。
- Azure マネージド ディスクを使用するボリュームをゾーン間でアタッチすることはできません。 これらは同じゾーン内に配置する必要があります。
- Rook のインストールには、20 分から 25 分かかることがあります。 次の手順に進む前に、Ceph クラスターが完全にプロビジョニングされていることを確認してください。
- Jaeger のセットアップには約 5 分かかります。
- Linkerd がダッシュボードに表示されるまでに約 12 分かかります。
コストの最適化
コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、コスト最適化の柱の概要に関する記事をご覧ください。
コストを見積もるには、Azure 料金計算ツールを使用できます。 このプロジェクトを Azure で実行する場合の料金に関する考慮事項を次に示します。 帯域幅にかかるコストはごくわずかです。
Virtual Machine Scale Sets
AKS クラスター用に Azure Virtual Machine Scale Sets で使用される VM には、料金が発生します。 詳しくは、仮想マシン スケール セットの価格に関する記事をご覧ください。
ストレージ
Rook のインストールに必要なデータ ディスクごとに Storage のコストが適用されます。 この 3 ノード AKS クラスターの Rook 構成では、ノードごとに 1 GB のディスクと 200 GB のディスクの 2 つのデータ ディスクを使用します。 詳細については、Storage の料金詳細に関するページを参照してください。
Load Balancer
この AKS クラスターに関連付けられているロード バランサーでは、料金が発生します。 詳細については、Load Balancer の価格に関するページを参照してください。
仮想ネットワーク
AKS クラスターによって使用される仮想ネットワークでは、料金が発生します。 詳細については、「Virtual Network の価格」を参照してください。
このシナリオのデプロイ
このシナリオは、Azure/cloud-native-app GitHub リポジトリからデプロイします。 提供されるシーケンスのセットアップ手順に従って、使用している環境に CNCF プロジェクト アプリをデプロイします。
このリポジトリは、コミュニティ プロジェクトです。 これは、コミュニティからの拡張と変更のために pull request (PR) を受け入れて承認します。