Batch on GKE リソースの管理

始める前に

Batch on GKE をインストールしている必要があります。

  1. 管理ツールを入手します。

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  2. 管理ツール ディレクトリに移動します。

    cd admintools
    

優先度の作成と管理

優先度を使用すると、優先度の高いキューからのジョブを優先度の低いキューからのジョブよりも優先させることができます。

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 の作成と管理

制約は、特定のキューに受け入れ可能なジョブとポリシーを指定します。

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.

CostModel の作成と管理

Batch は CostModel を使用して予算からリソースを差し引きます。

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.

BatchBudget の作成と管理

予算は、1 つのキューで使用できるリソースの数や、一定期間内に消費できる量を定義します。

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.

キューの作成と管理

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

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

  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: high
      batchBudgetName: default
      constraintNames: ["default"]
    
  2. 次のコマンドを実行します。

    kubectl apply -f default_queue.yaml
    

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

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

    kubectl get batchqueues
    kubectl get batchqueues --all-namespaces
    

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

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

    kubectl describe batchqueues
    

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

    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:  high
    Status:
      Jobs:
        Last Updated:  2019-09-12T20:27:40Z
        Phase Counts:
          Queued:   0
          Ready:    0
          Running:  0
    Events:         none
    

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.

次のステップ