Container Service for Kubernetes (ACK) Serverless クラスターの場合、すべてのポッドはスケジュールされることなく仮想ノード上で実行されます。デフォルトでは、仮想ノードは x86 アーキテクチャです。実ノードの Elastic Compute Service (ECS) インスタンスと仮想ノードの Elastic Container Instance を使用する ACK クラスターの場合、ポッドはデフォルトで実ノードにスケジュールされます。ビジネス要件に基づいて、ポッドを仮想ノードにスケジュールできます。このトピックでは、Elastic Container Instance 上でポッドを実行するために、ACK クラスター内のポッドを x86 ベースの仮想ノードにスケジュールする方法について説明します。
スケジューリング方法の概要
次のいずれかの方法を使用して、ポッドを x86 ベースの仮想ノードにスケジュールできます。
以下の方法を使用するには、既存のリソースを変更する必要があります。変更により、システムに脆弱性が発生する可能性があります。指定されたラベルを持つポッドを Elastic Container Instance 上で実行するように自動的にスケジュールするには、eci-profile を構成することをお勧めします。詳細については、「eci-profile の構成」をご参照ください。
ポッドラベルまたは名前空間ラベルを追加するか、nodeName を指定するスケジューリング方法を使用する場合、動的にプロビジョニングされたディスクボリュームが Elastic Container Instance ベースのポッドにマウントされている場合、プロビジョナーは
WaitForFirstConsumerStorageClass をサポートしません。詳細については、「動的にプロビジョニングされたディスクボリュームの使用」をご参照ください。
ポッドラベルの構成
少数のポッドを Elastic Container Instance 上で実行するようにスケジュールする場合は、ポッドに特定のラベルを追加できます。その後、ポッドは x86 ベースの仮想ノード上で実行されます。
名前空間ラベルの構成
あるクラスのポッドを Elastic Container Instance 上で実行するようにスケジュールする場合は、名前空間を作成し、その名前空間に特定のラベルを追加できます。その後、名前空間内のすべてのポッドは x86 ベースの仮想ノード上で実行されます。
(非推奨) その他の方法
デフォルトでは、ラベルとテイントは x86 ベースの仮想ノード用に構成されています。ポッドの nodeSelector フィールドと tolerations フィールドを構成して、x86 ベースの仮想ノード上で実行するようにポッドをスケジュールできます。 nodeName フィールドを指定して、x86 ベースの仮想ノード上で実行するようにポッドをスケジュールすることもできます。
方法 1: ポッドラベルの構成
alibabacloud.com/eci=true ラベルをポッドに追加して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。
eci=true ラベルをポッドに追加することもできますが、このラベルを使用しないことをお勧めします。
手順:
作成するポッドの YAML 構成ファイルを作成します。
vim test-pod.yamltest-pod.yaml ファイルの例。
apiVersion: v1 kind: Pod metadata: name: nginx1 labels: alibabacloud.com/eci: "true" # Add a label. /* ラベルを追加します。 */ spec: containers: - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 imagePullPolicy: Always name: nginxポッドを作成します。
kubectl create -f test-pod.yaml
方法 2: 名前空間ラベルの構成
名前空間を作成し、alibabacloud.com/eci=true ラベルを名前空間に追加できます。その後、名前空間内のすべてのポッドはエラスティックコンテナインスタンス上で実行されるようにスケジュールされます。
virtual-node-affinity-injection=enabled ラベルを名前空間に追加することもできますが、このラベルを使用しないことをお勧めします。
手順:
名前空間を作成します。
kubectl create ns vk名前空間にラベルを追加します。
kubectl label namespace vk alibabacloud.com/eci=true作成するポッドの YAML 構成ファイルを作成します。
vim test-pod.yamltest-pod.yaml ファイルの例。
apiVersion: v1 kind: Pod metadata: name: nginx namespace: vk # Specify the namespace to which you added a label in Step 2. /* 手順 2 でラベルを追加した名前空間を指定します。 */ spec: containers: - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 imagePullPolicy: Always name: nginxポッドを作成します。
kubectl create -f test-pod.yaml
方法 3: (非推奨) その他の方法
nodeSelector フィールドと tolerations フィールドを構成したり、nodeName フィールドを指定したりするなど、他の方法を使用して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。
手順:
作成するポッドの YAML 構成ファイルを作成します。
vim test-pod.yamltest-pod.yaml ファイルの例
nodeSelector フィールドと tolerations フィールドを構成します。
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 imagePullPolicy: Always name: nginx nodeSelector: # Configure nodeSelector. /* nodeSelector を構成します。 */ type: virtual-kubelet tolerations: # Configure tolerations. /* tolerations を構成します。 */ - key: virtual-kubelet.io/provider operator: ExistsnodeName フィールドを指定します。
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 imagePullPolicy: Always name: nginx nodeName: virtual-kubelet-cn-beijing-g # Specify a node name /* ノード名を指定します */。
ポッドを作成します。
kubectl create -f test-pod.yaml