Table of Contents
現代のアプリケーションは、スケーラビリティ、レジリエンス、および迅速な反復を要求します。 Microservices アーキテクチャは、モノリシックなアプリケーションを小さく、独立して展開できるサービスに分解することで、これらの要求を満たしています。 Azure Kubernetes Service (AKS) は、導入、スケーリング、およびコンテナ化されたマイクロサービスの運用管理を合理化する、完全に管理されたKubernetes環境を提供します。 この記事では、ACSのデプロイとマイクロサービスの管理、アーキテクチャ、パターン、運用、ベストプラクティス、およびセキュリティプラクティスを網羅しています。
なぜマイクロサービスのための AKS ?
Kubernetesでマイクロサービスを実行すると、自然にフィットし、AKSはクラスター管理のオーバーヘッドの多くを抽象化します。 AKSは、Azure Monitorを介してビルトイン監視、Azure Active Directoryとアイデンティティ管理、Azure Virtual Networkによるネットワークを提供します。 管理されたKubernetesは、制御面を維持し、自動的にアップグレードを開始し、ステートフルでステートレスな作業負荷のための堅牢なプラットフォームを提供します。 既に活用している企業にとって、AKSは、AKSがマイクロ市場を加速し、マイクロ市場を加速します。
AKS 上でマイクロサービスを展開する
1. サービスのコンテナ化
各マイクロサービスには、コンテナイメージとしてパッケージ化する必要があります。Dockerfiles を使用して、依存関係とランタイムの設定を定義します。マルチステージビルドは、画像の小さくてセキュアに保つことができます。AKS クラスターから高速で安全なアクセスのために、Azure Container Registry (ACR) で画像を保存します。ACR は、AKS と統合し、プルシークレットを手動で管理する必要があります。
2. AKS クラスタの作成と構成
テラフォームのようなコードツールとして、Azure CLI、Azure Portal、またはインフラストラクチャを介して AKS クラスターをプロビジョニングできます。キー構成決定には、ノードサイズ(CPU/メモリー)、ノード数、可用性ゾーン、可用性の高い可用性、ネットワークプラグイン(Azure CNIまたはkubenet)が含まれます。プロダクションマイクロサービスでは、Azure CNIを使用して、より良いネットワークパフォーマンスとAzureネットワーキング機能との統合を行います。リソース要求に基づいてノードカウントを自動的に調整するクラスターオートスケーリングを有効にします。
3. Kubernetesマニフェストまたは Helm チャートでコンテナを展開する
シンプルな展開のために、Kubernetes はデプロイメント、サービス、ConfigMaps、およびシークレットを定義します。複雑なマイクロサービスエコシステムでは、Helm チャートはテンプレート化された再利用可能なデプロイメントを提供します。単一の Helm チャートは、複数の関連マイクロサービスを構成可能なパラメーターで展開し、環境固有のデプロイメントを一貫して行います。Helm を使用して、各サービスのライフサイクルを管理し、ロールバックやアップグレードを含むことを検討します。
4. ネットワークとサービスディスカバリーの設定
Microservicesは、信頼できる通信を必要とします。Kubernetesサービス(ClusterIP、NodePort、LoadBalancer)は、安定したエンドポイントを提供します。内部通信のためにCortarIPを使用します。外部アクセスのために、NGINXやAzure Application Gateway Ingress Controllerなどのイングレッシブコントローラを実装します。カスタムドメイン名用のAzure DNSと組み合わせます。高度なルーティングのために、APIゲートウェイは、Azure Management(APIM)などのAPIゲートウェイは、マイクロサービスの前に座ることができます。
5. 構成および秘密の管理
ConfigMaps と Secrets を使用してコードからコンフィグを分離します。データベースのパスワードや API キーなどの機密データについては、Azure Key Vault と Secrets Store CSI ドライバーを使用して、シークレットを直接ポッドに注入します。これにより、YAML ファイルの秘密を保存し、自動回転を有効にします。環境固有の構成は、ConfigMap として保存され、デプロイ中に応用できます。
AKS の Microservices の管理
スケールリング
Kubernetesは、いくつかのスケーリングメカニズムを提供しています。横のPodオートスケール(HPA)は、CPUまたはメモリ使用量、またはカスタムメトリック(例えば、毎秒リクエスト)に基づいて、Podのレプリカの数を自動的に調整します。イベント駆動のワークロードには、KEDA(Kubernetes Event-driven Autoscaling)を使用して、キューの長さ、Kafkaラグ、またはその他のイベントソースに基づいてゼロからスケールをスケールアップします。 クラスターオートスケールは、リソースを削減したり、低負荷の頻度で要件を削減したりします。
監視および観察性
効果的な管理はリアルタイムの可視性を必要とします。 Azure Monitor をコンテナで有効化して、クラスターヘルスに関するメトリック、ログ、インサイトを収集します。詳細なアプリケーションレベルの監視、Prometheus および Grafana を展開します。 Prometheus は、Pod とノードからメトリックをスクレイピングします。 Grafana はダッシュボードを視覚化します。 Azure Log Analytics を使用して、すべてのマイクロサービスからログを集計します。ログ解析 (例、JSON) を検討して、ログ解析やアプリケーションの監視や、アプリケーションの監視を容易にします。
アップデートとロールアウト
転がりの更新を使用して、新しいバージョンをゼロダウンタイムで展開します。Kubernetes デプロイメント戦略(RollingUpdate または Recreate)は、更新のペースを制御します。高度なデプロイメントパターンでは、カナリアリリースまたは青緑色のデプロイメントを実行します。カナリアデプロイメントは、新しいバージョンへのトラフィックのわずかな割合をルート化し、フルロールアウト前のリアルタイム検証を可能にします。Flagger や Argo Rollouts などのツールは、これらの戦略を AKS で自動化します。ロールアウト中にリソーススターベーションを防ぐため、リソースリクエストと制限を常に定義します。
セキュリティー
セキュリティは、すべてのレイヤーで強化する必要があります。AKS for Kubernetes RBAC と Azure Active Directory (Azure AD) を統合し、開発者やオペレーターに細分化された権限を付与します。AKS の Azure ポリシーを使用して、コンプライアンスルール(特権コンテナを無効化)を実施します。ネットワークポリシーを実装して、Pod-to-pod 通信を制限します。AKS の Azure Defender を使用して、コンテナの脆弱性を定期的にスキャンします。AKS のセキュリティ 規格 (Azure の有効化または AKS) を有効化し、AKS を制限します。
AKS の Microservices のための CI/CD パイプライン
自動パイプラインは、マイクロサービス敏捷性のために不可欠です。 Azure DevOpsまたはGitHub Actionsを使用して、各サービスを独立して構築、テスト、およびデプロイします。 典型的なパイプライン: (1) コンテナイメージをユニットと統合テストで構築します。 (2) ACRにイメージをプッシュする。 (3) セキュリティースキャンを実行します。 (4) Helmを使用してステージング環境に展開する。 (5) 煙テストを実行します。 (6) 転がりの更新またはカナリア戦略を使用して生産を促進します。 FluxやArgo CDなどのGitOpsツールは、GitOpsが、GitOpsのリポジトリの配置を有効化し、自動展開を有効にします。
多くのマイクロサービスを持つ環境では、チーム構造やリリースの10年ごとにモノレポまたはマルチレポのアプローチを検討してください。各サービスごとに独立したパイプラインを使用して独立したデプロイメントを有効にします。Gitリポジトリにデプロイメントを格納し、GitOps演算子を使用してクラスタの変更を同期させます。
パイプライン構造例(Aze DevOps)
- ビルドステージ:[]]]テストを実行し、Dockerイメージをビルドし、ACRにプッシュします。
- []Deploy to Dev:[]]] HelmとAzure CLIを使用して、devの名前空間でサービスを改善します。
- [ 統合テスト:[]]] dev 環境に対して API テストを実行します。
- 承認ゲート:]] 手動または自動品質チェックを生産前に。
- 開発:[] 健康チェックによるロール更新、故障の自動ロールバック。
コスト最適化とリソース管理
AKS の Microservices は、慎重に管理されていない場合、重要なコストを生成できます。 1 つのチームがクラスターリソースを消費するのを防ぐため、名前空間ごとにリソースクォータを設定してください。 Azure Spot VM を使用して、割引時にバッチまたは障害のあるワークロードを処理します。 右サイズのノード: 小さなノードプールを使用して、バータブルなワークロードとメモリ集中サービス用の大きなノードを使用します。 AKS クラスターオートスケールを有効にすると、オフピーク時にノードをスケールダウンできます。 Kubernet リソースを監視して、コストを削減できます。
AKS でマイクロサービスの生産に最適なプラクティス
- [:[]])外部データベースまたは管理されたサービス(Aze Cosmos DB、Azure SQL、またはRedis Cache)で状態を格納します。 重要なデータのためのローカルストレージを避けます。
- []健康プローブ:[各容器の静電容量と可読性プローブを構成して、Kubernetesが故障や経路の交通を適切に検出することができます。
- []Podの混乱予算を使用:[ 自主的な混乱(ノードの維持、アップグレード)中に終了されるから、重要なサービスを保護する。
- [:コード:[としてインフラを割り当てます。テラフォームまたはBicepを使用して、AKSクラスター、ノードプール、および関連するAzureリソースを規定します。これにより、環境全体での一貫性が確保されます。
- [] 分離環境:[]] 異なる名前空間(開発、ステージング、プロド)を使用して、ネットワークポリシーとRBACを分離して、環境を分離します。
- []Kubernetesバージョン:[]を定期的に更新します。 AKSはパッチ更新を自動化しますが、マイナーバージョンのアップグレードを計画する必要があります。 段階的なアプローチを使用してください。 最初に開発をアップグレードし、その後、ステージング、その後の生産をします。
- []バックアップと災害復旧:[]]は、Veleroを使用してKubernetesリソースと永続的なボリュームをバックアップします。 地域全体で重要なデータを高可用性に複製します。
外部リソース
より深いダイブについては、公式[]のアジュール・クベルネズサービスのドキュメントを参照してください。 ]]のヘルプムのドキュメントは、チャートの作成に関する詳細なガイダンスを提供します。 監視のために、のプロモーション概要]]を調べます。 GitOpsの場合、 [Argo CD[FLT][FLT:[FLT:]は、最後に、[FLT:]を自動で[FLT]]を参照してください。 [FLT:[FLT:[F]:[FLT]:[FLT:[F]:[FLT]:[FLT:[FLT:[F]]]:[FLT:[F]]]]:[F]:[FLT:[FLT:[F]]:[F]:[F]:[F]:[F]:[FLT:[F]:[FLT:[F]:[F]:[F]]:[FLT
コンテンツ
Azure Kubernetes Service 上でマイクロサービスを展開し、管理するには、アーキテクチャ、デプロイメント、監視、セキュリティ、および自動化の慎重な計画が必要です。 AKS は、Kubernetes コントロール プレーンの複雑性を抽象化し、Azure のエコシステムと連携し、チームは機能の配信に集中することができます。 上記のプラクティスに従うことで、Herm ベースのデプロイメント、オートスケール、オブザラビリティ、安全な構成、CI/CD の組織化は、拡張性、マイクロ スケールの拡張性、および拡張性を実現することができます。