Como gerenciar lote em recursos do GKE

Antes de começar

Você precisa ter o Batch instalado no GKE.

  1. Acesse as ferramentas de administração:

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  2. Acesse o diretório das ferramentas de administração:

    cd admintools
    

Como criar e gerenciar prioridades

Prioridades permitem priorizar jobs de filas de alta prioridade sobre jobs de filas de prioridade mais baixa.

Para criar um BatchPriority, execute as seguintes etapas:

  1. Crie criticalpriority.yaml do manifesto abaixo:

    apiVersion: kbatch.k8s.io/v1beta1
    kind: BatchPriority
    metadata:
      labels:
        controller-tools.k8s.io: "1.0"
      name: critical
    spec:
      value: 150
      description: Critical Priority
    
  2. Execute o seguinte comando:

    kubectl apply -f criticalpriority.yaml
    

    A saída é semelhante a

    batchpriority.kbatch.k8s.io/critical created
    
  3. Verifique o BatchPriority:

    kubectl get batchpriorities
    kubectl get batchpriorities --all-namespaces
    

    A saída é semelhante a

    NAME      AGE
    critical  1m
    
  4. Descreva o BatchPriority:

    kubectl describe batchpriority critical
    

    A saída é semelhante a

    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>
    

Como atualizar BatchPriorities

Para atualizar o BatchPriority, edite criticalpriority.yaml e execute o seguinte comando:

kubectl apply -f criticalpriority.yaml

Como excluir BatchPriorities

Para excluir um BatchPriority, execute o seguinte comando:

kubectl delete batchpriority critical

A saída é semelhante a

batchpriority.kbatch.k8s.io "critical" deleted

Verifique se o BatchBudget foi excluído executando:

kubectl get batchpriority

A saída é semelhante a

No resources found.

Como criar e gerenciar BatchJobConstraints

Uma restrição especifica os jobs e as políticas aceitáveis em uma determinada fila.

Para criar um BatchJobConstraints, execute as seguintes etapas:

  1. Crie constraint.yaml do manifesto abaixo:

    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. Execute o seguinte comando:

    kubectl create -f constraint.yaml
    

    A saída é semelhante a

    batchjobconstraint.kbatch.k8s.io/batchjobconstraint-sample created
    
  3. Verifique o BatchJobConstraints:

    kubectl get batchjobconstraints
    kubectl get batchjobconstraints --all-namespaces
    

    A saída é semelhante a

    NAME                        AGE
    batchjobconstraint-sample   45s
    
  4. Descreva o BatchJobConstraints:

    kubectl describe batchjobconstraint batchjobconstraint-sample
    

    A saída é semelhante a

    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>
    

Como atualizar o BatchJobConstraints

Para atualizar o BatchJobConstraints, edite constraint.yaml e execute o seguinte comando:

kubectl apply -f constraint.yaml

Como excluir BatchJobConstraints

Para excluir um BatchJobConstraints, execute o seguinte comando:

kubectl delete batchjobconstraint batchjobconstraint-sample

A saída é semelhante a

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

Verifique se o BatchJobConstraints foi excluído executando:

kubectl get batchjobconstraints

A saída é semelhante a

No resources found.

Como criar e gerenciar CostModels

Lote utiliza CostModels para deduzir recursos de um orçamento.

Para criar um CostModel, execute as seguintes etapas:

  1. Crie default_costmodel.yaml do manifesto abaixo:

    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. Execute o seguinte comando:

    kubectl create -f default_costmodel.yaml
    

    A saída é semelhante a

    batchcostmodel.kbatch.k8s.io/default created
    
  3. Verifique o CostModel:

    kubectl get batchcostmodels
    

    A saída é semelhante a

    NAME      AGE
    default   2m
    
  4. Descreva o CostModel:

    kubectl describe batchcostmodel default
    

    A saída é semelhante a

    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
    

Como atualizar CostModels

Para atualizar CostModel, edite default_costmodel.yaml e execute o seguinte comando:

kubectl apply -f default_costmodel.yaml

Como excluir CostModels

Para excluir um CostModel, execute o seguinte comando:

kubectl delete batchcostmodel default

A saída é semelhante a

batchcostmodel.kbatch.k8s.io "default" deleted

Verifique se o CostModel foi excluído executando:

kubectl get batchcostmodels

A saída é semelhante a

No resources found.

Como criar e gerenciar BatchBudgets

Um orçamento define quantos recursos uma fila pode usar ou quanto pode gastar em um período.

Para criar um BatchBudget, execute as seguintes etapas:

  1. Crie default_budget.yaml do manifesto abaixo:

    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. Execute o seguinte comando:

    kubectl create -f default_budget.yaml
    

    A saída é semelhante a

    batchbudget.kbatch.k8s.io/default created
    
  3. Verifique o BatchBudget:

    kubectl get batchbudgets
    kubectl get batchbudgets --all-namespaces
    

    A saída é semelhante a

    NAME      AGE
    default   2m
    
  4. Descreva o BatchBudget:

    kubectl describe batchbudget default
    

    A saída é semelhante a

    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
    

Como atualizar BatchBudgets

Para atualizar o BatchBudget, edite default_batchbudget.yaml e execute o seguinte comando:

kubectl apply -f default_batchbudget.yaml

Como excluir BatchBudgets

Para excluir um BatchBudget, execute o seguinte comando:

kubectl delete batchbudget default

A saída é semelhante a

batchbudget.kbatch.k8s.io "default" deleted

Verifique se o BatchBudget foi excluído executando:

kubectl get batchbudgets

A saída é semelhante a

No resources found.

Como criar e gerenciar filas

Filas são uma forma de agrupar, gerenciar e cogitar jobs relacionados.

Para criar um BatchQueue, execute as seguintes etapas:

  1. Crie default_queue.yaml do manifesto abaixo:

    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. Execute o seguinte comando:

    kubectl apply -f default_queue.yaml
    

    A saída é semelhante a

    batchqueue.kbatch.k8s.io/default created
    
  3. Verifique o BatchQueue:

    kubectl get batchqueues
    kubectl get batchqueues --all-namespaces
    

    A saída é semelhante a

    NAME      AGE
    default   2m
    
  4. Descreva o BatchQueue:

    kubectl describe batchqueues
    

    A saída é semelhante a

    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
    

Como atualizar BatchQueues

Para atualizar o BatchQueue, edite default_queue.yaml e execute o seguinte comando:

kubectl apply -f default_queue.yaml

Como excluir BatchQueues

Para excluir um BatchQueue, execute o seguinte comando:

kubectl delete batchqueue default

A saída é semelhante a

batchqueue.kbatch.k8s.io "default" deleted

Verifique se o BatchQueue foi excluído executando:

kubectl get batchqueues

A saída é semelhante a

No resources found.

A seguir