複数のクラスターにまたがるアプリケーションのデプロイには、反復的なタスクが伴い、エラーが発生しやすく、同期が困難です。AMC コマンドラインインターフェイスを使用すると、アプリケーションを複数のクラスターに迅速にデプロイできます。これにより、将来の更新のために統一された管理と自動同期が提供されます。
仕組み

ユーザーが
kubectl amc promoteコマンドを実行して、選択したリソースをクラスターからフリートに同期します。リソースがフリートに作成され、PropagationPolicy が自動的に生成されます。このポリシーには、
target-clustersで指定されたクラスターとソースクラスターである cluster-1 が含まれます。フリートは、図の cluster-2 など、
target-clustersで指定されたクラスターにリソースを配布します。その後、cluster-1 を含むすべてのターゲットクラスター内の同期されたリソースは、フリートによって管理されます。
前提条件
複数のクラスターがフリートに関連付けられています。詳細については、「関連付けられたクラスターの管理」をご参照ください。
AliyunAdcpFullAccess 権限が Resource Access Management (RAM) ユーザーに付与されています。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
ACK One コンソールからフリートインスタンスの kubeconfig ファイルを取得し、
kubectlを使用してフリートに接続します。
ステップ 1: フリートとターゲットクラスターに名前空間を作成する
リソースを複数のクラスターに配布する前に、対応する名前空間がフリートとすべてのターゲットクラスターの両方に存在することを確認する必要があります。そうしないと、配布は失敗します。次の例では、配布されるリソースは gateway-demo 名前空間に属しています。
名前空間がフリートとすべてのターゲットクラスターにすでに存在する場合は、このステップをスキップできます。
フリートの kubeconfig を使用して次のコマンドを実行し、フリートに
gateway-demo名前空間を作成します。kubectl create ns gateway-demo次の YAML コンテンツをコピーして、
web-demo-ns-policy.yamlという名前のファイルに保存します。apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo-ns-policy spec: resourceSelectors: - apiVersion: v1 kind: Namespace name: gateway-demo placement: clusterAffinity: clusterNames: - ${cluster1_id} # クラスター ID に置き換えます - ${cluster2_id} # クラスター ID に置き換えます replicaScheduling: replicaSchedulingType: Duplicatedフリートの kubeconfig を使用して次のコマンドを実行します。これにより、フリートに
ClusterPropagationPolicyが作成され、名前空間が配布されます。kubectl apply -f web-demo-ns-policy.yaml
ステップ 2: promote コマンドを実行してリソースをフリートに同期する
kubectl amc promote コマンドを使用して、単一クラスターのリソースをフリートに同期し、複数のクラスターに配布します。
amc getコマンドを使用して初期状態を確認します。出力は、service1とweb-demoが cluster-1 のgateway-demo名前空間にのみ存在することを示しています。ADOPTIONは `N` であり、リソースが ACK One フリートの PropagationPolicy によって管理されていないことを示します。kubectl amc -ngateway-demo get svc -M kubectl amc -ngateway-demo get deployment -M期待される出力:
NAME CLUSTER CLUSTER_ALIAS TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ADOPTION service1 c8xxxxxx cluster-1 ClusterIP 192.168.**.** <none> 80/TCP 104m N NAME CLUSTER CLUSTER_ALIAS READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo c8xxxxxx cluster-1 2/2 2 2 104m N次のコマンドを実行して、cluster-1 のリソースをフリート管理下に置き、他のクラスターに配布します。
${cluster1_id}および${cluster2_id}パラメーターをクラスター ID に置き換えます。target-clustersパラメーターは、昇格されたリソースが配布されるクラスターを指定します。複数のクラスターを指定するには、${cluster2_id},${cluster3_id}のフォーマットを使用します。kubectl amc promote service service1 -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id} kubectl amc promote deployment web-demo -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id}期待される出力:
ResourceTemplate (gateway-demo/service1) is created successfully PropagationPolicy (gateway-demo/service1-67676f499c) is created successfully Resource "/v1, Resource=services"(gateway-demo/service1) is promoted successfully ResourceTemplate (gateway-demo/web-demo) is created successfully PropagationPolicy (gateway-demo/web-demo-6675b99c65) is created successfully Resource "apps/v1, Resource=deployments"(gateway-demo/web-demo) is promoted successfullyamc getコマンドを再度実行して結果を表示します。出力は、service1とweb-demoが cluster-2 に配布され、両方のクラスターのリソースが ACK One フリートによって管理されている (ADOPTIONが Y) ことを示しています。cluster-1 の web-demo アプリケーションは、現在、マルチクラスターデプロイメントになっています。kubectl amc -ngateway-demo get svc -M kubectl amc -ngateway-demo get deployment -M期待される出力:
NAME CLUSTER CLUSTER_ALIAS TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ADOPTION service1 cfxxxxxx cluster-2 ClusterIP 192.168.**.*** <none> 80/TCP 19s Y service1 c8xxxxxx cluster-1 ClusterIP 192.168.**.** <none> 80/TCP 5h58m Y NAME CLUSTER CLUSTER_ALIAS READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo c8xxxxxx cluster-1 2/2 2 2 6h1m Y web-demo cfxxxxxx cluster-2 2/2 2 2 24s Y
デフォルトの配布ポリシーの変更
デフォルトでは、promote コマンドは `Duplicated` タイプの配布ポリシー (PropagationPolicy) を自動的に作成します。これにより、replicaSchedulingType: Duplicated が設定され、アプリケーションが各クラスターに複製されます。フリートで次のコマンドを実行して、デフォルトの配布ポリシーを表示できます。
kubectl get pp -ngateway-demo xx -oyaml期待される出力:
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
...
spec:
...
placement:
clusterAffinity:
...
replicaScheduling:
replicaSchedulingType: Duplicated # 複製配布ポリシー静的または動的なレプリカの重みなど、他のポリシーを使用するには、コマンドに --auto-create-policy=false パラメーターを追加して、ポリシーの自動作成を防止します。その後、目的のポリシーを手動で設定できます。詳細については、「配布ポリシーと差別化ポリシー」をご参照ください。