Ricerca nel sito web

Lavori in Kubernetes


Su questa pagina

  1. Prerequisiti
  2.  Cosa faremo?
  3. Crea lavori
    1. Lavoro semplice
    2. Un lavoro con Enforce Time Limit
    3. Cronjob

    Un job crea uno o più pod per eseguire una particolare operazione e garantisce che i pod terminino correttamente. Quando un numero specificato di pod viene completato correttamente, il lavoro è completo. Quando un lavoro viene eliminato, elimina i pod che ha creato. Un job può anche essere utilizzato per eseguire più pod in parallelo.

    Per saperne di più su Kubernetes Jobs, fai clic qui.

    In questo articolo vedremo l'implementazione di un job semplice, un job con limite di tempo e un cronjob.

    Prerequisiti

    1. Cluster Kubernetes con almeno 1 nodo di lavoro.
      Se vuoi imparare a creare un cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18.04 EC2.

    Che cosa faremo?

    1. Crea lavori

    Crea posti di lavoro

    Lavoro semplice

    Crea un file di definizione della porta multi-container utilizzando il seguente contenuto.

    vim simple-job-1.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: simple-job-1
    spec:
      template:
        spec:
          containers:
            - name: job-1
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo sleeping....; sleep 30s; echo exiting!; date
          restartPolicy: Never

    Ottieni un elenco di pod e lavori esistenti nel cluster Kubernetes e crea un lavoro utilizzando i seguenti comandi.

    kubectl get pods
    kubectl get jobs
    kubectl create -f simple-job-1.yml

    Nello screenshot sopra, puoi vedere che non ci sono pod e job nel cluster esistente ed è stato creato un nuovo job.

    Quando crei un lavoro,  viene creato un pod con il nome del lavoro insieme al lavoro.

    Puoi ottenere il pod e il job utilizzando i seguenti comandi.

    kubectl get pods
    kubectl get jobs

    Nello screenshot sopra, puoi vedere che il lavoro viene completato dopo la sua esecuzione.

    Quando non hai più bisogno del tuo lavoro puoi cancellarlo usando il seguente comando.

    kubectl delete -f simple-job-1.yml
    kubectl get pods
    kubectl get jobs

    Un lavoro con Enforce Time Limit

    È possibile imporre un limite di tempo nel lavoro che assicura che il lavoro debba completare la sua esecuzione entro il limite di tempo specificato.

    Creare un file di definizione lavoro con il seguente contenuto.

    vim enforce-time-limit-job-2.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: enforce-time-limit-job-2
    spec:
      activeDeadlineSeconds: 20
      template:
        spec:
          containers:
            - name: job-2
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo some task which should complete in 30 secs....but due to activeDeadlineSeconds=5 will get terminated within 5 secs before its completetion; sleep 30s; echo exiting!; date 
    restartPolicy: Never

    Ancora una volta ottieni un elenco di pod e processi nel cluster Kubernetes e crea un processo utilizzando il file precedente.

    kubectl get jobs
    kubectl get pods
    kubectl create -f enforce-time-limit-job-2.yml

    Dopo aver creato il lavoro, se ne controlli i dettagli, puoi osservare che il pod che viene creato dopo aver creato il lavoro termina prima del suo completamento, ovvero non viene eseguito per 30 secondi e viene terminato

    Verificare il motivo della sua terminazione utilizzare il seguente comando

    kubectl get pods
    kubectl  get jobs enforce-time-limit-job-2 -o yaml

    Nello screenshot sopra alla prima riga, puoi vedere che abbiamo specificato activeDeadlineSeconds=20. E abbiamo specificato sleep=30 secondi. Ciò significa che il nostro pod avrebbe dovuto essere attivo per 30 secondi, ma è stato terminato entro 20 secondi.

    Ora per eliminare il lavoro, puoi usare il seguente comando.

    kubectl delete -f enforce-time-limit-job-2.yml
    kubectl get jobs

    Cronjob

    Per creare un processo cronjob come oggetto in Kubernetes, crea un file con i seguenti contenuti. Questo cronjob in Kubernetes è uguale al Cronjob in Linux.

    vim cronjob-3.yml
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob-3
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: cronjob-container
                  image: busybox
                  args:
                    - /bin/sh
                    - -c
                    - date; echo sleeping for 5 secs....; sleep 5s; echo exiting...;
              restartPolicy: Never

    La definizione precedente indica che il processo verrà creato ogni 1 minuto e durerà 5 secondi.

    Utilizza i seguenti comandi per ottenere un elenco di job e pod esistenti e creare un cronjob.

    kubectl get jobs
    kubectl get pods
    kubectl create -f cronjob-3.yml

    Per verificare che il nuovo lavoro venga creato ogni minuto per completare l'attività definita, utilizza il seguente comando.

    kubectl  get jobs -w

    Ora puoi controllare i log in cui puoi osservare che il lavoro inizia dopo ogni 1 minuto.

    kubectl get pods
    kubectl logs cronjob-3-1594359720-jfkcl

    Nello screenshot sopra, puoi vedere i log di diversi pod che sono stati creati come parte del lavoro dopo ogni minuto.

    Ciò significa che il lavoro è stato attivato dopo ogni minuto.

    Quando non hai più bisogno del lavoro, puoi eliminarlo utilizzando il seguente comando.

    kubectl delete -f cronjob-3.yml
    kubectl get pods
    kubectl get jobs

    Conclusione

    In questo articolo, abbiamo imparato a creare un lavoro semplice in Kubernetes. Abbiamo visto come possiamo imporre il limite di tempo sul lavoro per assicurarci che il lavoro non venga eseguito per troppo tempo. Alla fine, abbiamo visto i passaggi per creare un cronjob che viene creato da solo per portare a termine l'attività all'ora specificata. Questo oggetto Cronjob in Kubernetes è simile al job Cronjob in Linux.