ワークロードがオンプレミスデータセンターまたはサードパーティのパブリッククラウド Kubernetes クラスターで実行されている場合、ACK One のマルチクラスターゲートウェイを使用して、自動でスムーズなフェイルオーバーが可能なハイブリッドまたはクロスクラウドの災害対策システムを構築できます。このトピックでは、ACK One を使用して同一都市アクティブ/アクティブ構成のハイブリッド災害対策システムを迅速に構築する方法について説明します。
アーキテクチャ
コアコンポーネントは、フリートインスタンス (オプションの GitOps を含む) 、クラウド上の ACK クラスター、およびオンプレミス環境に接続された登録済みクラスターの 3 つです。
コンポーネントの接続方法:
-
すべての Alibaba Cloud リソースは単一の VPC を共有します。ACK クラスターはアベイラビリティーゾーン (AZ) 1 で実行され、登録済みクラスターは AZ 2 に配置されています。
-
オンプレミスクラスター (またはサードパーティプラットフォームのクラスター) は、データセンターと VPC 間の専用線を経由して登録済みクラスターに接続します。
-
両方のクラスターはフリートインスタンスに関連付けられています。ACK One GitOps は、アプリケーションを両方のクラスターに配布します。
-
フリートインスタンス上で、AlbConfig が ALB マルチクラスターゲートウェイを作成します。フリートレベルの Ingress は、ノースサウストラフィックとゾーンディザスタリカバリのルーティングルールを定義します。
前提条件
開始する前に、次の条件を満たしていることを確認してください:
-
フリートインスタンス、ACK クラスター、登録済みクラスターが 同一の VPC 内、かつ 異なるアベイラビリティーゾーン に存在すること
-
ACK クラスターとオンプレミス Kubernetes クラスター間で、ノードと Pod の CIDR ブロックが重複していないこと (フリート管理のためのネットワーク設計)
-
オンプレミスデータセンターと VPC を接続する専用線があること
-
オンプレミスクラスターのコンテナネットワークタイプ (アンダーレイ または オーバーレイ) が決定されていること — これは必須の Service タイプに影響します
| ネットワークタイプ | 必須の Service タイプ | 使用するケース |
|---|---|---|
| アンダーレイ | ClusterIP | Pod IP がオンプレミスネットワークから直接ルーティング可能な場合 |
| オーバーレイ | NodePort | Pod IP がルーティング不可能で、トラフィックがノードポートを経由する必要がある場合 |
ネットワークの設計とクラスターの作成
-
同一の VPC 内、かつ異なるアベイラビリティーゾーンに、フリートインスタンス、ACK クラスター、登録済みクラスターを作成します。
-
ACK クラスターとオンプレミス Kubernetes クラスター間で、ノードと Pod の CIDR ブロックが重複していないことを確認してください。
Alibaba Cloud への接続
-
オンプレミス Kubernetes クラスターを登録済みクラスターに接続します (登録済みクラスターの作成)。
伸縮性のあるリソースを使用してワークロードを Alibaba Cloud に移行するには、「ハイブリッドクラウドクラスターの構築とクラスターへの ECS インスタンスの追加」および「仮想ノードとしてデプロイされた Elastic Container Instance への Pod のスケジューリング」をご参照ください。トラフィックスパイクに対する可用性を向上させるには、「ゾーンをまたいだ ECI の作成」をご参照ください。
-
オンプレミスネットワークを VPC に接続します。詳細については、「ネットワーク接続」および「ハイブリッドネットワークの概要」をご参照ください。
-
登録済みクラスターと ACK クラスターをフリートインスタンスに関連付けます (関連付けられたクラスターの管理)。
複数クラスターへのアプリケーションの配布
これらの ApplicationSet の例では、web-demo アプリを使用します。高度なオプションについては、「マルチクラスターアプリケーションの作成」をご参照ください。
アンダーレイネットワーク
すべてのクラスターは ClusterIP Service を使用します。次の ApplicationSet を適用します:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: appset-web-demo-underlay
namespace: argocd
spec:
template:
metadata:
name: '{{.metadata.annotations.cluster_id}}-web-demo'
namespace: argocd
spec:
destination:
name: '{{.name}}'
namespace: gateway-demo
project: default
source:
repoURL: https://github.com/AliyunContainerService/gitops-demo.git
path: manifests/helm/web-demo
targetRevision: main
helm:
valueFiles:
- values.yaml
parameters:
- name: envCluster
value: '{{.metadata.annotations.cluster_name}}'
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
generators:
- clusters:
selector:
matchExpressions:
- values:
- cluster
key: argocd.argoproj.io/secret-type
operator: In
- values:
- in-cluster
key: name
operator: NotIn
goTemplateOptions:
- missingkey=error
syncPolicy:
preserveResourcesOnDeletion: false
goTemplate: true
オーバーレイネットワーク
オンプレミスクラスターは NodePort Service を使用し、ACK クラスターは ClusterIP Service を使用します。ApplicationSet を適用する前に、各クラスターにラベルを付けます。
-
Argo CD で、[設定] > [クラスター] に移動して、以下のラベルを追加します。
-
オンプレミス クラスター:
cluster: idc -
ACK クラスター:
cluster: ack
-
-
次の ApplicationSet を適用します:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: appset-web-demo-overlay
namespace: argocd
spec:
template:
metadata:
name: '{{.metadata.annotations.cluster_id}}-web-demo-overlay'
namespace: argocd
spec:
destination:
name: '{{.name}}'
namespace: gateway-demo
project: default
source:
repoURL: https://github.com/AliyunContainerService/gitops-demo.git
path: manifests/helm/web-demo
targetRevision: main
helm:
valueFiles:
- values.yaml
parameters:
- name: isNodePort
value: "{{.values.isNodePort}}"
- name: envCluster
value: '{{.metadata.annotations.cluster_name}}'
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
generators:
- clusters:
selector:
matchLabels:
cluster: 'idc'
# 任意のパラメーター用のキーと値のマップ
values:
isNodePort: "true"
- clusters:
selector:
matchLabels:
cluster: 'ack'
values:
isNodePort: "false"
goTemplateOptions:
- missingkey=error
syncPolicy:
preserveResourcesOnDeletion: false
goTemplate: true
ALB マルチクラスターゲートウェイの設定
両方のクラスターにアプリケーションをデプロイした後:
-
フリートインスタンス上で AlbConfig を作成し、ALB マルチクラスターゲートウェイをプロビジョニングして、両方のクラスターをゲートウェイに追加します。
-
フリートインスタンス上でルーティングルールと Ingress を作成し、アクティブなゾーン冗長を構成します。
設定の完全なウォークスルーについては、「ゾーンディザスタリカバリシステムの構築」をご参照ください。
次のステップ
-
ゾーンディザスタリカバリシステムの構築 — ルーティングとフェイルオーバーのための AlbConfig と Ingress の設定
-
フリート管理のためのネットワーク設計 — CIDR の計画とネットワークトポロジーのガイダンス
-
マルチクラスターアプリケーションの作成 — 高度な ApplicationSet の設定オプション