すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:エラスティックコンテナインスタンスを使用したジョブの実行

最終更新日:Dec 10, 2024

このトピックでは、仮想ノードを使用してジョブを実行する方法について説明します。 この方法では、ピーク負荷を処理するためにクラスターに新しいノードを作成する必要がないため、クラスターのO&Mコストを最小限に抑えます。

背景情報

クラスター内のノードのコンピューティングリソースが不十分な場合、ポッドは通常どおり実行できません。 ただし、クラスタ内に多数のノードを作成すると、リソースが無駄になる可能性があります。 仮想ノードは、Kubernetesクラスターにほぼ無制限のコンピューティングリソースを提供し、アイドルノードなどのリソースの浪費を回避します。 これにより、ビジネス要件に基づいてクラスターにポッドを作成でき、クラスターがリソース需要の変動に対応できるようになります。 多数の仮想ノードを使用するKubernetesクラスターには、次の特徴があります。
  • クラスター内のワークロードには、明らかなピーク時間とオフピーク時間があります。
  • クラスターは、エラスティックコンテナインスタンスで構成されるリソースプールを使用して、トラフィックスパイクを処理し、ジョブを実行します。 これにより、コンピューティングコストが最大限に削減されます。
Kubernetes clusters

この例では、2つのワーカーノードを含むマネージドKubernetesクラスターが作成されます。 マスターノードはContainer Service for Kubernetes (ACK) によって管理され、無料です。 各ワーカーノードの設定は、4 CPUコアと8 GBのメモリです。 したがって、クラスターの総計算能力は8 CPUコアと16 GBのメモリです。 16 CPUコアと32 GBのメモリを要求するオフラインジョブは、データを処理するためにデプロイされます。 マネージドKubernetesクラスターで提供できるCPUコアは8個、メモリは16 GBのみであるため、ジョブの実行に失敗しました。 クラスターによって提供されるコンピューティングリソースが、ジョブの要件を満たしていません。 この問題を解決するには、仮想ノードにジョブをスケジュールし、クラスター内のノードが提供するコンピューティングリソースを使用せずにジョブを実行します。

前提条件

手順

  1. 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
  2. 次のコマンドを実行してジョブをデプロイします。
    kubectl -n vk apply -f job.yaml
  3. ポッドの状態を確認します。
    次のコマンドを実行して、ポッドのステータスを照会します。
    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ワークロードを削減できます。 さらに、クラスターに十分なコンピューティングリソースがあるかどうか、またはノード数をスケーリングする必要があるかどうかについて心配する必要はありません。