場合によっては、トラフィックのバーストを処理したり、ジョブを処理したりするために、Elastic Container Instance ベースのポッドを多数作成する必要があります。ただし、指定したゾーンのリソースが不足している場合、または指定した vSwitch に使用可能な IP アドレスがない場合は、ポッドを作成できません。この問題に対処するには、Elastic Container Instance ベースのポッドを作成するときに、複数のゾーンを構成して、使用可能なリソースが十分にあることを確認します。このトピックでは、複数ゾーンを構成してポッドを作成する方法について説明します。
前提条件
vSwitch は、Elastic Container Instance を作成する仮想プライベートクラウド (VPC) の異なるゾーンに作成されます。
vSwitch の作成方法については、「vSwitch の作成と管理」をご参照ください。
Elastic Container Instance が利用可能なリージョンとゾーンについては、「リージョンとゾーン」をご参照ください。
背景情報
Elastic Container Instance を作成するときに、複数の vSwitch を指定することで、複数ゾーンを指定できます。その後、システムはリクエストを指定されたすべてのゾーンにランダムに分散します。要求されたリソースがゾーンに不足している場合、システムは別のゾーンにインスタンスを作成しようとします。
複数ゾーン (vSwitch) を指定する場合は、次の項目に注意してください。
指定された vSwitch は、同じ VPC に属している必要があります。
最大 10 個の vSwitch を指定できます。
複数のインスタンス仕様と複数ゾーンを同時に指定して、Elastic Container Instance の作成の成功率をさらに向上させることができます。
構成の説明
クラスターまたはポッドに対して複数のゾーンを指定できます。
クラスターに対して複数のゾーンを指定する場合は、クラスターに対して複数の vSwitch を指定する必要があります。この設定は、クラスター内のすべてのポッドに有効です。
ポッドに対して複数のゾーンを指定する場合は、ポッドを作成するときに複数の vSwitch を指定する必要があります。この設定は、そのポッドに対してのみ有効です。
クラスターの作成時に複数のゾーンを指定する
クラスターを作成する前に、クラスター VPC 内に異なるゾーンの複数の vSwitch を作成することをお勧めします。クラスターを作成するときに、VPC を選択し、次に複数の vSwitch を選択して複数のゾーンを指定できます。次の図は、Container Service for Kubernetes (ACK) Serverless クラスター を ACK コンソールで作成するときに複数の vSwitch を指定する方法を示しています。

既存のクラスターに複数のゾーンを指定する
複数ゾーンを構成する方法は、使用する ack-virtual-node コンポーネントのバージョンによって異なります。
ack-virtual-node コンポーネントのバージョンが v2.0.0.90-15deb126e-aliyun 以降の場合は、eci-profile を変更します。
ack-virtual-node コンポーネントのバージョンが v2.0.0.90-15deb126e-aliyun より前の場合は、関連する環境変数の値を変更します。
eci-profile を変更する
既存のクラスターの eci-profile ConfigMap を変更し、eci-profile の data.vSwitchlds フィールドに vSwitch ID を入力して、複数のゾーンを指定できます。次の操作を実行します。
eci-profile を編集します。
kubectl edit cm -n kube-system eci-profilevSwitchIdsフィールドの値を変更します。vSwitch ID を追加します。複数の vSwitch ID はコンマ (,) で区切ります。
data: enableClusterIp: "true" enableHybridMode: "false" enablePrivateZone: "false" resourceGroupId: "" securityGroupId: sg-2ze0b9o8pjjzts4h**** selectors: "" vSwitchIds: vsw-2zeet2ksvw7f14ryz****,vsw-2ze94pjtfuj9vaymf**** vpcId: vpc-2zeghwzptn5zii0w7****変更を保存して終了します。
関連する環境変数の値を変更する
新しい機能を使用するには、ack-virtual-node コンポーネントを最新バージョンにアップグレードすることをお勧めします。
複数のゾーンを指定するには、ack-virtual-node コンポーネントのデプロイ方法に基づいて、Deployment または StatefulSet の ECI_VSWITCH 環境変数の値を変更します。次の例は、Deployment の ECI_VSWITCH 環境変数の値を変更する方法を示しています。
Deployment を編集します。
kubectl -n kube-system edit deployment/virtual-node-controllerECI_VSWITCH環境変数の値を変更します。ECI_VSWITCH環境変数の値に vSwitch ID を追加します。複数の vSwitch ID はコンマ (,) で区切ります。- name: ECI_VSWITCH value: vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k****変更を保存して終了します。
ポッドの作成時に複数のゾーンを指定する
ポッドの構成ファイルのメタデータに次のアノテーションを追加して、複数のゾーンを指定できます。
k8s.aliyun.com/eci-vswitch: 複数ゾーンを指定するために使用される vSwitch の ID。
説明k8s.aliyun.com/eci-vswitchアノテーションが Elastic Container Instance ベースのポッドに追加されている場合、動的にプロビジョニングされたディスクボリュームがポッドにマウントされているときに、ポッドはWaitForFirstConsumerタイプの StorageClass の使用をサポートしません。k8s.aliyun.com/eci-schedule-strategy: マルチゾーンスケジューリングポリシー。有効な値:
VSwitchOrderedとVSwitchRandom。次の表に、スケジューリングポリシーを示します。説明k8s.aliyun.com/eci-schedule-strategy アノテーションを指定しない場合、デフォルトで VSwitchRandom ポリシーが使用されます。
ポリシー
スケジューリングの説明
VSwitchOrdered: システムは、vSwitch のソート順序でリソースをスケジュールします。
作成しているポッドにディスクをマウントする場合、ディスクのゾーンはポッドのゾーンと同じである必要があります。ポッドまたはディスクをサポートしていないゾーンは除外されます。
システムは、特定のゾーンに対応する指定された vSwitch の順序でポッドを作成しようとします。最初のゾーンの使用可能なリソースが不足している場合、システムは 2 番目のゾーンを試行します。これをポッドが作成されるまで繰り返します。
VSwitchRandom: システムは、最適な在庫ポリシーに基づいてリソースをスケジュールします。
作成しているポッドにディスクをマウントする場合、ディスクのゾーンはポッドのゾーンと同じである必要があります。ポッドまたはディスクをサポートしていないゾーンは除外されます。
Alibaba Cloud は、要件に最適な在庫を持つゾーンに対応する vSwitch を選択します。
作成しているポッドに仕様を指定した場合、指定されたポッド仕様のリザーブドインスタンスを持つゾーンが優先的に使用されてポッドが作成されます。
ストレージパフォーマンスの高いゾーンが優先的に使用されてポッドが作成されます。次の初期ゾーンは、ポッドの作成に使用される優先順位が低くなります。
cn-beijing-e と cn-beijing-d
cn-shenzhen-a、cn-shenzhen-b、cn-shenzhen-c
cn-hangzhou-b、cn-hangzhou-e、cn-hangzhou-f
cn-shanghai-a と cn-shanghai-c
アノテーションは、ポッドの構成ファイルのメタデータに追加する必要があります。たとえば、Deployment を作成するときは、spec.template.metadata セクションにアノテーションを追加する必要があります。
Elastic Container Instance の機能を使用するには、Elastic Container Instance ベースのポッドを作成するときにのみアノテーションを追加できます。ポッドを更新するときにアノテーションを追加または変更した場合、これらのアノテーションは有効になりません。
構成例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-vswitch: "vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k****" # 複数の vSwitch ID を指定します。
k8s.aliyun.com/eci-schedule-strategy: "VSwitchOrdered" # マルチゾーンスケジューリングポリシーを構成します。
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80次のステップ
ネットワークアドレス変換 (NAT) ゲートウェイを使用してインターネットにアクセスし、複数ゾーン (vSwitch) を構成して Elastic Container Instance を作成する場合は、NAT ゲートウェイに構成したソースネットワークアドレス変換 (SNAT) エントリの数が、構成したゾーンの数に対して十分であるかどうかを確認する必要があります。
たとえば、SNAT エントリを作成するときに、vSwitch を指定します。Elastic Container Instance を作成するときに複数の vSwitch を指定する場合は、新しい vSwitch に接続されている Elastic Container Instance がインターネットにアクセスできるように、新しい vSwitch の SNAT エントリを増やす必要があります。
