このトピックでは、仮想ノードを使用してジョブを実行する方法について説明します。 この方法では、ピーク負荷を処理するためにクラスターに新しいノードを作成する必要がないため、クラスターのO&Mコストを最小限に抑えます。
背景情報
クラスター内のノードのコンピューティングリソースが不十分な場合、ポッドは通常どおり実行できません。 ただし、クラスタ内に多数のノードを作成すると、リソースが無駄になる可能性があります。 仮想ノードは、Kubernetesクラスターにほぼ無制限のコンピューティングリソースを提供し、アイドルノードなどのリソースの浪費を回避します。 これにより、ビジネス要件に基づいてクラスターにポッドを作成でき、クラスターがリソース需要の変動に対応できるようになります。 多数の仮想ノードを使用するKubernetesクラスターには、次の特徴があります。
- クラスター内のワークロードには、明らかなピーク時間とオフピーク時間があります。
- クラスターは、エラスティックコンテナインスタンスで構成されるリソースプールを使用して、トラフィックスパイクを処理し、ジョブを実行します。 これにより、コンピューティングコストが最大限に削減されます。
この例では、2つのワーカーノードを含むマネージドKubernetesクラスターが作成されます。 マスターノードはContainer Service for Kubernetes (ACK) によって管理され、無料です。 各ワーカーノードの設定は、4 CPUコアと8 GBのメモリです。 したがって、クラスターの総計算能力は8 CPUコアと16 GBのメモリです。 16 CPUコアと32 GBのメモリを要求するオフラインジョブは、データを処理するためにデプロイされます。 マネージドKubernetesクラスターで提供できるCPUコアは8個、メモリは16 GBのみであるため、ジョブの実行に失敗しました。 クラスターによって提供されるコンピューティングリソースが、ジョブの要件を満たしていません。 この問題を解決するには、仮想ノードにジョブをスケジュールし、クラスター内のノードが提供するコンピューティングリソースを使用せずにジョブを実行します。
前提条件
- Kubernetes クラスタが作成されています。 詳細については、「ACK管理クラスターの作成」をご参照ください。
- 仮想ノードがクラスターにデプロイされています。 詳細については、「仮想ノードとしてデプロイされているエラスティックコンテナインスタンスへのポッドのスケジュール」をご参照ください。
- e alibabacloud.com/eci=trueラベルはvk名前空間に追加されます。 詳細については、「指定されたラベルを持つ名前空間でのポッドの作成」をご参照ください。
- kubectlクライアントが作成されたクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
手順
- kubectlクライアントを使用して、次のコードに基づいてjob.yamlファイルを作成します。
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] resources: requests: cpu: 16 memory: 32Gi restartPolicy: Never backoffLimit: 4
- 次のコマンドを実行してジョブをデプロイします。
kubectl -n vk apply -f job.yaml
- ポッドの状態を確認します。 次のコマンドを実行して、ポッドのステータスを照会します。
kubectl -n vk get pod -a
期待される出力:NAME READY STATUS RESTARTS AGE pi-7cmwv 0/1 Completed 0 2m
次のコマンドを実行して、ポッドのステータスの詳細を照会します。kubectl -n vk describe pod
期待される出力:Name: pi-7cmwv Namespace: vk Priority: 0 PriorityClassName: <none> Node: virtual-kubelet/ ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m default-scheduler Successfully assigned vk/pi-7cmwv to virtual-kubelet Normal SuccessfulMountVolume 2m kubelet, eci MountVolume.SetUp succeeded for volume "default-token-b2tff" Normal Pulling 2m kubelet, eci pulling image "perl" Normal Pulled 2m kubelet, eci Successfully pulled image "perl" Normal Created 2m kubelet, eci Created container Normal Started 2m kubelet, eci Started container
説明 仮想ノード上のポッドは、ポッドによって使用されるリソースの量に基づいて課金されます。 ポッドが完了すると、システムは課金を停止します。
仮想ノードでジョブを実行すると、コンピューティングコストとO&Mワークロードを削減できます。 さらに、クラスターに十分なコンピューティングリソースがあるかどうか、またはノード数をスケーリングする必要があるかどうかについて心配する必要はありません。