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 / v1tipo: 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.yamlNotará 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 vainasNOMBRE 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-wg6zpCuriosamente, 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.yamlPuede 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 / v1beta1tipo: 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,
- Minuto (0-59)
- Hora (0-23)
- Día del mes (1-31)
- Mes (1-12)
- 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 vainasNOMBRE 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-hfhzfPara eliminar el cronjob, simplemente ejecute:
$ kubectl eliminar -f mi-cronjob.yamlEsto 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.