プリエンプティブルインスタンスを利用してコスト効率を高め、Kubernetes クラスターのパラメーターを最適化して効率的なエラスティックスケジューリングを行うことで、サーバーレスの Elastic Container Instance (ECI) 上で Argo Workflows を大規模に実行します。
前提条件
次のことを確認してください:
-
Distributed Cloud Container Platform for Kubernetes (ACK One) がアクティブ化されていること。
-
バージョン 3.0.159 以降のAlibaba Cloud CLI がインストールされ、認証情報が設定されていること
-
RAM ユーザーに AliyunAdcpFullAccess ポリシーが付与されていること
-
jqがインストールされていること (CLI の手順で必要):-
macOS:
brew install jq -
CentOS:
yum install jq -
Ubuntu:
apt-get install jq
-
ワークフロークラスターの作成
コンソールを使用
-
ACK One コンソールにログインします。
-
[ワークフロークラスター] ページで、[ワークフロークラスターの作成] をクリックします。次のパラメーターを設定し、[作成] をクリックします。
パラメーター 説明 [クラスター名] 長さは 1~63 文字である必要があります。英字、数字、アンダースコア ( _)、ハイフン (-) を使用できます。先頭は英字である必要があります。[リージョン] デプロイ先のリージョン。 [VPC] クラスターが使用する VPC。 [vSwitch] VPC 内の vSwitch。 [API サーバーの SLB インスタンス] 設定は不要です。Server Load Balancer (SLB) の slb.s2.small インスタンスが自動的に作成されます。このインスタンスを削除すると、API サーバーにアクセスできなくなります。詳細については、 「課金概要」 をご参照ください。 [EIP の作成と関連付け] Elastic IP アドレス (EIP) を作成して API サーバーをインターネットに公開するかどうかを指定します。子クラスターがフリートのパブリックアクセスエンドポイントを既に使用している可能性があるため、EIP は後から関連付けを解除することはできません。無効にすると、API サーバーはインターネットにアクセスできなくなります。詳細については、「課金概要」をご参照ください。 [操作ログと監査ログの収集を有効化] Simple Log Service (SLS) を有効にします。k8s-log-{ClusterID} という名前のサービスが作成され、監査のために kube-apiserverとkube-controller-managerのログが収集されます。詳細については、「課金概要」をご参照ください。
Alibaba Cloud CLI を使用
-
環境変数を設定します。プレースホルダーを実際のリソース ID に置き換えてください。
export REGION_ID=cn-zhangjiakou export VPC_ID=<your-vpc-id> export VSWITCH_IDS='["<vsw-id-1>","<vsw-id-2>"]' export CLUSTER_NAME=workflow1 -
CLI のリージョンを設定し、ワークフロークラスターを作成します。
パラメーター 必須 説明 Profileはい XFlowに設定します。RegionIdはい クラスターがデプロイされるリージョン。 VpcIdはい VPC の ID。 VSwitchesはい vSwitch ID の JSON 配列。高可用性を実現するために、異なるゾーンを使用してください。 Nameいいえ クラスター名。 IsEnterpriseSecurityGroupはい trueに設定すると、エンタープライズセキュリティグループを使用します。ApiServerPublicEipいいえ trueに設定すると、API サーバーが EIP 経由で公開されます。aliyun configure set --region $REGION_ID aliyun adcp CreateHubCluster \ --Profile XFlow \ --RegionId $REGION_ID \ --VpcId $VPC_ID \ --VSwitches "$VSWITCH_IDS" \ --Name $CLUSTER_NAME \ --ApiServerPublicEip true \ --IsEnterpriseSecurityGroup true出力例:
{ "ClusterId": "c1234abcd...", "RequestId": "A1B2C3D4...", "TaskId": "T9876..." }次の手順のために、
ClusterIdの値を保存してください。export CLUSTER_ID=<your-cluster-id> -
クラスターが
running状態になるのを待ちます。aliyun adcp DescribeHubClusterDetails --ClusterId $CLUSTER_ID | jq .Cluster.ClusterInfoステータスが
runningと表示されるまで再実行してください。 -
kubeconfig ファイルを生成してエクスポートします。
aliyun adcp DescribeHubClusterKubeconfig --ClusterId $CLUSTER_ID \ | jq -r .Kubeconfig \ | tee ack-argo-workflow-kubeconfig export KUBECONFIG=ack-argo-workflow-kubeconfigこれで、
kubectlと Argo CLI の両方が、デフォルトでこのクラスターをターゲットにするようになります。
ワークフロークラスターの削除
削除する前に、クラスター内のすべてのワークフロー、Pod、および ECI インスタンスを削除してください。
コンソールを使用
-
ACK One コンソールにログインします。
-
ドロップダウンリストから削除するクラスターを選択します。
-
[ワークフロークラスター] ページで、[ワークフロークラスターの削除] をクリックします。[OK] をクリックして確認します。
Alibaba Cloud CLI を使用
-
Argo Server を無効にし、関連する SLB インスタンスと ECI インスタンスを削除します。
aliyun adcp UpdateHubClusterFeature --ArgoServerEnabled false --ClusterId $CLUSTER_ID -
ワークフロークラスターを削除します。
aliyun adcp DeleteHubCluster --ClusterId $CLUSTER_ID