Distributed Cloud Container Platform for Kubernetes (ACK One) のフリートインスタンスのアプリケーション配布機能を使用すると、Gitリポジトリに依存することなく、複数のクラスターにアプリケーションを配布できます。これにより、デプロイプロセスが簡素化されます。 このトピックでは、フリートインスタンスでアプリケーションを作成し、配布ポリシーを使用して複数のクラスターに配布する方法について説明します。
前提条件
フリート管理機能が有効になっています。 詳細については、「マルチクラスター管理の有効化」をご参照ください。
複数のクラスターがフリートインスタンスに関連付けられています。 詳細については、「関連クラスターの管理」をご参照ください。
FleetインスタンスのkubeconfigファイルはDistributed Cloud Container Platform for Kubernetes (ACK One) コンソールで取得され、kubectlクライアントはFleetインスタンスに接続されています。
Resource Access Management (RAM) ポリシーAliyunAdcpFullAccessはRAMユーザーにアタッチされています。 詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
AMCコマンドラインツールがインストールされています。 詳細については、「AMCの使用」をご参照ください。
ステップ1 (オプション): Fleetインスタンスに名前空間を作成する
配布するアプリケーションの名前空間がフリートインスタンスに存在しない場合は、まずフリートインスタンスに作成します。 すでに存在する場合は、この手順をスキップできます。
kubeconfigファイルを使用してFleetインスタンスに接続します。 次のコマンドを実行してdemoという名前の名前空間を作成します。
kubectl create namespace demo
手順2: フリートインスタンスでのアプリケーションの作成
アプリケーションのタイプは、ConfigMap、Deployment、またはServiceです。 このトピックでは、NGINX Deploymentを例として、アプリケーションの配布方法を示します。
次のYAMLテンプレートを使用して、weighted-deployment.yamlという名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: namespace: demo # The namespace to which the application belongs. name: weighted-deployment spec: replicas: 3 selector: matchLabels: app: weighted-deployment template: metadata: labels: app: weighted-deployment spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
次のコマンドを実行して、アプリケーションをデプロイします。
kubectl apply -f weighted-deployment.yaml
手順3: フリートインスタンスに配布ポリシーを作成して、アプリケーションを複数のクラスターに配布する
配布ポリシー (PropagationPolicy) を定義して、配布するアプリケーションとターゲットクラスターを選択します。 確立されると、ポリシーは、選択されたアプリケーションを指定されたクラスタに配信する。
この例では、Deployment weighted-deploymentはcluster1とcluster2に分散され、各クラスターは3つのレプリカを受け取ります。
以下の内容でpropagationpolicy.yamlという名前のファイルを作成します。
apiVersion: one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: weighted-pp namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: weighted-deployment placement: clusterAffinity: clusterIds: - ${cluster1-id} # Your cluster ID. - ${cluster2-id} # Your cluster ID. replicaScheduling: replicaSchedulingType: Duplicated
次の表に、主要なパラメーターを示します。
パラメーター
説明
項目
resourceSelectors
配布する1つ以上のKubernetesリソースを指定します。
apiVersion
: 配布するリソースのAPIバージョンを指定します。 このフィールドは必須です。kind
: 配布するリソースのタイプを指定します。 このフィールドは必須です。name
: 配布するリソースの名前を指定します。namespace
: 配布するリソースの名前空間を指定します。説明PropagationPolicy
は、同じ名前空間内のリソースにのみ適用できます。labelSelector
: 配布するリソースの選択に使用するラベルを指定します。
配置
clusterAffinity
: リソース配布の宛先クラスターを指定します。clusterIds配列を使用してクラスターIDを直接指定します。
説明クラスター名の代わりにクラスターIDを使用してください。
replicaScheduling
: デプロイ、StatefulSets、ジョブなどの複製可能なリソースのスケジューリングポリシーを指定します。replicaSchedulingType
がDuplicatedに設定されている場合、各クラスターは、spec. replicas
で指定された数のレプリカを持つリソースのレプリカを受け取ります。次のコマンドを実行して、配布ポリシーを作成します。
kubectl apply -f propagationpolicy.yaml
ステップ4 (オプション): フリートインスタンスでのオーバーライドポリシーの作成
オーバーライドポリシーを使用すると、差別化されたデプロイを必要とするクラスターとリソースを指定できます。 ポリシーが実装されると、選択されたリソースがカスタマイズされ、指定されたクラスターにデプロイされます。
この例では、レプリカ
の数を1に設定し、イメージレジストリ
をAlibaba Cloudの数に更新することで、cluster2にデプロイされたアプリケーションに特定の変更を適用します。
次のYAMLテンプレートを使用して、overridepolicy.yamlという名前のファイルを作成します。
apiVersion: one.alibabacloud.com/v1alpha1 kind: OverridePolicy metadata: name: example namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: weighted-pp overrideRules: - targetCluster: clusterNames: - ${cluster2-id} # The cluster that requires different deployment. overriders: plaintext: - operator: replace path: /spec/replicas value: 1 imageOverrider: - component: Registry operator: replace value: registry.cn-hangzhou.aliyuncs.com
次の表に、主要なパラメーターを示します。
パラメーター
説明
項目
resourceSelector
オーバーライドが必要なリソースを指定します。
apiVersion
: 必須です。 オーバーライドが必要なリソースのAPIバージョンを指定します。kind
: 必須です。 オーバーライドが必要なリソースのタイプを指定します。name
: オーバーライドが必要なリソースの名前を指定します。namespace
: オーバーライドが必要なリソースの名前空間を指定します。説明PropagationPolicy
は、同じ名前空間内のリソースにのみ適用できます。labelSelector
: オーバーライドが必要なリソースの選択に使用するラベルを指定します。
overrideRules
一連のオーバーライド規則を使用して、アプリケーションテンプレートを変更します。
plaintex
: JSONパッチを使用してテンプレートを変更します。imageOverrider
: イメージのレジストリ
、リポジトリ
、およびタグ
を変更します。
次のコマンドを実行して、オーバーライドポリシーを作成します。
kubectl apply -f overridepolicy.yaml
手順5: 複数のクラスターでのアプリケーションのステータスの照会
次のAMCコマンドを実行して、アプリケーションの配布状況を確認します。 または、関連するクラスターにログインして、アプリケーションのステータスを確認することもできます。
次のコマンドを実行して、アプリケーションのステータスを照会します。
kubectl amc get deploy -n demo
期待される出力:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION
weighted-deployment cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
weighted-deployment cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
出力は、アプリケーションが指定されたクラスターに分散されていることを示します。
関連ドキュメント
複数のクラスターに分散されたアプリケーションの統合モニタリングの詳細については、「モニタリング管理」をご参照ください。
ゾーンディザスタリカバリ機能の詳細については、「マルチクラスターゲートウェイを使用してゾーンディザスタリカバリを実装する」をご参照ください。