コンテナサービス Kubernetes 版(ACK)サーバーレスクラスターの場合、すべてのポッドはデフォルトの x86 ベースの仮想ノード上で実行され、スケジュールする必要はありません。Elastic Compute Service (ECS) インスタンスを実際のノードで使用し、仮想ノードでエラスティックコンテナインスタンスを使用する ACK クラスターの場合、ポッドはデフォルトで実際のノードにスケジュールされます。ビジネス要件に基づいて、ポッドを仮想ノードにスケジュールできます。このトピックでは、ACK クラスター内のポッドを x86 ベースの仮想ノードにスケジュールする方法について説明します。
スケジューリング方法の概要
次のいずれかの方法を使用して、ポッドを x86 ベースの仮想ノードにスケジュールできます。
以下の方法を使用するには、既存のリソースを変更する必要があります。変更により、システムに脆弱性が発生する可能性があります。ECI スケジューラ機能を使用するために eci-profile を構成することをお勧めします。この機能を使用すると、eci-profile で一致させたい名前空間またはポッドラベルを指定できます。指定されたラベルを持つポッドは、エラスティックコンテナインスタンス上で実行するように自動的にスケジュールされます。詳細については、eci-profile の構成を参照してください。
ポッドラベルの構成
少数のポッドをエラスティックコンテナインスタンスとして実行するようにスケジュールする場合は、ポッドに特定のラベルを追加できます。その後、ポッドは x86 ベースの仮想ノード上で実行されます。
名前空間ラベルの構成
あるクラスのポッドをエラスティックコンテナインスタンスとして実行するようにスケジュールする場合は、名前空間を作成し、その名前空間に特定のラベルを追加できます。その後、名前空間内のすべてのポッドは x86 ベースの仮想ノード上で実行されます。
(ACK Pro クラスターのみ)エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーの構成
Alibaba Cloud では、エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーを構成できます。サービスをデプロイするときに、アノテーションを追加して、実際のノードまたは仮想ノードのリソースのみを使用するように指定したり、実際のノードのリソースが不足している場合に仮想ノードのリソースを自動的に使用したりするように指定できます。このポリシーは、さまざまなシナリオでのリソーススケーリング要件を満たすことができます。
(非推奨)その他の方法
デフォルトでは、ラベルとテイントは x86 ベースの仮想ノード用に構成されています。ポッドの nodeSelector フィールドと tolerations フィールドを構成して、ポッドが x86 ベースの仮想ノード上で実行されるようにスケジュールできます。また、nodeName フィールドを指定して、ポッドが x86 ベースの仮想ノード上で実行されるようにスケジュールすることもできます。
方法 1: ポッドラベルの構成
alibabacloud.com/eci=true
ラベルをポッドに追加して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。
eci=true
ラベルを追加することもできますが、このラベルを追加することはお勧めしません。
手順:
作成するポッドの YAML 構成ファイルを作成します。
vim test-pod.yaml
test-pod.yaml ファイルの例。
apiVersion: v1 kind: Pod metadata: name: nginx1 labels: alibabacloud.com/eci: "true" # ラベルを追加します。 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.yaml
test-pod.yaml ファイルの例。
apiVersion: v1 kind: Pod metadata: name: nginx namespace: vk # 手順 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: エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーの構成
ポッドの構成ファイルのメタデータに alibabacloud.com/burst-resource
アノテーションを追加して、エラスティックスケジューリングで使用するリソースのタイプを指定できます。アノテーションの有効な値:
eci: クラスターの実際のノードのリソースが不足している場合に、エラスティックコンテナインスタンスが使用されます。
eci_only: エラスティックコンテナインスタンスのみが使用されます。
この方法は、Kubernetes 1.18 以降を実行する ACK Pro クラスターでのみ使用できます。詳細については、エラスティックコンテナインスタンスベースのスケジューリングの使用を参照してください。
手順:
作成するデプロイメントの YAML 構成ファイルを作成します。
vim test-deployment.yaml
test-deployment.yaml ファイルの例。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx annotations: alibabacloud.com/burst-resource: eci # エラスティックスケジューリングで使用するリソースのタイプを指定します。 labels: app: nginx spec: containers: - name: nginx image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 resources: limits: cpu: 2 requests: cpu: 2
デプロイメントを作成します。
kubectl create -f test-deployment.yaml
(非推奨) その他の方法
nodeSelector フィールドと tolerations フィールドを構成したり、nodeName フィールドを指定したりするなど、他の方法を使用して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。
手順:
作成するポッドの YAML 構成ファイルを作成します。
vim test-pod.yaml
test-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: # nodeSelector を構成します。 type: virtual-kubelet tolerations: # tolerations を構成します。 - key: virtual-kubelet.io/provider operator: Exists
nodeName フィールドを指定します。
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 # ノード名を指定します。
ポッドを作成します。
kubectl create -f test-pod.yaml