Administra recursos de GKE con Batch

Antes de comenzar

Ya debes tener Batch instalado en GKE.

  1. Obtén las herramientas de administrador:

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  2. Ve al directorio de herramientas de administrador:

    cd admintools
    

Crea y administra prioridades

Las prioridades te permiten darles cierta importancia a los trabajos de las colas de prioridad alta por sobre los trabajos de las colas de prioridad más baja.

Para crear una BatchPriority, realiza los siguientes pasos:

  1. Crea criticalpriority.yaml desde el manifiesto a continuación:

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

    kubectl apply -f criticalpriority.yaml
    

    El resultado es similar a lo siguiente:

    batchpriority.kbatch.k8s.io/critical created
    
  3. Verifica la BatchPriority:

    kubectl get batchpriorities
    kubectl get batchpriorities --all-namespaces
    

    El resultado es similar a lo siguiente:

    NAME      AGE
    critical  1m
    
  4. Describe la BatchPriority:

    kubectl describe batchpriority critical
    

    El resultado es similar a lo siguiente:

    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>
    

Actualiza BatchPriorities

Para actualizar una BatchPriority, edita criticalpriority.yaml y, luego, ejecuta el siguiente comando:

kubectl apply -f criticalpriority.yaml

Borra BatchPriorities

Para borrar una BatchPriority, ejecuta el siguiente comando:

kubectl delete batchpriority critical

El resultado es similar a lo siguiente:

batchpriority.kbatch.k8s.io "critical" deleted

Para verificar que el BatchBudget se borre, ejecuta lo siguiente:

kubectl get batchpriority

El resultado es similar a lo siguiente:

No resources found.

Crea y administra BatchJobConstraints

Una restricción especifica los trabajos y las políticas aceptables en una Queue determinada.

Para crear BatchJobConstraints, realiza los siguientes pasos:

  1. Crea constraint.yaml desde el manifiesto a continuación:

    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. Ejecuta el comando siguiente:

    kubectl create -f constraint.yaml
    

    El resultado es similar a lo siguiente:

    batchjobconstraint.kbatch.k8s.io/batchjobconstraint-sample created
    
  3. Verifica las BatchJobConstraints:

    kubectl get batchjobconstraints
    kubectl get batchjobconstraints --all-namespaces
    

    El resultado es similar a lo siguiente:

    NAME                        AGE
    batchjobconstraint-sample   45s
    
  4. Describe las BatchJobConstraints:

    kubectl describe batchjobconstraint batchjobconstraint-sample
    

    El resultado es similar a lo siguiente:

    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>
    

Actualiza BatchJobConstraints

Para actualizar BatchJobConstraints, edita constraint.yaml y, luego, ejecuta el siguiente comando:

kubectl apply -f constraint.yaml

Borra BatchJobConstraints

Para borrar BatchJobConstraints, ejecuta el siguiente comando:

kubectl delete batchjobconstraint batchjobconstraint-sample

El resultado es similar a lo siguiente:

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

Para verificar que BatchJobConstraints se borre, ejecuta:

kubectl get batchjobconstraints

El resultado es similar a lo siguiente:

No resources found.

Crea y administra CostModels

Batch usa CostModels para deducir recursos de un presupuesto.

Para crear un CostModel, realiza los siguientes pasos:

  1. Crea default_costmodel.yaml desde el manifiesto a continuación:

    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. Ejecuta el comando siguiente:

    kubectl create -f default_costmodel.yaml
    

    El resultado es similar a lo siguiente:

    batchcostmodel.kbatch.k8s.io/default created
    
  3. Verifica el CostModel:

    kubectl get batchcostmodels
    

    El resultado es similar a lo siguiente:

    NAME      AGE
    default   2m
    
  4. Describe el CostModel:

    kubectl describe batchcostmodel default
    

    El resultado es similar a lo siguiente:

    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
    

Actualiza CostModels

Para actualizar un CostModel, edita default_costmodel.yaml y, luego, ejecuta el siguiente comando:

kubectl apply -f default_costmodel.yaml

Borra CostModels

Para borrar un CostModel, ejecuta el siguiente comando:

kubectl delete batchcostmodel default

El resultado es similar a lo siguiente:

batchcostmodel.kbatch.k8s.io "default" deleted

Para verificar que el CostModel se borre, ejecuta lo siguiente:

kubectl get batchcostmodels

El resultado es similar a lo siguiente:

No resources found.

Crea y administra BatchBudgets

En un presupuesto se definen cuántos recursos puede usar una Queue o cuánto puede gastar en un período.

Para crear un BatchBudget, realiza los siguientes pasos:

  1. Crea default_budget.yaml desde manifiesto a continuación:

    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. Ejecuta el comando siguiente:

    kubectl create -f default_budget.yaml
    

    El resultado es similar a lo siguiente:

    batchbudget.kbatch.k8s.io/default created
    
  3. Verifica el BatchBudget:

    kubectl get batchbudgets
    kubectl get batchbudgets --all-namespaces
    

    El resultado es similar a lo siguiente:

    NAME      AGE
    default   2m
    
  4. Describe el BatchBudget:

    kubectl describe batchbudget default
    

    El resultado es similar a lo siguiente:

    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
    

Actualiza BatchBudgets

Para actualizar el BatchBudget, edita default_batchbudget.yaml y, luego, ejecuta el siguiente comando:

kubectl apply -f default_batchbudget.yaml

Borra BatchBudgets

Para borrar un BatchBudget, ejecuta el siguiente comando:

kubectl delete batchbudget default

El resultado es similar a lo siguiente:

batchbudget.kbatch.k8s.io "default" deleted

Para verificar que el BatchBudget se borre, ejecuta lo siguiente:

kubectl get batchbudgets

El resultado es similar a lo siguiente:

No resources found.

Crea y administra Queues

Las colas son una forma de agrupar, administrar y relacionar trabajos muy relacionados entre sí.

Para crear una BatchQueue, realiza los siguientes pasos:

  1. Crea default_queue.yaml desde el manifiesto a continuación:

    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. Ejecuta el comando siguiente:

    kubectl apply -f default_queue.yaml
    

    El resultado es similar a lo siguiente:

    batchqueue.kbatch.k8s.io/default created
    
  3. Verifica la BatchQueue:

    kubectl get batchqueues
    kubectl get batchqueues --all-namespaces
    

    El resultado es similar a lo siguiente:

    NAME      AGE
    default   2m
    
  4. Describe la BatchQueue:

    kubectl describe batchqueues
    

    El resultado es similar a lo siguiente:

    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
    

Actualiza BatchQueues

Para actualizar una BatchQueue, edita default_queue.yaml y, luego, ejecuta el siguiente comando:

kubectl apply -f default_queue.yaml

Borra BatchQueues

Para borrar una BatchQueue, ejecuta el siguiente comando:

kubectl delete batchqueue default

El resultado es similar a lo siguiente:

batchqueue.kbatch.k8s.io "default" deleted

Para verificar que la BatchQueue se borre, ejecuta:

kubectl get batchqueues

El resultado es similar a lo siguiente:

No resources found.

Próximos pasos