prefecto | Cómo usar Kubernetes con Por Jeff Hale | Blog Prefecto | noviembre, 2022
Parte 1: Funciona y funciona
¡Kubernetes es un trabajo duro! ? Esta es una excelente manera de escalar declarativamente la infraestructura en contenedores para procesos de ejecución prolongada. Kubernetes también puede ser un oso. ? Tiene muchas partes móviles con las que puede ser difícil trabajar en armonía.
¡El prefecto es genial! ? Le permite coordinar sus flujos de datos, incluidos los reintentos automáticos, el almacenamiento en caché, la configuración reutilizable, la interfaz de usuario colaborativa y más. para ejecutar en un horario con. Prefect también le permite monitorear lo que sucede en su pila de datos con notificaciones y registros automáticos.
La compatibilidad con Kubernetes integrada de Prefect facilita la ejecución de su código de flujo de datos de Python a escala. Obtiene toda esa bondad de orquestación y observabilidad con una infraestructura escalable para procesos de ejecución prolongada. ?
Si no está familiarizado con Kubernetes (también conocido como K8), consulte mis publicaciones introductorias sobre K8. conceptos y comandos.
Si no está familiarizado con Prefect v2, le sugiero que lo haga Lecciones de prefecto y comprobado documentos conceptuales para secuencias, tareas, bloques, implementaciones y almacenamiento de código.
Si ya usa Kubernetes para administrar su ingeniería de datos de Python, capacitación de ML u otros flujos de trabajo de back-end, puede beneficiarse de todo el monitoreo y la orquestación que proporciona Prefect.
Si ya usa Prefect y desea ampliar su infraestructura de código con muchas capacidades de personalización, Kubernetes es una excelente opción. Por ejemplo, si desea manejar procesos de entrenamiento de ML computacionalmente intensivos, puede usar K8.
Prefect le facilita la ejecución de su código de flujo de datos en diferentes aplicaciones infraestructura. De forma predeterminada, su código se ejecuta en un subproceso local en su máquina. Alternativamente, puede crear colocación y defina la infraestructura en la que se ejecutará su código. preajuste prefecto bloques de infraestructura Para la integración con Docker, Kubernetes, AWS ECS, GCP Cloud Run y Azure Container Instances.
Como veremos en futuros artículos, hay varias formas de usar Kubernetes con Prefect. En esta publicación, nos familiarizaremos con Prefect Cloud como nuestro agente y la infraestructura de K8 que se ejecuta localmente, nuestro código de transmisión de Python en el almacenamiento remoto de AWS S3 y nuestro motor de orquestación.
¡Vamos a hacerlo! ?
Comenzaremos con una configuración básica y repetiremos en futuras publicaciones.
Instale Docker Desktop y ejecute K8s
Ejecutemos Kubernetes localmente. Si no tiene K8 instalado, sugiero usar la versión que viene con Docker Desktop.
Si es necesario, Descargar Escritorio Docker seleccione su sistema operativo y ejecútelo. Luego habilite Kubernetes. los Kubernetes El menú se encuentra haciendo clic en el engranaje en la parte superior derecha de Docker Desktop.
Descargar e instalar Prefect
Instale la última versión de Prefect en su entorno virtual Python pip install -U prefect
o usa la versión en esta publicación pip install prefect==2.6.8
.
Instalar Prefect Cloud
Registrate gratis Nube prefecto si aún no tienes una cuenta.
Si no ha conectado su máquina a Prefect Cloud antes, hágalo Clave API Cree una clave haciendo clic en el icono de su cuenta.
Copie el fragmento de código de la línea de comandos que aparece cuando genera su clave. Ejecute el fragmento en su terminal para guardar su clave en su perfil Prefecto local.
Generar código de transmisión
Solo queremos demostrar que todo funciona como se esperaba. Usemos un código básico que registre información sobre la red y la instancia. ?
from prefect import flow, get_run_logger
from platform import node, platform@flow
def check():
logger = get_run_logger()
logger.info(f"Network: {node()}. ✅")
logger.info(f"Instance: {platform()}. ✅")
if __name__ == "__main__":
check()
Subiremos este código a nuestro depósito S3.
Crear un depósito de AWS S3
Crear AWS S3 balde con la configuración predeterminada.
Establecer el usuario de IAM
Para este tutorial, puede dejar su depósito sin protección, pero no es una buena práctica. En su lugar, utilicemos las credenciales de AWS de un usuario de IAM con acceso a S3.
Si aún no tiene uno, cree un usuario con permisos de lectura y escritura de S3 en la consola de AWS.
Cree una clave de acceso para el nuevo usuario. Luego cópialo Ingrese su ID de clave y Clave de acceso secreta – los usará cuando cree su bloque Prefect S3.
Crear un bloque de almacenamiento remoto S3
Puedes crear un Prefecto bloquear Desde la interfaz de usuario o el código de Python. Así es como puede crear un bloque S3 desde la interfaz de usuario.
Confía en mí bloques menú, haga clic en + y seleccione el bloque S3.
Asigne al bloque un nombre único y una ruta de depósito. Luego ingresa Ingrese su ID de clave y Clave de acceso secreta que creaste anteriormente.
Crea tu despliegue
A continuación, compilaremos e implementaremos nuestra implementación desde la línea de comandos. Alternativamente, podríamos definir nuestra ubicación en un archivo de Python, como he mostrado aquí.
prefect deployment build flows.py:check -n k8sjob -sb s3/myawsblock
-i kubernetes-job --override env.EXTRA_PIP_PACKAGES=s3fs -a
Analicemos esto. ⬇️
El código de transmisión de Python se encuentra aquí flujos.py expediente. Aquí está la función de flujo de punto de entrada en ese archivo Échale un vistazo.
Nombramos nuestro despliegue k8sjob.
Hemos definido el bloque de almacenamiento S3 que creamos arriba prefecto-k8s. Todos los archivos en el directorio local actual se cargan en nuestro depósito S3.
La transmisión se ejecutará en modo estándar. caso kubernetes infraestructura, con la última imagen de Docker y un conjunto de ajustes preestablecidos básicos de Kubernetes. Veremos estos valores predeterminados en un minuto.
Tenga en cuenta que debe usar el S3 para usarlo con los K8 superar bandera y pasa una variable de entorno EXTRA_PIP_PAQUETES con s3fs. De lo contrario, el contenedor no tendrá el paquete de Python necesario para capturar el código de transmisión de almacenamiento remoto desde S3.
los -a
Da instrucciones a Prefect para enviar información de ubicación al servidor. ?
Resultados
Veamos los resultados de crear nuestro deployment. Haga clic en él en la interfaz de usuario Ubicaciones y luego haga clic en verificar/k8strabajo. Luego haga clic en el enlace del bloque de infraestructura anónimo que se ve así:
Verá los detalles del manifiesto predeterminado de K8.
En el próximo artículo, veremos cómo ajustar estos campos. Míralo yo para asegurarse de que no se lo pierda! ?
creará una implementación de Kubernetes en defecto espacio de nombres Tenga en cuenta que la implementación de Kubernetes y la implementación de Prefect son cosas diferentes. ⚠️
Inicie su agente
Su agente se ejecutará localmente en su máquina y consultará Prefect Cloud defecto turno de trabajo. Aquí está el comando para encenderlo:
prefect agent start -q 'default'
Todas las piezas están en su lugar. ¡Vamos a ejecutarlo! ?
Programar una transmisión
Crearemos un flujo ad hoc. Podemos usar UI o CLI. Usemos la CLI. Abra otra ventana de terminal y ejecute el siguiente comando:
prefect deployment run check/k8sjob
En la terminal que ejecuta su agente, debería ver un resultado similar a este:
Prefecto dado a este flujo es un adjetivo-nombre de animal súper conejito ?
Tomará un tiempo para que los K8 hagan su magia, y luego la salida debería completarse así:
¡Vaya, lo hicimos! ?
Echemos un vistazo más de cerca a lo que sucedió.
Detalles del flujo de la corriente
- Cuando nuestro agente vio que estaba programado para ser lanzado turno de trabajocomienza a transmitirse en nuestra infraestructura K8s local.
- Se captura la imagen Prefect Docker especificada. Puede ver el historial de imágenes en Docker Desktop.
- Paquete pip adicional s3fs Observó que está descargado e instalado.
- El pod de K8s se inicia, el código se ejecuta y el pod sale.
- Puede ver el estado actual del pod en su terminal
kubectl get pods
. - Puedes ver todos los detalles sobre tu pod
kubectl describe pods
. era el nombre de mi vaina super-conejo-97p8g-6wrvq.
- Los registros están disponibles en Prefect CLI como vio anteriormente. O puede verificarlos en la interfaz de usuario.
- Simplemente haga clic en el flujo adjetivo-naturaleza-sustantivo para ver las entradas en la CLI: esto súper conejito en mi caso.
¡Y eso es! Acaba de usar Prefect y Kubernetes para transmitir con su código almacenado en S3. ?
Ha visto cómo ejecutar sus transmisiones de Prefect con Kubernetes sin crear un bloque de infraestructura dedicado.
Espero que hayas encontrado útil esta guía. Si lo hiciste, compártelo en tus redes sociales favoritas para que otros puedan encontrarlo. ?
En el próximo artículo de esta serie, veremos cómo personalizar la configuración de nuestro K8. ?
¿Tienes preguntas? Conéctese con los más de 20 000 miembros de Prefect Holgura de la comunidad.
¡Feliz ingeniería! ⚒️