ACK One Fleet を使用すると、Git リポジトリに依存することなく、フリートインスタンスから複数のメンバークラスターにアプリケーションをディストリビューションできます。このガイドでは、PropagationPolicy を使用して NGINX Deployment を 2 つのクラスターにデプロイする手順を説明します。
このガイドの最後までに、以下の操作ができるようになります:
フリートインスタンスでのアプリケーションの作成
複数のクラスターにアプリケーションをディストリビューションするための PropagationPolicy の定義
(オプション) クラスターごとの構成をカスタマイズするための OverridePolicy の適用
ディストリビューションされたリソースの検証、更新、およびクリーンアップ
前提条件
開始する前に、次のことを確認してください。
フリート管理が有効です。詳細については、「マルチクラスター管理を有効化する」をご参照ください。
複数のクラスターがフリートインスタンスに関連付けられていること。詳細については、「関連付けられたクラスターの管理」をご参照ください。
「ACK One コンソール」からダウンロードした Fleet インスタンスの kubeconfig ファイルで、kubectl が Fleet インスタンスに接続済みです。
Resource Access Management (RAM) ユーザーに
AliyunAdcpFullAccessポリシーがアタッチされていること。詳細については、「RAM ユーザーへの権限付与」をご参照ください。AMC コマンドラインツールがインストール済みです。詳細については、「AMC コマンドラインの使用」をご参照ください。
(オプション) ステップ 1: フリートインスタンスでの名前空間の作成
アプリケーションの名前空間がフリートインスタンスに存在しない場合は、作成します。名前空間がすでに存在する場合は、このステップをスキップしてください。
次のコマンドを実行して、demo という名前の名前空間を作成します。
kubectl create namespace demoステップ 2: フリートインスタンスでのアプリケーションの作成
フリートは、ConfigMaps、Deployments、および Services のディストリビューションをサポートしています。この例では、NGINX Deployment を使用します。
次の内容で
web-demo.yamlという名前のファイルを作成します。apiVersion: apps/v1 kind: Deployment metadata: namespace: demo name: web-demo spec: replicas: 3 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80アプリケーションをデプロイします。
kubectl apply -f web-demo.yaml
ステップ 3: アプリケーションをディストリビューションするための PropagationPolicy の作成
PropagationPolicy は、ディストリビューションするリソースとターゲットとするクラスターをフリートコントローラーに指示します。作成されると、コントローラーは一致するリソースを自動的に検出し、指定されたクラスターにプッシュします。
この例では、Deployment を Duplicated モードで 2 つのクラスターにディストリビューションするため、各クラスターは 3 つのレプリカを個別に実行します。
フリートインスタンスによって管理されているメンバークラスターの ID を取得します。
kubectl get mcl出力は次のようになります。
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21h次の内容で
propagationpolicy.yamlという名前のファイルを作成します。${cluster1-id}と${cluster2-id}を実際のクラスター ID に置き換えてください。ClusterPropagationPolicyはクラスタースコープのリソース (名前空間など) をディストリビューションします。PropagationPolicyは名前空間スコープのリソースをディストリビューションし、ポリシーが存在する名前空間内のリソースのみを選択できます。apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo spec: resourceSelectors: - apiVersion: v1 kind: Namespace name: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: Duplicated --- apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: web-demo namespace: demo spec: preserveResourcesOnDeletion: true # When true, deleting resources from the Fleet instance keeps them in the member cluster. Set to false to delete them together. resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo namespace: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: Duplicated次の表に、主要なパラメーターを示します。すべてのパラメーターのリファレンスについては、「PropagationPolicy」をご参照ください。
パラメーター 説明 例 resourceSelectorsディストリビューションするリソース。 apiVersion、kind、name、namespace、またはlabelSelectorを指定してリソースを照合します。demo名前空間のweb-demoDeployment を選択します。placement.clusterAffinityディストリビューションのターゲットクラスター。クラスター名ではなくクラスター ID を入力します。 ${cluster1-id}、${cluster2-id}replicaScheduling.replicaSchedulingTypeスケジューリングモード。 Duplicatedは、完全なレプリカ数を各クラスターに複製します。レプリカ数は、ワークロードのspec.replicasで設定されます。DuplicatedPropagationPolicy を適用します。
kubectl apply -f propagationpolicy.yaml
(オプション) ステップ 4: クラスターごとの構成をカスタマイズするための OverridePolicy の作成
OverridePolicy は、デプロイメント前にリソース構成を変更し、個々のクラスターの設定を調整できます。
この例は ${cluster2-id} に適用され、2 つの変更を行います。
replicasを3から1に削減イメージにレジストリプレフィックスを付加
OverridePolicy を適用する前、${cluster2-id} 上の Deployment は次のようになります。
spec:
replicas: 3
...
containers:
- image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0OverridePolicy を適用した後、${cluster2-id} 上の Deployment は次のようになります。
spec:
replicas: 1
...
containers:
- image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0次の内容で
overridepolicy.yamlという名前のファイルを作成します。apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: OverridePolicy metadata: name: example namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo overrideRules: - targetCluster: clusterNames: - ${cluster2-id} overriders: plaintext: - operator: replace path: /spec/replicas value: 1 imageOverrider: - component: Registry operator: add value: {{Registry}}次の表に、主要なパラメーターを示します。すべてのパラメーターのリファレンスについては、「OverridePolicy」をご参照ください。
パラメーター 説明 例 resourceSelectorsオーバーライドするリソース。 apiVersion、kind、name、namespace、またはlabelSelectorを指定します。web-demoDeployment を選択します。overrideRules.plaintextJSONPatch を使用してリソースフィールドをオーバーライドします。 operator、path、およびvalueを指定します。spec.replicasを1に変更します。overrideRules.imageOverriderイメージコンポーネント ( Registry、Repository、またはVersion) をオーバーライドします。イメージにレジストリプレフィックスを付加します。 OverridePolicy を適用します。
kubectl apply -f overridepolicy.yaml
ステップ 5: ディストリビューションステータスの表示
次の AMC コマンドを実行して、アプリケーションがすべてのメンバークラスターにディストリビューションされているかどうかを確認します。
kubectl amc get deploy -ndemo -M出力は次のようになります。
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION
web-demo cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
web-demo cxxxxxxxxxxxxx 3/3 3 3 3d4h YREADY: 3/3 と ADOPTION: Y は、アプリケーションが各クラスターで実行されていることを確認します。
ステップ 6: アプリケーションの更新
web-demo.yamlを更新して、replicasを4に増やします。apiVersion: apps/v1 kind: Deployment metadata: namespace: demo name: web-demo spec: replicas: 4 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80更新されたマニフェストを適用します。
kubectl apply -f web-demo.yaml更新がすべてのクラスターに伝播されていることを確認します。
kubectl amc get deploy -ndemo -M出力は次のようになります。
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxxxxxxx 4/4 4 4 3d4h Y web-demo cxxxxxxxxxxxxx 4/4 4 4 3d4h YREADY: 4/4は、両方のクラスターのレプリカが更新されたことを確認します。
ステップ 7: アプリケーションリソースの削除
フリートはリソースをディストリビューションしますが、フリートインスタンスからアプリケーションまたは PropagationPolicy を削除しても、デフォルトではリソースを削除しません。これにより、メンバークラスターでのワークロードの偶発的な削除が防止されます。
メンバークラスターからリソースを削除するには、次の手順を実行します。
ClusterPropagationPolicyでpreserveResourcesOnDeletionをfalseに設定します。apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo spec: preserveResourcesOnDeletion: false resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo - apiVersion: v1 kind: Namespace name: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: Duplicated更新されたポリシーを適用します。
kubectl apply -f propagationpolicy.yamlアプリケーションリソースを削除します。
kubectl delete -f web-demo.yamlリソースがメンバークラスターから削除されたことを確認します。
kubectl amc get deploy -ndemo -M出力は次のようになります。
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
関連トピック
複数のクラスターにディストリビューションされたアプリケーションの監視: 監視管理
ゾーンディザスタリカバリの実装: MSE マルチクラスターゲートウェイを使用した ACK One でのゾーンディザスタリカバリの実装
すべての PropagationPolicy および OverridePolicy パラメーターの探索: PropagationPolicy および OverridePolicy