Lavori in Kubernetes
Su questa pagina
- Prerequisiti
- Cosa faremo?
- Crea lavori
- Lavoro semplice
- Un lavoro con Enforce Time Limit
- 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
- 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?
- 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: NeverAncora 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.