短期間に多数の Pod を迅速に作成する必要がある場合、Elastic Compute Service (ECS) ノードのスケーリングでは時間がかかりすぎる可能性があります。また、余分な ECS ノードを予約すると、リソースの無駄になります。Container Service for Kubernetes (ACK) 仮想ノードを使用すると、ECS ノードを購入または管理することなく、Pod を Elastic Container Instance (ECI) に直接スケジュールできます。このトピックでは、ACK マネージドクラスターで Pod を ECI にスケジュールする方法について説明します。
シナリオ
ECI を使用すると、トラフィックスパイクに対応し、計算コストを削減できます。一般的なシナリオは次のとおりです。
トラフィックのピークと谷が明確なオンラインサービス
オンライン教育、eコマース、および同様のサービスのトラフィックには、明確なピークと谷があることがよくあります。ECI ベースの Pod を使用すると、トラフィックスパイクにより迅速に対応し、固定リソースプールを維持する必要性を減らすことができるため、計算コストが削減されます。
非連続的な計算タスク
ECI ベースの Pod で計算タスクを実行します。固定ノードを維持する必要はありません。タスク実行中に使用された計算リソースに対してのみ支払いが発生するため、計算コストが削減されます。例としては、Spark や AI タスクなどがあります。
前提条件
ご利用の ACK クラスターは Kubernetes バージョン 1.16 以降を実行している必要があります。クラスターが配置されているリージョンが ECI をサポートしている必要があります。
ご利用のクラスターのリージョンがサポートされているか確認してください。詳細については、「ECI がサポートするリージョンとゾーン」をご参照ください。その後、Elastic Container Instance コンソールにログインして ECI サービスをアクティブ化します。
操作手順
ステップ 1: ack-virtual-node コンポーネントをデプロイする
以下の手順では、ACK マネージドクラスターを例として使用します。ACK 専用クラスターの場合、Marketplace ページから ack-virtual-node コンポーネントをデプロイします。詳細については、「ack-virtual-node コンポーネントのデプロイ」をご参照ください。
ACK コンソールにログインします。ACK コンソール。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左ナビゲーションペインで、アドオン管理 をクリックします。
コンポーネント管理 ページで、コアコンポーネント セクションにある ACK Virtual Node を見つけて、インストール をクリックします。その後、プロンプトに従って操作を完了します。
インストール中、クラスターのデフォルトの vSwitch とセキュリティグループが初期 ECI 構成パラメーターとして使用されます。これらを変更するには、「eci-profile 構成」を更新できます。
ステップ 2: Pod を Elastic Container Instance にスケジュールする
以下の手順では、Pod または名前空間にラベルを追加することで、Pod を仮想ノードにスケジュールして ECI で実行する方法を示します。その他のスケジューリングオプションについては、「Pod を仮想ノードにスケジュールする」をご参照ください。
Pod にラベルを追加する
特定の Pod を ECI で実行するようにスケジュールするには、Pod にラベル alibabacloud.com/eci: "true" を追加します。Pod は ECI として x86 アーキテクチャ仮想ノードで実行されます。
以下の YAML ファイルを使用して Deployment を作成します。
kubectl create -f eci-pod.yamleci-pod.yaml の例は次のとおりです。
説明この YAML は、アノテーション
k8s.aliyun.com/eci-use-specsを使用して ECI Pod 仕様を指定します。ECI Pod 仕様の構成の詳細については、「Elastic Container Instance の計算仕様を指定する」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx alibabacloud.com/eci: "true" # Add this label to schedule the pod to ECI annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Specify 2 vCPUs and 4 GiB of memory for the ECI pod spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80Pod が仮想ノードで実行されているか確認します。
kubectl get pod -o wide -l app=nginx期待される出力は次のとおりです。
NODE列で、Pod が仮想ノードにスケジュールされていることを確認できます。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-86f7fbc94f-g5m22 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-86f7fbc94f-r4wcn 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>ECI Pod の詳細を表示します。
kubectl get pod <pod-name> -o yaml返された YAML で、
k8s.aliyun.com/eci-instance-idフィールドを使用して ECI インスタンス ID を取得します。k8s.aliyun.com/eci-instance-specフィールドを使用して、ECI Pod の実際の課金仕様を確認します。
名前空間にラベルを追加する
Pod のグループを ECI で実行するようにスケジュールするには、名前空間を作成し、ラベル alibabacloud.com/eci: "true" を追加します。この名前空間内のすべての Pod は、ECI として x86 アーキテクチャ仮想ノードで実行されます。
名前空間
vkを作成し、それにラベルを追加します。kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true以下の YAML ファイルを使用して、
vk名前空間に Deployment を作成します。kubectl create -f eci-namespace.yamleci-namespace.yaml の例は次のとおりです。
説明この YAML は、アノテーション
k8s.aliyun.com/eci-use-specsを使用して ECI Pod 仕様を指定します。ECI Pod 仕様の構成の詳細については、「Elastic Container Instance の計算仕様を指定する」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # Specify a namespace with the label to schedule pods to ECI labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Specify 2 vCPUs and 4 GiB of memory for the ECI pod spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80Pod が仮想ノードで実行されているか確認します。
kubectl get pod -o wide -l app=nginx -n vk期待される出力は次のとおりです。
NODE列で、Pod が仮想ノードにスケジュールされていることを確認できます。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-8f54bcfb5-86pvc 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-8f54bcfb5-skvkg 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>ECI Pod の詳細を表示します。
kubectl get pod <pod-name> -o yaml -n vk返された YAML で、
k8s.aliyun.com/eci-instance-idフィールドを使用して ECI インスタンス ID を取得します。k8s.aliyun.com/eci-instance-specフィールドを使用して、ECI Pod の実際の課金仕様を確認します。