Kubernetes

Trabajos de Kubernetes y trabajos Cron

Trabajos de Kubernetes y trabajos Cron
La mayoría de las aplicaciones que se ejecutan en un sistema distribuido como Kubernetes siempre están activas como servidores web o bases de datos o servidores API. Pero hay una clase separada de objetos que están destinados a ejecutarse una vez o solo se despiertan de vez en cuando y siguen su curso. Los trabajos periódicos como las renovaciones de certificados TLS con agentes como Certbot son un ejemplo clásico de estos trabajos que se ejecutan en servidores tradicionales. Estos se hacen usando la utilidad Cron en sistemas Unix.

Kubernetes tiene una forma análoga de ejecutar procesos únicos Trabajos y procesos periódicos como trabajos cron.

Comenzaremos con un ejemplo típico de lo que son los trabajos y demostraremos un ejemplo estándar de los documentos oficiales. A partir de este ejemplo, será fácil comprender lo que significa ejecutar un trabajo correctamente en el contexto de Kubernetes.

Para seguir, le recomendaría que use Kataconda Playground for Kubernetes, que proporcionará un clúster de Kubernetes listo para usar sin que tenga que configurar manualmente uno o arriesgar un clúster de producción para experimentos.

Empleos en Kubernetes

Los trabajos son abstracciones de Kubernetes de nivel superior, similares a ReplicaSets y Deployments. Pero a diferencia de los pods administrados por implementaciones y ReplicaSets, los pods que realizan un trabajo completan su trabajo y salen.

Cuando se completa un número específico de pods, se dice que el trabajo se completó con éxito. ¿Cuáles son los criterios que definen una terminación exitosa de un pod es algo que definiremos en el archivo YAML del trabajo?. Luego, el controlador del trabajo se asegurará de que una cierta cantidad de pods hayan terminado con éxito y se diga que el trabajo está completo.

Creemos un trabajo que imprima dígitos de pi hasta 2000 lugares en sus registros que examinaremos. Crea un archivo y llámalo mi trabajo.yaml y guarde el siguiente contenido en él;

apiVersion: batch / v1
tipo: trabajo
metadatos:
nombre: pi
Especificaciones:
plantilla:
Especificaciones:
contenedores:
- nombre: pi
imagen: perl
comando: ["perl", "-Mbignum = bpi", "-wle", "imprimir bpi (2000)"]
reiniciarPolítica: Nunca
límite de retroceso: 4

Cree el trabajo, usando este archivo:

$ kubectl crear -f ./trabajo.yaml

Notará que el trabajo tardará entre unos segundos y un par de minutos en ejecutarse y, una vez hecho,. Cuando intente enumerar todos los pods usando:

$ kubectl obtener vainas
NOMBRE ESTADO LISTO REINICIA EDAD
pi-wg6zp 0/1 Completado 0 50s

Verá que el estado del pod relacionado con pi es Terminado no funcionando o terminado.También puede copiar el nombre del pod para que podamos verificar que pi se haya calculado en 2000 dígitos. El nombre específico de la cápsula puede diferir en su caso.

$ kubectl registra pi-wg6zp

Curiosamente, la vaina no tiene Terminado todavía está muy activo, solo que no hay aplicaciones ejecutándose dentro de él. Similar a encender la computadora y no usarla. Si se cancelara la cápsula, no habríamos podido extraer los registros de ella, en primer lugar.

Para limpiar el trabajo y todos los pods que se crearon, ejecute el comando:

$ kubectl eliminar -f mis-trabajos.yaml

Puede obtener más información sobre las especificaciones del trabajo y cómo escribir su especificación en la documentación oficial.

Empleos de Cron

Cron Jobs es similar a la utilidad Cron en Unix que se ejecuta periódicamente de acuerdo con un programa que deseamos. No es algo superestable en Kubernetes, en el momento de escribir este artículo, por lo que es posible que desee tener cuidado al usar. Para citar los documentos oficiales:

"Un trabajo cron crea un objeto de trabajo acerca de una vez por tiempo de ejecución de su horario. Decimos "sobre" porque hay determinadas circunstancias en las que se pueden crear dos puestos de trabajo o no se puede crear ningún puesto de trabajo. Intentamos hacer que estos sean raros, pero no los evitamos por completo. Por lo tanto, los trabajos deben idempotente"

El término idempotente significa que el trabajo cron, ya sea que se realice una o dos veces o cualquier número de veces, tendría el mismo efecto en el sistema. Buscar actualizaciones, monitorear ese tipo de operaciones puede considerarse idempotente. Pero modificar datos o escribir en una base de datos no se encuentran entre estos.

Escribamos un trabajo cron que escriba un "Hola, mundo!"Mensaje en sus registros junto con una marca de tiempo de cuándo se escribió ese mensaje. Crear archivo llamado my-cronjob.yaml y escribe el siguiente contenido:

apiVersion: batch / v1beta1
tipo: CronJob
metadatos:
nombre: my-cronjob
Especificaciones:
Horario 1 * * * *"
jobTemplate:
Especificaciones:
plantilla:
Especificaciones:
contenedores:
- nombre: hola
imagen: busybox
argumentos:
- / bin / sh
- -C
- fecha; echo Hello desde el clúster de Kubernetes
reiniciarPolicy: OnFailure

La parte del horario del trabajo es la más crucial. Sigue la convención estándar de Cron, hay una lista de números separados por espacios. Los cinco números representan,

  1. Minuto (0-59)
  2. Hora (0-23)
  3. Día del mes (1-31)
  4. Mes (1-12)
  5. Día de la semana (0-6) a partir del domingo

Usando asterisco (*) para un campo significa cualquier valor disponible de ese campo (como un comodín) y la primera entrada en nuestro programa "* / 1 * * * *" indica que el trabajo debe ejecutarse cada minuto independientemente de la hora, día o mes de el año. El uso de * / 5 imprimirá el mensaje cada 5 minutos.

Puede obtener más información sobre la especificación cronjob yaml en los documentos oficiales. Veamos todos los pods que se ejecutan para el trabajo, al que llamamos my-cronjob.

$ kubectl obtener vainas
NOMBRE ESTADO LISTO REINICIE EDAD
my-cronjob-1534457100-hfhzf 0/1 Completado 0 2m
my-cronjob-1534457160-gk85l 0/1 Completado 0 1m
my-cronjob-1534457220-bj22x 0/1 Completado 0 57s

Profundizar en los registros de cada uno de los pods revelaría un solo mensaje con una marca de tiempo, ya que todos fueron creados en diferentes momentos, todos tendrán diferentes marcas de tiempo.

$ kubectl log my-cronjob-1534457100-hfhzf

Para eliminar el cronjob, simplemente ejecute:

$ kubectl eliminar -f mi-cronjob.yaml

Esto también eliminará los pods que se crearon en el debido proceso.

Referencias

Puede obtener más información sobre los trabajos de Kubernetes aquí y, para los trabajos de Cron, puede visitar esta sección de su documentación bien estructurada.

Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....