Batch on GKE リソースの管理

BatchQueue

Queue は、互いに関連性の高いジョブをグループ化、管理するための手段です。

BatchQueue を作成する

BatchQueue を作成するには、既存の BatchPriority の名前をメモするか、使用する新しい BatchPriority を作成します。

以下の default_queue.yaml ファイルは、BatchQueue のシンプルなマニフェストです。

   apiVersion: kbatch.k8s.io/v1beta1
   kind: BatchQueue
   metadata:
     labels:
       controller-tools.k8s.io: "1.0"
     name: default
     namespace: default
   spec:
     batchPriorityName: critical
     # Attaching a budget here is optional.
     batchBudgetName: default
     # Attaching constraints here is optional.
     constraintNames: ["default"]
   

BatchQueue を作成します。

   kubectl apply -f default_queue.yaml
   

出力は次のようになります。

   batchqueue.kbatch.k8s.io/default created
   

BatchQueue を一覧表示します。

   kubectl get batchqueues
   kubectl get batchqueues --all-namespaces
   

出力は次のようになります。

   NAME      AGE
   default   2m
   

BatchQueue の説明を表示します。

   kubectl describe batchqueue queuename
   

例:

   kubectl describe batchqueue default
   

出力は次のようになります。

    Name:         default
    Namespace:    default
    Labels:       constraint_default=default
                  controller-tools.k8s.io=1.0
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"kbatch.k8s.io/v1beta1","kind":"BatchQueue","metadata":{"annotations":{},"labels":{"controller-tools.k8s.io":"1.0"},"name":...
    API Version:  kbatch.k8s.io/v1beta1
    Kind:         BatchQueue
    Metadata:
      Creation Timestamp:  2019-09-11T23:57:12Z
      Finalizers:
        finalizers.kbatch.k8s.io/batchqueue
      Generation:        1
      Resource Version:  403107
      Self Link:         /apis/kbatch.k8s.io/v1beta1/namespaces/default/batchqueues/default
      UID:               dfdde64c-d4ef-11e9-b6dc-42010a8000a6
    Spec:
      Batch Budget Name:  default
      Batch Job Constraint Names:
        default
      Batch Priority Name:  critical
    Status:
      Jobs:
        Last Updated:  2019-09-12T20:27:40Z
        Phase Counts:
          Queued:   0
          Ready:    0
          Running:  0
    Events:         none
   

BatchQueue 内の既存のジョブのスケジューリングを中止する

BatchQueue でまだスケジュールされていないキュー内のジョブのスケジューリングを停止するには、PauseSchedulingtrue に設定します。

例:

次のように default_queue.yaml ファイルを更新します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchQueue
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: default
      namespace: default
    spec:
      batchPriorityName: critical
      pauseScheduling: true
   

次に、BatchQueue を次のコマンドで更新します。

kubectl apply -f default_queue.yaml

BatchQueue への新しいジョブの承諾を中止する

BatchQueue による新しいジョブの承諾を中止するには、PauseAdmission を true に設定します。

  1. 次のマニフェストから default_queue.yaml を更新します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchQueue
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: default
      namespace: default
    spec:
      batchPriorityName: critical
      pauseAdmission: true
    
  2. BatchQueue に更新を適用します。

    kubectl apply -f default_queue.yaml
    

BatchQueue を更新する

BatchQueue を更新するには、キューのマニフェスト(default_queue.yaml など)を編集して、変更を適用します。

kubectl apply -f default_queue.yaml

BatchQueue を削除する

BatchQueue を削除するには、次のコマンドを実行します。

kubectl delete batchqueue default

出力は次のようになります。

batchqueue.kbatch.k8s.io "default" deleted

次のコマンドを実行して、BatchQueue が削除されていることを確認できます。

kubectl get batchqueues

出力は次のようになります。

No resources found.

優先度の作成と管理

BatchPriority を使用すると、優先度の高い Queue からのジョブを優先度の低い Queue からのジョブよりも優先させることが可能です。

BatchPriority を作成するには、次の手順に従います。

  1. 次のマニフェストから criticalpriority.yaml を作成します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchPriority
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: critical
    spec:
      value: 150
      description: Critical Priority
    
  2. 次のコマンドを実行します。

    kubectl apply -f criticalpriority.yaml
    

    出力は次のようになります。

    batchpriority.kbatch.k8s.io/critical created
    
  3. 次のようにして BatchPriority を確認します。

    kubectl get batchpriorities
    kubectl get batchpriorities --all-namespaces
    

    出力は次のようになります。

    NAME      AGE
    critical  1m
    
  4. 次のようにして BatchPriority を記述します。

    kubectl describe batchpriority critical
    

    出力は次のようになります。

    Name:         critical
    Namespace:
    Labels:       controller-tools.k8s.io=1.0
    Annotations:  <none>
    API Version:  kbatch.k8s.io/v1beta1
    
    Metadata:
      Creation Timestamp:  2019-09-11T22:24:15Z
      Finalizers:
        finalizers.kbatch.k8s.io/batchpriority
      Generation:        1
      Resource Version:  28112
      Self Link:         /apis/kbatch.k8s.io/v1beta1/batchpriorities/critical
      UID:               e377117e-d4e2-11e9-a0de-42010a80005f
    Spec:Kind:         BatchPriority
      Description:  Critical Priority
      Value:        150
    Status:
    Events:  <none>
    

BatchPriority の更新

BatchPriority を更新するには、criticalpriority.yaml を編集してから、次のコマンドを実行します。

kubectl apply -f criticalpriority.yaml

BatchPriority の削除

BatchPriority を削除するには、次のコマンドを実行します。

kubectl delete batchpriority critical

出力は次のようになります。

batchpriority.kbatch.k8s.io "critical" deleted

次のコマンドを実行して、BatchBudget が削除されていることを確認できます。

kubectl get batchpriority

出力は次のようになります。

No resources found.

BatchJobConstraints の作成と管理(省略可)

Queue には、必要に応じて、特定の Queue 内のジョブを受け入れるポリシーを指定するジョブ制約を設定できます。

BatchJobConstraints を作成するには、次の手順を行いします。

  1. 次のマニフェストから constraint.yaml を作成します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchJobConstraint
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: default
    spec:
      # The system supports the following constraints:
      # Cpu, Memory, WallTime, Gpu, GpuModel, RetryLimit
      # Adding a BatchJobConstraint to a BatchQueue means that the BatchQueue
      # will only accept jobs that satisfy the listed constraints.
      constraints:
        - name: WallTime
          operator: LessThan
          values: ["24h"]
    
  2. 次のコマンドを実行します。

    kubectl create -f constraint.yaml
    

    出力は次のようになります。

    batchjobconstraint.kbatch.k8s.io/batchjobconstraint-sample created
    
  3. 次のようにして BatchJobConstraints を確認します。

    kubectl get batchjobconstraints
    kubectl get batchjobconstraints --all-namespaces
    

    出力は次のようになります。

    NAME                        AGE
    batchjobconstraint-sample   45s
    
  4. 次のようにして BatchJobConstraints を記述します。

    kubectl describe batchjobconstraint batchjobconstraint-sample
    

    出力は次のようになります。

    Name:         batchjobconstraint-sample
    Namespace:
    Labels:       <none>
    Annotations:  <none>
    API Version:  kbatch.k8s.io/v1beta1
    Kind:         BatchJobConstraint
    Metadata:
      Creation Timestamp:  2019-09-11T22:39:39Z
      Generation:          1
      Resource Version:    32480
      Self Link:           /apis/kbatch.k8s.io/v1beta1/batchjobconstraints/batchjobconstraint-sample
      UID:                 0a496ff2-d4e5-11e9-a0de-42010a80005f
    Spec:
      Constraints:
        Name:      Memory
        Operator:  LessThan
        Values:
          16G
        Name:      Cpu
        Operator:  In
        Values:
          1
          2
          4
        Name:      Gpu
        Operator:  In
        Values:
          1
          2
          4
        Name:      GpuModel
        Operator:  Equal
        Values:
          nvidia-tesla-v100
        Name:      WallTime
        Operator:  LessThan
        Values:
          24h
        Name:      RetryLimit
        Operator:  LessThan
        Values:
          2
    Events:  <none>
    

BatchJobConstraints の更新

BatchJobConstraints を更新するには、constraint.yaml を編集してから、次のコマンドを実行します。

kubectl apply -f constraint.yaml

BatchJobConstraints の削除

BatchJobConstraints を削除するには、次のコマンドを実行します。

kubectl delete batchjobconstraint batchjobconstraint-sample

出力は次のようになります。

batchjobconstraint.kbatch.k8s.io "batchjobconstraint-sample" deleted

次のコマンドを実行して、BatchJobConstraints が削除されていることを確認できます。

kubectl get batchjobconstraints

出力は次のようになります。

No resources found.

CostModels の作成と管理(オプション)

Batch は CostModel を使用して予算からリソースを差し引きます。CostModel は、BatchQueue に対して BatchBudget を使用する場合にのみ必要です。

CostModel を作成するには、次の手順を行いします。

  1. 次のマニフェストから default_costmodel.yaml を作成します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchCostModel
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: default
    spec:
      resources:
        # These costs are hourly and in USD. For example, based on the numbers below, running using 1 CPU
        # 1 GB of RAM, and 1 Tesla T4 GPU for 2 hours would cost 2 * ($0.031611 + $0.004237 + $0.95)
        # The values are taken from https://cloud.google.com/compute/pricing for
        # region us-west1. The values are accurate as of April 2019. Actual pricing depends on various factors,
        # such as long-term contracts, use of standard machine types, the region, etc.
        cpu: 0.031611         # This is the on-demand price for a single vCPU
        memory: 0.004237      # This is the on-demand price for 1GB of memory
        nvidia.com/gpu: 0.95  # This is the cost for use of the Tesla T4 GPU. Currently
                              # the system does not support breaking out prices for
                              # specific GPU types, so an average price for the intended
                              # GPUs should be used here.
    
  2. 次のコマンドを実行します。

    kubectl create -f default_costmodel.yaml
    

    出力は次のようになります。

    batchcostmodel.kbatch.k8s.io/default created
    
  3. 次のようにして CostModel を確認します。

    kubectl get batchcostmodels
    

    出力は次のようになります。

    NAME      AGE
    default   2m
    
  4. CostModel を記述します。

    kubectl describe batchcostmodel default
    

    出力は次のようになります。

    Name:         default
    Namespace:
    Labels:       controller-tools.k8s.io=1.0
    Annotations:  none
    API Version:  kbatch.k8s.io/v1beta1
    Kind:         BatchCostModel
    Metadata:
      Creation Timestamp:  2019-09-11T21:39:51Z
      Generation:          1
      Resource Version:    15534
      Self Link:           /apis/kbatch.k8s.io/v1beta1/batchcostmodels/default
      UID:                 afacef7a-d4dc-11e9-b6dc-42010a8000a6
    Spec:
      Resources:
        Cpu:                 0.031611
        Memory:              0.004237
        Nvidia . Com / Gpu:  0.95
    Events:                  none
    

CostModel の更新

CostModel を更新するには、default_costmodel.yaml を編集してから、次のコマンドを実行します。

kubectl apply -f default_costmodel.yaml

CostModel の削除

CostModel を削除するには、次のコマンドを実行します。

kubectl delete batchcostmodel default

出力は次のようになります。

batchcostmodel.kbatch.k8s.io "default" deleted

次のコマンドを実行して、CostModel が削除されていることを確認できます。

kubectl get batchcostmodels

出力は次のようになります。

No resources found.

BatchBudgets の作成と管理(オプション)

Queue には、必要に応じて、予算を設定できます。予算は、指定された期間内にリソースに費やす金額を定義します。BatchCostModel は、リソースのコストを指定します。

Queue に予算が関連付けられていない場合は、Budget を基準として使用せずにジョブがスケジュールされます。

BatchBudget を作成するには、次の手順を行います。

  1. 次のマニフェストから default_budget.yaml を作成します。

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchBudget
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: default
    spec:
      batchCostModelName: "default"
      # Two durations are currently supported: 24h and 720h (30d).
      # These may be combined, by specifying two budget windows, to enforce both a
      # daily and monthly limit.
      budgetWindows:
        - duration: "24h"
          amount: 100
    
  2. 次のコマンドを実行します。

    kubectl create -f default_budget.yaml
    

    出力は次のようになります。

    batchbudget.kbatch.k8s.io/default created
    
  3. 次のようにして BatchBudget を確認します。

    kubectl get batchbudgets
    kubectl get batchbudgets --all-namespaces
    

    出力は次のようになります。

    NAME      AGE
    default   2m
    
  4. 次のようにして BatchBudget を記述します。

    kubectl describe batchbudget default
    

    出力は次のようになります。

    Name:         default
    Namespace:
    Labels:       controller-tools.k8s.io=1.0
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"kbatch.k8s.io/v1beta1","kind":"BatchBudget","metadata":{"annotations":{},"labels":{"controller-tools.k8s.io":"1.0"},"name"...
    API Version:  kbatch.k8s.io/v1beta1
    Kind:         BatchBudget
    Metadata:
      Creation Timestamp:  2019-09-11T23:57:10Z
      Finalizers:
        finalizers.kbatch.k8s.io/batchbudget
      Generation:        1
      Resource Version:  403104
      Self Link:         /apis/kbatch.k8s.io/v1beta1/batchbudgets/default
      UID:               de94325d-d4ef-11e9-a127-42010a8000d1
    Spec:
      Batch Cost Model Name:  default
      Budget Start Time:      2019-09-11T23:57:10Z
      Budget Windows:
        Amount:    100
        Duration:  24h0m0s
    Status:
      Last Updated:  2019-09-12T20:27:40Z
      Window Status List:
        Amount:      0.0003068580833333333
        Duration:    24h0m0s
        Start Time:  2019-09-11T23:57:10Z
    Events:          none
    

BatchBudget の更新

BatchBudget を更新するには、default_batchbudget.yaml を編集してから、次のコマンドを実行します。

kubectl apply -f default_batchbudget.yaml

BatchBudget の削除

BatchBudget を削除するには、次のコマンドを実行します。

kubectl delete batchbudget default

出力は次のようになります。

batchbudget.kbatch.k8s.io "default" deleted

次のコマンドを実行して、BatchBudget が削除されていることを確認できます。

kubectl get batchbudgets

出力は次のようになります。

No resources found.

次のステップ