データセンターまたはサードパーティのプラットフォームで実行されるKubernetesクラスターにデプロイされたビジネスの可用性を向上させるアクティブゾーン冗長システムを構築するには、Distributed Cloud Container Platform for Kubernetes (ACK One) を使用してトラフィック、アプリケーション、およびクラスターを一元管理します。 ACK Oneを使用して、クラスター間でトラフィックをルーティングし、フェイルオーバーをシームレスに実行できます。 このトピックでは、ACK Oneを使用してハイブリッドクラウド環境でアクティブゾーン冗長システムを迅速に構築する方法について説明します。
アーキテクチャ
上の図は、ハイブリッドクラウド環境でのアクティブゾーン冗長システムのアーキテクチャを示しています。 このシステムは、登録済みクラスター、フリートインスタンス (GitOpsはオプション) 、およびApplication Load Balancer (ALB) マルチクラスターゲートウェイで構成されています。
Alibaba Cloud上のリソースは、同じ仮想プライベートクラウド (VPC) にデプロイされます。 Container Service for Kubernetes (ACK) クラスターがAZ 1に作成され、登録済みクラスターがAZ 2に作成されます。
データセンターまたはサードパーティプラットフォームにデプロイされたKubernetesクラスターを登録済みクラスターに接続します。 専用回線を使用して、データセンターをVPCに接続します。
ACKクラスターと登録済みクラスターを同じVPC内のフリートインスタンスに関連付けます。 ACK One GitOpsを使用して、アプリケーションをACKクラスターおよび登録済みクラスターに配布します。
フリートインスタンスで、ALBマルチクラスターゲートウェイを作成し、クラスターをゲートウェイに追加するようにAlbConfigを設定します。 次に、Ingressを作成し、Fleetインスタンスでトラフィックルーティングルールを設定して、南北トラフィックを管理し、ゾーンディザスタリカバリを実装します。
手順
ステップ1: ネットワークの設計とクラスターの作成
同じVPCにフリートインスタンス、ACKクラスター、登録済みクラスターを作成します。 ACKクラスターと登録済みクラスターが異なるゾーンにあることを確認してください。
ACKクラスターのノードCIDRブロックとポッドCIDRブロックがKubernetesクラスターのブロックと重複しないようにします。 フリート管理のネットワーク設計の詳細については、「フリート管理のネットワーク設計」をご参照ください。
手順2: Alibaba Cloudへの接続
Kubernetesクラスターを登録済みクラスターに接続します。 詳細については、「登録済みクラスターの作成」をご参照ください。
説明登録済みクラスターを使用してエラスティックリソースを使用してワークロードをAlibaba Cloudに移行するには、「ハイブリッドクラウドクラスターの構築とクラスターへのECSインスタンスの追加」および「仮想ノードとしてデプロイされたエラスティックコンテナインスタンスへのポッドのスケジュール」をご参照ください。
予期しないトラフィックの急増に耐えるために、エラスティックコンテナインスタンスの高可用性設定を構成できます。 詳細については、「ゾーン間のECIの作成」をご参照ください。
オンプレミスネットワークをVPCに接続します。 詳細については、「ネットワーク接続」をご参照ください。
専用回線を使用してAlibaba Cloudに接続します。 詳細については、「ハイブリッドネットワークの概要」をご参照ください。
登録済みクラスターとACKクラスターをフリートインスタンスに関連付ける方法の詳細については、「関連クラスターの管理」をご参照ください。
ステップ3: GitOps ApplicationSetを使用してアプリケーションを複数のクラスターに配布する
ハイブリッドクラウド環境では、Kubernetesクラスターで使用されているコンテナネットワーク (アンダーレイまたはオーバーレイ) を確認する必要があります。 2つのコンテナーネットワークの違いは、オーバーレイネットワークのポッドにアクセスする場合は、オンプレミスネットワークをVPCに接続する必要があることです。 さらに、各ノードがオンプレミスネットワークのポッドCIDRブロックにトラフィックをルーティングできるようにする必要があります。 ALBマルチクラスタゲートウェイは、両方のコンテナネットワークをサポートします。 アンダーレイネットワークでClusterIPサービスを使用できますが、オーバーレイネットワークでNodePortサービスを使用する必要があります。
次の例は、アンダーレイおよびオーバーレイネットワーク用のweb-demoという名前のGitOps ApplicationSetのYAMLテンプレートを示しています。 ApplicationSetsの詳細については、「マルチクラスタアプリケーションの作成」をご参照ください。
下敷きコンテナネットワーク
次のYAMLテンプレートを使用して、webデモApplicationSetをデプロイします。 ClusterIPサービスは、関連するすべてのクラスターで使用されます。
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: appset-web-demo-undelay
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
オーバーレイコンテナーネットワーク
ArgoCD UIにアクセスし、
を選択し、cluster: ack
およびcluster: idc
ラベルを2つのクラスターに追加します。次のYAMLテンプレートを使用して、webデモApplicationSetを2つのクラスターにデプロイします。 データセンターでNodePortサービスを使用し、ACKクラスターでClusterIPサービスを使用します。
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'
# A key-value map for arbitrary parameters
values:
isNodePort: "true"
- clusters:
selector:
matchLabels:
cluster: 'ack'
values:
isNodePort: "false"
goTemplateOptions:
- missingkey=error
syncPolicy:
preserveResourcesOnDeletion: false
goTemplate: true
ステップ4: ALBマルチクラスタゲートウェイを使用してアクティブゾーン冗長性を実装する
フリートインスタンスでAlbConfigを設定してALBマルチクラスターゲートウェイを作成し、ACKクラスターと登録済みクラスターをゲートウェイに追加します。
フリートインスタンスにルーティングルールとIngressを作成して、アクティブなゾーン冗長性を実装します。
詳細については、「ゾーンディザスタリカバリシステムの構築」をご参照ください。