跳到主要内容

Azure Kubernetes Fleet Manager

Azure Kubernetes Fleet Manager は、複数の Azure Kubernetes Service (AKS) クラスターを統合的に管理・オーケストレーションするためのサービスです。マルチクラスター環境での運用を簡素化し、一貫性のある構成管理やアップデート戦略を実現します。

Fleet Manager とは

Fleet Manager は、複数の AKS クラスターを「フリート」としてグループ化し、以下の機能を提供します:

  • 統合管理: 複数のクラスターを単一のコントロールプレーンから管理
  • マルチクラスター Kubernetes リソース伝搬: Kubernetes リソースを複数のクラスターに効率的にデプロイ
  • 段階的ロールアウト: クラスター全体への変更を段階的に適用
  • 統一されたアップデート戦略: Kubernetes バージョンや構成のアップデートを一括管理

主要コンポーネント

1. Fleet Resource (フリートリソース)

Fleet は、複数の AKS クラスターをグループ化する論理的なコンテナです。

apiVersion: containerservice.azure.com/v1
kind: Fleet
metadata:
name: production-fleet
spec:
hubProfile:
dnsPrefix: production-fleet-hub

2. Member Cluster (メンバークラスター)

Fleet に参加する個々の AKS クラスターをメンバークラスターと呼びます。

# クラスターをFleetに参加させる
az fleet member create \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name cluster-east \
--member-cluster-id /subscriptions/.../clusters/aks-east

3. Hub Cluster (ハブクラスター)

Fleet Manager は、オプションで Hub Cluster を使用して、Kubernetes API を介した統合管理を提供します。

Kubernetes リソース伝搬

Fleet Manager を使用すると、Kubernetes リソースを複数のクラスターに効率的にデプロイできます。

ClusterResourcePlacement

ClusterResourcePlacement は、どのリソースをどのクラスターにデプロイするかを定義します。

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: deploy-frontend
spec:
resourceSelectors:
- group: ""
version: v1
kind: Namespace
name: frontend
- group: apps
version: v1
kind: Deployment
labelSelector:
matchLabels:
app: frontend
policy:
placementType: PickAll

配置ポリシー

PickAll

すべてのメンバークラスターにリソースをデプロイします。

policy:
placementType: PickAll

PickN

指定した数のクラスターにデプロイします。

policy:
placementType: PickN
numberOfClusters: 3

PickFixed

特定のクラスターを指定してデプロイします。

policy:
placementType: PickFixed
clusterNames:
- cluster-east
- cluster-west

クラスターセレクター

ラベルに基づいてクラスターを選択できます。

policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
region: japan

段階的ロールアウト (Update Strategy)

Fleet Manager は、変更を段階的に適用するための強力な機能を提供します。

Update Run

Update Run を使用して、クラスターのアップデートを段階的に実行します。

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: k8s-upgrade-1-28
spec:
updateStrategyId: production-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5

Update Strategy

アップデート戦略を定義して、ロールアウトの順序とタイミングを制御します。

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateStrategy
metadata:
name: production-strategy
spec:
stages:
- name: dev-stage
groups:
- name: dev-clusters
afterStageWaitInSeconds: 3600
- name: prod-stage
groups:
- name: prod-east-clusters
- name: prod-west-clusters
afterStageWaitInSeconds: 7200

ステージとグループ

  • Stage (ステージ): 順次実行される更新のフェーズ
  • Group (グループ): 同時に更新されるクラスターのセット
  • Wait Period: ステージ間の待機時間

ユースケース

1. マルチリージョンデプロイメント

複数のリージョンにまたがるアプリケーションを一括デプロイします。

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: global-app-deployment
spec:
resourceSelectors:
- group: apps
version: v1
kind: Deployment
name: my-app
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchExpressions:
- key: region
operator: In
values:
- japaneast
- japanwest
- eastus

2. 環境別クラスター管理

開発、ステージング、本番環境のクラスターを効率的に管理します。

# 開発環境のFleet
az fleet create \
--resource-group dev-rg \
--name dev-fleet \
--location japaneast

# 本番環境のFleet
az fleet create \
--resource-group prod-rg \
--name prod-fleet \
--location japaneast \
--enable-hub

3. Kubernetes バージョンのアップグレード

すべてのクラスターの Kubernetes バージョンを段階的にアップグレードします。

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: upgrade-to-1-29
spec:
updateStrategyId: safe-upgrade-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.29.0
nodeImageSelection:
type: Latest

ベストプラクティス

1. 適切なグルーピング

クラスターを論理的にグループ化し、ラベルを活用します。

# クラスターにラベルを付与
az aks update \
--resource-group myResourceGroup \
--name aks-cluster \
--tags environment=production region=japaneast tier=frontend

2. 段階的ロールアウトの実装

本番環境への変更は、必ず段階的に実施します。

stages:
- name: canary
groups:
- name: canary-cluster
- name: production
groups:
- name: prod-clusters
afterStageWaitInSeconds: 86400 # 24時間待機

3. モニタリングとオブザーバビリティ

各ステージでのアップデートの成功/失敗を監視します。

# Update Runのステータス確認
az fleet updaterun show \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name upgrade-run-1

4. ロールバック戦略

問題が発生した場合のロールバック手順を事前に定義します。

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: rollback-to-1-28
spec:
updateStrategyId: emergency-rollback
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5

5. リソース伝搬の検証

デプロイ前に、リソース配置が正しいことを確認します。

# ClusterResourcePlacementのステータス確認
kubectl get clusterresourceplacement deploy-frontend -o yaml

Fleet Manager と GitOps の統合

Fleet Manager は GitOps ツール (FluxCD, Argo CD) と組み合わせて使用できます。

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: fleet-config
namespace: flux-system
spec:
interval: 1m
url: https://github.com/myorg/fleet-config
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: fleet-placements
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: fleet-config
path: ./placements
prune: true

制限事項

  • Fleet ごとに最大 100 のメンバークラスターまで参加可能
  • Hub Cluster は単一リージョンに配置される
  • クラスター間のネットワーク通信は自動で構成されない
  • 一部の Kubernetes リソースタイプは伝搬できない場合がある

まとめ

Azure Kubernetes Fleet Manager は、マルチクラスター環境の管理を大幅に簡素化します。統合管理、マルチクラスターデプロイメント、段階的ロールアウトなどの機能により、エンタープライズレベルのKubernetes運用を実現できます。

適切な戦略とベストプラクティスを適用することで、スケーラブルで信頼性の高いマルチクラスター環境を構築できます。

参考リンク