Implementar y exponer API de inferencia de IA en Azure Kubernetes Service
Volver a la ruta AI-200
AI-200Capítulo 6

Preparación para la Certificación Microsoft AI-200

Implementar y exponer API de inferencia de IA en Azure Kubernetes Service

Crea manifiestos Deployment y Service de Kubernetes, conecta AKS con imágenes de contenedor, publica puntos de conexión estables, comprueba cargas con kubectl y diagnostica los errores más frecuentes.

Tiempo de estudio sugerido: 80 minutos • Nivel intermedio • Reescritura original completa con versión resumida de cada tema, evaluación comentada y laboratorio AKS guiado

Escudo neón Microsoft Certified AI-200 con símbolos de IA, desarrollo en la nube, automatización, seguridad y supervisión

1. De una imagen de contenedor a un punto de conexión de IA de alta disponibilidad

opera un plano de control de Kubernetes administrado sobre . Tú aportas la capacidad del clúster y las definiciones de las cargas, mientras administra la infraestructura del plano de control. Es apropiado para de inferencia, búsqueda vectorial y otros componentes de IA que necesitan implementación repetible, resistencia, escalado y acceso de red.

Una FastAPI en contenedor solo se vuelve operable cuando Kubernetes sabe qué ejecutar, cuántas copias mantener, qué recursos y configuración necesita y cómo llegarán los clientes. Los manifiestos describen ese estado deseado y el clúster reconcilia continuamente la realidad con la declaración.

  • Pod es la unidad implementable más pequeña y normalmente contiene un contenedor de aplicación.
  • crea, sustituye y mantiene el número solicitado de Pods.
  • Service proporciona o estable y distribuye tráfico por etiquetas.
  • kubectl envía manifiestos, consulta estados, lee registros y muestra eventos de diagnóstico.

Resumen del tema

administra la orquestación; Pods ejecutan contenedores, Deployments mantienen réplicas, Services estabilizan el acceso y kubectl controla y diagnostica la carga.

2. Cómo colaboran Pods, Deployments, Services y etiquetas

Ejecutar un Pod directamente es posible, pero frágil. Un controla un ReplicaSet, este mantiene los Pods y reemplaza una instancia con error. Un Service no almacena direcciones efímeras: su selector encuentra Pods con etiquetas coincidentes y reenvía conexiones a esos puntos de conexión.

El contrato de etiquetas es crítico. Si la plantilla usa app: inference- y el Service selecciona otro valor, el Service existe sin . Los nombres de y Service no deben coincidir; el puerto 80 del Service puede reenviar correctamente al 8080 del contenedor.

El Deployment de AKS crea réplicas como Pods y un Service selecciona sus etiquetas para dirigir clientes.
controla el ciclo de vida; Service descubre etiquetas coincidentes y aporta conectividad estable.

Resumen del tema

controla el ciclo de los Pods y Service los descubre por etiquetas; son las etiquetas, no los nombres de objetos, las que conectan ambos recursos.

3. Anatomía de un manifiesto de Kubernetes

Un usa apiVersion apps/v1 y kind . identifica el objeto y puede indicar un . spec declara replicas, selector y la plantilla de Pod. La plantilla repite la etiqueta elegida y contiene los contenedores. El archivo declarativo se puede revisar, versionar y volver a aplicar.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-inference-api
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: inference-api
  template:
    metadata:
      labels:
        app: inference-api
    spec:
      containers:
      - name: api
        image: myregistry.azurecr.io/inference-api:v1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "2Gi"
            cpu: "1000m"
          limits:
            memory: "4Gi"
            cpu: "2000m"
        env:
        - name: MODEL_NAME
          value: "gpt-4"
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: api-secrets
              key: api-key

La referencia de imagen sigue registro.azurecr.io/repositorio:etiqueta. Compila y envía la imagen antes de implementar, comprueba que el clúster pueda acceder, incluye código y dependencias y prefiere una etiqueta de versión inmutable a latest cuando necesites reproducibilidad.

Resumen del tema

El manifiesto reúne identidad, réplicas, etiquetas, plantilla de Pod, imagen, puertos, recursos y configuración en un documento versionable del estado deseado.

4. Réplicas, disponibilidad, solicitudes y límites de recursos

Dos réplicas ofrecen tolerancia básica al error de un Pod; tres son una base más sólida para producción; cuatro o más deben justificarse con tráfico y pruebas porque cada copia consume cómputo. Kubernetes reinicia Pods con error, pero varias réplicas permiten seguir atendiendo durante la recuperación.

Las solicitudes reservan recursos para la programación. Si ningún nodo dispone de la CPU o memoria solicitada, el Pod queda Pending. Los límites restringen el consumo: la CPU se ralentiza y superar memoria puede provocar OOMKilled y reinicio. Para un modelo pequeño, 2–4 GiB, cerca de 20 % de margen y uno o dos núcleos son solo un punto inicial.

Campos de recursos y efecto operativo.
CampoPropósitoSeñal de error
replicasCopias simultáneas del PodPocas copias reducen resistencia y rendimiento.
.cpu / memoryGarantía para el programadorSolicitudes grandes dejan Pods Pending.
limits.cpuMáximo de CPULa presión sostenida causa y latencia.
limits.memoryMáximo de memoriaEl exceso puede terminar con OOMKilled.

Resumen del tema

Usa réplicas para resistencia y rendimiento medido; define solicitudes para programación y límites para contención y ajústalos al comportamiento real del modelo.

5. Variables de entorno, secretos y acceso al registro

Usa variables literales para valores no confidenciales, como nombre de modelo y . Para claves y credenciales, referencia un Secret mediante valueFrom y secretKeyRef. Créalo por separado con kubectl create secret generic -secrets --from-literal=-key=<valor>. Nunca confirmes el valor en el manifiesto o historial.

también debe autenticarse en . Para un registro normal, la integración concede AcrPull a la de kubelet. Un registro con requiere Registry Repository Reader. Un registro privado externo puede usar image pull Secret. Comprueba el modelo aplicable.

Resumen del tema

Mantén configuración ordinaria en variables, valores sensibles en Secrets referenciados y concede a kubelet el rol mínimo correcto para extraer imágenes.

6. Elegir el tipo correcto de Service de Kubernetes

Las de Pods son efímeras. Un Service crea un punto virtual persistente y sigue enviando a Pods coincidentes tras reemplazos. El tipo correcto depende de quién deba llamar la carga.

Tipos de Service en .
TipoAlcanceUso habitual
Solo dentro del clúster; predeterminado interna, base vectorial o comunicación entre servicios.
Puerto alto en cada de nodoAcceso simple de desarrollo o integración con balanceador externo.
LoadBalancer público o privado administrado por de producción expuesta a Internet o de forma privada.
ExternalNameAlias a nombre externo; sin balanceo Representar una dependencia externa como Service.

Para varias aplicaciones , terminación o reglas de host y ruta, Ingress puede ser más adecuado que un LoadBalancer público por Service. El módulo se concentra en los cuatro tipos anteriores.

Resumen del tema

Usa internamente, en escenarios directos limitados, LoadBalancer para exposición administrada y ExternalName como alias externo.

7. Manifiesto Service, selectores y asignación de puertos

El manifiesto usa apiVersion v1 y kind Service. type controla exposición, selector vincula etiquetas, port recibe clientes y targetPort reenvía a la aplicación. El puerto 80 puede dirigir a FastAPI en 8080; suele usar 443 cuando la terminación está configurada.

apiVersion: v1
kind: Service
metadata:
  name: inference-api-service
spec:
  type: LoadBalancer
  selector:
    app: inference-api
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
Las rutas ClusterIP, NodePort y Balanceador de Carga de Azure atraviesan un Service hasta los Pods seleccionados.
El tipo cambia la entrada; selector y targetPort mantienen el contrato final con los Pods.

Dentro del clúster, sigue nombreservice..svc..local. usa -nodo:, normalmente por encima de 30000. LoadBalancer usa la dirección externa que muestra kubectl svc.

Resumen del tema

El selector debe coincidir con las etiquetas; port recibe al cliente y targetPort reenvía al proceso de aplicación.

8. Aplicar manifiestos y comprender la reconciliación

kubectl apply lee y crea o actualiza objetos. Kubernetes descarga imágenes, programa Pods, inicia contenedores, crea el Service y aprovisiona la red. Es asíncrono: éxito significa que el estado deseado fue aceptado, no que Pods e pública estén listos.

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# Equivalent options:
kubectl apply -f deployment.yaml -f service.yaml
kubectl apply -f .

Aplicar un directorio es cómodo, pero puede enviar no relacionado. Mantén los artefactos delimitados y revisa cambios. Volver a aplicar es idempotente en el modelo declarativo: el plano de control compara configuración y estado vivo.

Resumen del tema

Usa kubectl apply para declarar recursos y observa la reconciliación aparte, porque Pods, descarga de imágenes y terminan de forma asíncrona.

9. Comprobar Pods, , Service, registros y conectividad

Una implementación sana muestra READY esperado, Pods Running, AVAILABLE igual al objetivo y dirección de Service coherente. Pending puede ser transitorio; indica fallos repetidos. EXTERNAL- de LoadBalancer puede quedar pending durante el aprovisionamiento.

kubectl get pods
kubectl get deployment
kubectl get svc inference-api-service
kubectl logs -l app=inference-api

# Test an internal ClusterIP Service
kubectl run -it --rm debug --image=alpine:latest --restart=Never -- sh
wget http://inference-api-service:80

# Test a public LoadBalancer address
curl http://<EXTERNAL-IP>
curl http://<EXTERNAL-IP>/predict -X POST -d '{"input":"test"}'

Para acceso interno, inicia un Pod de depuración desechable y llama al Service. Para acceso externo, prueba la pública y una ruta real de inferencia. Estado, preparación e inferencia validan capas distintas: un proceso puede estar vivo sin tener el modelo listo.

La imagen en Azure Container Registry llega a AKS mediante manifiestos y kubectl; estado, registros, salud, preparación e inferencia validan la versión.
La implementación termina después de validar imagen, estado de Kubernetes, red y comportamiento.

Resumen del tema

Revisa estado, registros y dirección del Service y prueba salud, preparación e inferencia real; aceptar el manifiesto no completa la implementación.

10. Diagnosticar y

significa que el nodo no pudo obtener la imagen. Revisa eventos, host, repositorio y etiqueta, confirma su existencia con az acr repository list o show-tags y valida el rol entre y el registro. docker pull manual separa una referencia inválida de un problema de permisos.

significa que el contenedor inicia y sale repetidamente. Lee registros actuales y --previous y describe el Pod. Causas comunes: variable ausente, Secret inaccesible, comando o puerto incorrecto, fallo al cargar el modelo o configuración no montada. Ejecuta la imagen localmente para aislar el origen.

# Image pull or scheduling events
kubectl describe pod <pod-name>

# Current and previous-container logs
kubectl logs <pod-name>
kubectl logs <pod-name> --since=10m
kubectl logs <pod-name> --previous

# Capacity and Service selectors
kubectl get nodes
kubectl top nodes
kubectl get pods --show-labels
kubectl get pods -L app
kubectl describe svc inference-api-service

Resumen del tema

Usa eventos para imagen y programación, registros actuales y anteriores para errores de aplicación y compara permisos, manifiesto y ejecución local.

11. Diagnosticar Pods Pending y Services sin

Un Pod persistentemente Pending no puede programarse por falta de CPU o memoria solicitada, restricción o problema de nodo. Describe Pod y nodos, consulta kubectl top nodes si Metrics Server está disponible, reduce solicitudes irreales o aumenta capacidad con az aks scale después de validar coste y cuota.

Un Service con : <none> no reenvía tráfico. Compara kubectl pods --show-labels o -L app con kubectl describe svc. Corrige la etiqueta o selector y verifica que los Pods estén Ready.

Resumen del tema

Pending es principalmente una investigación de capacidad y programación; sin es una investigación de etiquetas, preparación y selectores.

12. Ejercicio guiado: implementar una de inferencia de IA

El laboratorio dura unos 30–40 minutos. Implementa un modelo de , y un clúster ; completa . y service. con contenedor, sondeos, límites y balanceo; y usa un cliente Python para probar salud, preparación e inferencia.

  1. Descarga el proyecto inicial y revisa la aplicación y los marcadores de manifiestos.
  2. Implementa recursos de con una identidad autorizada.
  3. Completa imagen, sondeos, solicitudes, límites, etiquetas, selectores y puertos.
  4. Aplica manifiestos, espera Pods y dirección del LoadBalancer y diagnostica fallos.
  5. Ejecuta pruebas de salud, preparación e inferencia y elimina recursos desechables.

Requisitos: suscripción de , , Python 3.12 o posterior, la CLI de más reciente y kubectl. Las tareas de pueden no estar cubiertas por créditos gratuitos y exigir pago por uso u otro plan de pago.

Resumen del tema

El laboratorio une , , , , sondeos, recursos, balanceo y pruebas Python en un flujo completo.

13. Revisión de la evaluación y decisiones de examen

Justificación de las respuestas.
PreguntaRespuesta correctaMotivo
Internet con balanceo administrado por LoadBalancerAprovisiona y dirección externa.
Solicitudes superan todos los nodosEl Pod permanece PendingEl programador no encuentra capacidad.
Contrato entre y ServiceEtiquetas de plantilla coinciden con selectorLos selectores descubren por etiqueta.
Registros de contenedor reiniciadokubectl <pod-name> --previousLee la instancia terminada anterior.
Campo replicasNúmero de copias simultáneas de PodEl controlador mantiene ese estado.

Resumen del tema

LoadBalancer expone, afecta la programación, etiquetas conectan Service y Pods, --previous recupera el fallo anterior y replicas controla copias.

14. Lista de producción y referencias oficiales

  • Usa etiquetas de imagen inmutables y valida autenticación -registro.
  • Mantén secretos fuera de Git y referencia Secrets o una solución externa.
  • Define solicitudes, límites, réplicas y sondeos a partir de pruebas.
  • Haz coincidir etiquetas y selectores y valida port con targetPort.
  • Observa Pods, disponibilidad, , eventos, registros, salud, preparación e inferencia.
  • Prefiere exposición privada, , Ingress, directivas de red y privilegio mínimo cuando proceda.
  1. Kubernetes Service documentation
  2. core concepts
  3. an application to
  4. Services in Kubernetes Service
  5. Authenticate with
  6. Troubleshoot image pull errors in
  7. kubectl command reference

Resumen del tema

La preparación de producción combina imágenes repetibles, acceso mínimo, recursos y sondeos demostrados, red estable y observabilidad por capas respaldada por documentación actual.