Distributed Cloud Container Platform for Kubernetes (ACK One) Fleet は、アプリケーション配布機能を提供します。この機能を使用すると、Fleet インスタンスから、Fleet インスタンスに関連付けられている複数のクラスタにアプリケーションを配布できます。これにより、Git リポジトリに依存することなく、アプリケーション配布が簡素化されます。このトピックでは、Fleet インスタンスでアプリケーションを作成し、PropagationPolicy に基づいて複数のクラスタにアプリケーションを配布する方法について説明します。
前提条件
Fleet 管理機能が有効になっていること。詳細については、「マルチクラスタ管理を有効にする」をご参照ください。
複数のクラスタが Fleet インスタンスに関連付けられていること。詳細については、「関連付けられたクラスタを管理する」をご参照ください。
Fleet インスタンスの kubeconfig ファイルが Distributed Cloud Container Platform for Kubernetes (ACK One) コンソール で取得され、kubectl クライアントが Fleet インスタンスに接続されていること。
AliyunAdcpFullAccess ポリシーが Resource Access Management (RAM) ユーザーにアタッチされていること。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
AMC コマンドラインツールがインストールされていること。詳細については、「AMC コマンドラインを使用する」をご参照ください。
(オプション) 手順 1: Fleet インスタンスに名前空間を作成する
配布するアプリケーションの名前空間が Fleet インスタンスに存在しない場合は、Fleet インスタンスに名前空間を作成します。名前空間が存在する場合は、この手順をスキップします。
Fleet インスタンスの kubeconfig ファイルを使用して Fleet インスタンスに接続し、次のコマンドを実行して demo という名前のサンプル名前空間を作成します。
kubectl create namespace demo手順 2: Fleet インスタンスにアプリケーションを作成する
アプリケーションは、ConfigMap、Deployment、Service などのリソースをサポートしています。このトピックでは、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: Fleet インスタンスの PropagationPolicy を作成して、複数のクラスタにアプリケーションを配布する
PropagationPolicy を定義して、配布するアプリケーションと対応するクラスタを選択できます。PropagationPolicy を作成すると、一致するアプリケーションがクラスタに配布されます。
この例では、weighted-deployment という名前の Deployment が、複製された方法で Cluster1 と Cluster2 に配布されます。各クラスタには 3 つのレプリカがあります。
次のコマンドを実行して、Fleet インスタンスによって管理されるサブクラスタの ID を取得します。
kubectl get mcl予期される出力:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21hpropagationpolicy.yaml という名前のファイルを作成し、次の内容をファイルに追加します。
説明ClusterPropagationPolicyを使用すると、クラスタ全体のリソースを配布できます。PropagationPolicyを使用すると、名前空間全体のリソースを配布できます。apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo spec: - apiVersion: v1 kind: Namespace name: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # クラスタの ID。 - ${cluster2-id} # クラスタの ID。 replicaScheduling: replicaSchedulingType: Duplicated --- apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: web-demo namespace: demo spec: preserveResourcesOnDeletion: true # このパラメーターを true に設定します。Fleet インスタンスからリソースを削除すると、サブクラスタ内のリソースは保持されます。サブクラスタからリソースを同時に削除する場合は、このパラメーターを false に設定します。 resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo namespace: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # クラスタの ID。 - ${cluster2-id} # クラスタの ID。 replicaScheduling: replicaSchedulingType: Duplicated次の表にパラメーターを示します。詳細については、「PropagationPolicy」をご参照ください。
パラメーター
説明
例
resourceSelectors
配布する 1 つ以上の Kubernetes リソースを選択します。
apiVersion: 必須。配布するリソースの apiVersion。kind: 必須。配布するリソースのタイプ。Name: 配布するリソースの名前。namespace: 配布するリソースの名前空間。説明PropagationPolicyでは、ポリシーが存在する名前空間のリソースのみを選択できます。labelSelector: ラベルを使用してリソースを選択します。
placement
clusterAffinity: リソースを配布するクラスタ。リソースを配布するクラスタの ID。その他のオプションについては、「PropagationPolicy」をご参照ください。
説明クラスタ名ではなく、クラスタ ID を入力します。
replicaScheduling: ポッドを作成するリソースのスケジューリングポリシー。例: Deployment、StatefulSet、Job。replicaSchedulingTypeパラメーターの値は Duplicated で、各リソースがクラスタに複製されることを指定します。各クラスタのレプリカ数は、spec.Replicasパラメーターを使用して構成されます。詳細については、「PropagationPolicy」をご参照ください。次のコマンドを実行して、PropagationPolicy を作成します。
kubectl apply -f propagationpolicy.yaml
(オプション) 手順 4: Fleet インスタンスに OverridePolicy を作成する
OverridePolicy を構成して、さまざまなクラスタとリソースのデプロイ要件を満たすことができます。OverridePolicy を作成すると、選択したクラスタにデプロイされる前にリソースが変更されます。
この例では、replicas の数が 1 に変更され、イメージの registry が Alibaba Cloud の registry に変更されます。
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」をご参照ください。
パラメーター
説明
例
resourceSelector
オーバーライドするリソースを選択します。
apiVersion: 必須。オーバーライドするリソースの apiVersion。kind: 必須。オーバーライドするリソースのタイプ。name: オーバーライドするリソースの名前。namespace: オーバーライドする名前空間。説明PropagationPolicyでは、ポリシーが存在する名前空間のリソースのみを選択できます。labelSelector: ラベルを使用してリソースを選択します。
overrideRules
オーバーライドルールセットを使用してアプリケーションテンプレートをオーバーライドします。
plaintext: JSONPatch を使用してテンプレートをオーバーライドできます。imageOverrider:Registry、Repository、Versionのいずれかの方法を使用してイメージをオーバーライドできます。
次のコマンドを実行して、OverridePolicy を作成します。
kubectl apply -f overridepolicy.yaml
手順 5: 複数のクラスタでアプリケーションのステータスを表示する
次の AMC コマンドを実行して、複数のクラスタでアプリケーションのステータスを確認できます。また、関連付けられたクラスタでアプリケーションの実行ステータスを確認して、Fleet インスタンスのアプリケーションが配布されていることを確認することもできます。
次のコマンドを実行して、アプリケーションのステータスをクエリします。
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 Yコマンド出力は、アプリケーションが指定されたクラスタに配布されたことを示しています。
手順 6: アプリケーションを更新およびオーバーライドする
次の内容を使用して
web-demo.yamlファイルを変更します。この例では、replicasの数が増加しています。ビジネス要件に基づいて、アプリケーションリソースをオーバーライドまたは更新できます。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次のコマンドを実行して、
web-demo.yamlファイルを更新します。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 Y
手順 7: アプリケーションリソースを削除する
名前空間のリソースの誤削除を防ぐため、Fleet はリソースを配布しますが、リソースは削除しません。他のリソースの誤削除を防ぐため、Fleet インスタンスのアプリケーションリソースが削除された場合、または PropagationPolicy が削除された場合、デフォルトではサブクラスタのアプリケーションリソースは削除されません。サブクラスタのアプリケーションリソースを削除するには、次の手順を実行します。
ClusterPropagationPolicyのpreserveResourcesOnDeletionフィールドの値をfalseに変更します。これは、Fleet インスタンスのアプリケーションリソースが削除されたときに、サブクラスタのアプリケーションリソースが削除されることを指定します。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} # クラスタの ID。 - ${cluster2-id} # クラスタの ID。 replicaScheduling: replicaSchedulingType: Duplicated次のコマンドを実行して、PropagationPolicy を更新します。
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」をご参照ください。