Kit de herramientas de IA de Ingeniería de Cloud: Ingeniería de plataformas en GKE con Gemini

1. Introducción

La solución de problemas de implementaciones de Kubernetes dañadas es una parte común y, a menudo, frustrante de la vida diaria de un ingeniero de plataformas. Por lo general, implica mucha investigación manual: analizar registros, ejecutar comandos de kubectl describe y hacer referencias cruzadas a archivos YAML para encontrar una sola discrepancia o error de configuración.

Si bien los chatbots de IA de uso general pueden ayudar a explicar conceptos o escribir código básico, operan de forma aislada. No saben nada sobre tu base de código específica ni el estado activo de tu clúster, lo que genera mucho trabajo manual de copiar y pegar, y de cambio de contexto.

En este lab, experimentarás cómo superar esta brecha usando herramientas de IA con niveles crecientes de contexto. Usarás Gemini CLI y el Protocolo de contexto del modelo (MCP) para solucionar problemas de una aplicación dañada en GKE. Al final de este lab, comprenderás cómo usar la IA que conoce tus archivos y tu infraestructura para resolver problemas complejos más rápido, y cómo codificar estos flujos de trabajo en "habilidades" reutilizables para tu equipo.

Conceptos básicos

  • Ingeniería de plataformas: La ingeniería de plataformas es la práctica de crear y mantener herramientas y flujos de trabajo internos que permiten a los desarrolladores de software administrar su propia infraestructura sin necesidad de ser expertos en todos los servicios de nube subyacentes. El objetivo es reducir la fricción técnica y, al mismo tiempo, mantener la coherencia y la seguridad. Al crear una ruta de oro estandarizada, los equipos de plataforma garantizan que los desarrolladores de aplicaciones puedan realizar implementaciones de forma segura y rápida, mientras que el equipo de plataforma mantiene el control sobre la administración y el costo.
  • Gemini CLI: Gemini CLI es una interfaz de línea de comandos que te permite interactuar con los modelos de Gemini directamente desde tu terminal. A diferencia de un chatbot estándar basado en la Web, la CLI está diseñada para existir dentro de tu entorno de desarrollo, lo que facilita la integración de la IA en los flujos de trabajo existentes basados en shell. Te permite canalizar el resultado de otros comandos directamente al modelo y ejecutar instrucciones sin salir de la terminal.
  • Protocolo de contexto del modelo (MCP): El MCP es un estándar abierto que permite que un modelo de IA se conecte con herramientas o fuentes de datos específicas. Sin el MCP, un modelo de IA solo sabe con qué se entrenó y no puede ver tus recursos específicos. Con el servidor de MCP de GKE, Gemini CLI puede consultar de forma activa la API de tu proyecto de Google Cloud, inspeccionar el estado de tus clústeres y ejecutar comandos en tu nombre. Actúa como un puente entre el motor de razonamiento del modelo y la API de GKE real.
  • Habilidades de los agentes: Las habilidades son paquetes de instrucciones, secuencias de comandos y recursos que extienden las capacidades de un agente de IA para tareas especializadas. Te permiten codificar los estándares de la organización y automatizar flujos de trabajo complejos.

Objetivos del lab

En este lab, aprenderás a hacer lo siguiente:

  1. Progresión del contexto de la experiencia: Descubre cómo el aumento del contexto mejora la resolución de problemas con IA.
  2. Solución de problemas manual vs. con IA: Compara la dificultad de la depuración manual con los flujos de trabajo asistidos por IA.
  3. Depuración con contexto completo: Usa la CLI de Gemini con el servidor de MCP de GKE para depurar aplicaciones con conocimiento completo de la infraestructura.
  4. Extiende las capacidades: Aprende a escribir Skills personalizadas para automatizar flujos de trabajo.

Nota sobre los resultados de los LLM

Debido a la naturaleza de este lab y a cómo funcionan los LLM, es probable que los resultados que obtengas sean diferentes de los resultados de ejemplo que se muestran. Este es el comportamiento esperado de la IA generativa. Concéntrate en comprender los pasos y el razonamiento que proporciona el modelo, en lugar de intentar replicar el texto o el formato exactos de los ejemplos.

2. Configuración del proyecto

Antes de comenzar el lab, prepara tu entorno. Abre Cloud Shell, selecciona tu proyecto y ejecuta las secuencias de comandos de configuración. ¡Comencemos!

Abre Cloud Shell

En este lab, usarás Cloud Shell, un entorno de terminal basado en navegador que proporciona Google Cloud. Viene preconfigurado con todas las herramientas que necesitas, incluidas Google Cloud CLI (gcloud), kubectl y Gemini CLI, lo que te ahorra el tiempo de instalarlas en tu máquina local.

  1. Ve a la consola de Google Cloud.
  2. Mira el encabezado de la parte superior derecha de la consola y haz clic en el botón Activar Cloud Shell (parece un símbolo del sistema de la terminal >_).
  3. Se abrirá una sesión de terminal en la parte inferior de la ventana del navegador. Si se te solicita, haz clic en Continuar.

Selecciona un proyecto

En la terminal de Cloud Shell, asegúrate de estar trabajando en el proyecto correcto.

  1. Selecciona un proyecto existente o crea uno nuevo específicamente para este lab en la consola.
  2. Anota tu ID del proyecto. Ejecuta gcloud config set project [YOUR_PROJECT_ID] para configurar el proyecto en tu shell actual.

Configuración del lab

Ahora, ejecuta las secuencias de comandos de configuración para preparar el entorno y presentar los errores del lab.

  1. Clona el repositorio:
    👉💻 Ejecuta los siguientes comandos para clonar solo el directorio del lab:
    git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos ~/devrel-demos
    cd ~/devrel-demos
    git sparse-checkout set codelabs/ai-toolkit-lab-1
    
  2. Navega al directorio del lab:
    👉💻 Ejecuta:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
    
  3. Configura las variables de entorno:
    👉💻 Ejecuta los siguientes comandos para configurar tu proyecto y región:
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=us-central1
    
  4. Ejecuta la secuencia de comandos de configuración:
    Esta secuencia de comandos habilita las APIs que se indican a continuación, crea un clúster de GKE Autopilot y garantiza que se instalen las herramientas necesarias.
    👉💻 Ejecuta la secuencia de comandos desde el directorio raíz:
    ./setup.sh
    
    Nota: La creación del clúster puede tardar entre 5 y 10 minutos.
  5. Inicializa el estado dañado:
    Para simular la situación en la que tus compañeros de trabajo te dejaron un entorno dañado, ejecuta la secuencia de comandos break.sh. Copia los manifiestos dañados en el directorio activo de la base de código.
    👉💻 Ejecuta la secuencia de comandos:
    ./break.sh
    
  6. Prepárate para los ejercicios del lab:
    Para evitar que la IA haga trampa (vea las soluciones), cambia al directorio cymbal-bank para el resto del lab.
    👉💻 Ejecuta:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

API habilitadas

La secuencia de comandos de configuración habilita varias APIs de Google Cloud. Esto es lo que hacen:

  • container.googleapis.com: Es la API de Google Kubernetes Engine. Es obligatorio para cualquier operación a nivel del clúster.
  • generativelanguage.googleapis.com: Es la API que permite que Gemini CLI se comunique con los modelos de Gemini.
  • cloudresourcemanager.googleapis.com: Se requiere para inspeccionar los metadatos a nivel del proyecto y administrar los permisos.
  • logging.googleapis.com: Es esencial para solucionar problemas, ya que permite recuperar y analizar registros de tus contenedores.

3. Fase 0: Solución de problemas manual (sin IA)

Ahora que estás en el directorio cymbal-bank, intentemos encontrar los errores de forma manual. Esta es la "forma difícil". Experimenta la línea de base antes de dejar que la IA haga el trabajo pesado. La solución de problemas manual implica usar herramientas estándar, como kubectl, para inspeccionar el estado del clúster, recuperar registros y leer archivos YAML para detectar inconsistencias. A menudo, es un proceso lento, tedioso y que requiere experiencia para conectar los puntos. Esto sirve como punto de referencia perfecto para las herramientas de IA que usarás más adelante.

  1. Intenta realizar la implementación: Veamos qué piensa Kubernetes de estos manifiestos.
    👉💻 Ejecuta el siguiente comando para aplicar los manifiestos:
    kubectl apply -f kubernetes-manifests/
    
    Los pods pueden tardar unos segundos en iniciarse. Puedes usar “watch kubectl get pods” para ver cuándo están en funcionamiento. Una vez que estén en funcionamiento, presiona Ctrl + C para salir de la observación.Verás dos Pods con errores en la lista:
    • El pod de frontend muestra un "CreateContainerConfigError". Por lo general, este tipo de error sugiere que el contenedor tiene problemas para cargar la configuración requerida. Piensa en los recursos externos que un contenedor podría necesitar para iniciarse. ¿Hay variables de entorno, secretos o ConfigMaps que podrían estar mal configurados o faltar? Deberás investigar la configuración del pod para encontrar el problema específico.
    • El pod userservice se encuentra en un estado "ImagePullBackOff". Cuando veas esto, por lo general, significa que el clúster no puede recuperar la imagen de contenedor que se le indicó que usara. Ten en cuenta los detalles de la solicitud de imagen: ¿el nombre y la etiqueta de la imagen son exactamente correctos? ¿Hay posibles problemas de permisos con el registro? Observa desde dónde se extrae la imagen para ver si puedes detectar por qué falla la solicitud.
  2. Inspecciona el daño: Usa comandos estándar de Kubernetes para ver qué falla.
    • 👉💻 Verifica el estado de los Pods y sus nombres:
      kubectl get pods
      
      • Observación: Ves pods en ImagePullBackOff, CrashLoopBackOff, Pending o CreateContainerConfigError.
      • Nota: Un pod en estado Running no significa necesariamente que funcione correctamente. Por ejemplo, es posible que no tenga suficientes sondeos de estado (actividad/preparación), lo que hace que se marque como en ejecución incluso si la aplicación interna falla. Los registros pueden mostrarnos errores, a pesar de que un pod parezca estar en ejecución. Hay 11 errores diferentes que se deben corregir en total.
    • 👉💻 Describe un pod con errores para ver los eventos (reemplaza [POD_NAME] por el nombre de un pod real):
      kubectl describe pod [POD_NAME]
      
    • 👉💻 Verifica los registros de un Pod que falla para ver los errores de la aplicación:
      kubectl logs [POD_NAME]
      

Captura de pantalla que muestra el resultado de kubectl get pods

  1. El trabajo de detective: Abre los manifiestos en kubernetes-manifests/ con el editor de Cloud Shell o cat en la terminal. Intenta correlacionar los errores que ves en los registros y los eventos con la configuración de los archivos YAML.Desafío: Intenta corregir SOLO UN error de forma manual. Observa cómo debes saltar entre archivos para descubrir el resto de la cadena de fallas.

4. Fase 1: Preguntar en la Web (IU web de Gemini)

Dado que la solución de problemas manual es lenta, intentemos usar un asistente de IA. La aplicación web de Gemini es una potente interfaz de chat de uso general. Se destaca por explicar conceptos y generar fragmentos de código. Sin embargo, opera con cero contexto de tu entorno específico. No puede ver tus archivos, inspeccionar tu clúster ni ejecutar comandos. Debes copiar y pegar manualmente los mensajes de error y el contenido de los archivos.

Captura de pantalla que muestra la IU web de Gemini

  1. Ve a Gemini: Abre gemini.google.com en una pestaña nueva. Deberás acceder con tu propia Cuenta de Google.
  2. Pide ayuda con un error específico: Supongamos que ves el error ImagePullBackOff en el pod userservice.
    👉💬 Ingresa esta instrucción en la IU web de Gemini:
    My Kubernetes deployment for 'userservice' is failing with ImagePullBackOff. Here is the image name: us-central1-docker.pkg.dev/bank-of-anthos-ci/bank-of-anthos/user-service:v0.6.9. What is wrong?
  3. Respuesta de la IA: Gemini te brinda una lista de causas comunes:
    • La imagen no existe.
    • No tienes permiso para extraerlo.
    • Hay un error tipográfico.
    Se sugiere que verifiques tu registro o los permisos de IAM. Sin embargo, no puede saber que el nombre real de la imagen es userservice (sin el guion) a menos que vea tu proyecto.

El principal punto de fricción aquí es que Gemini no tiene visibilidad de tu entorno local. Para obtener el contexto que necesita, deberás proporcionárselo manualmente (con instrucciones y copiando y pegando texto), lo que lleva mucho tiempo y puede generar errores.

5. Fase 2: Potencia de la terminal (Gemini CLI)

Ahora, ve a la terminal con Gemini CLI. Gemini CLI lleva el poder de los modelos de Gemini directamente a tu terminal. La CLI está disponible donde trabajes. Lee archivos locales, acepta entradas canalizadas y hasta ejecuta comandos de shell en tu nombre (con tu aprobación). Esto lo hace increíblemente útil para integrar la IA en tus flujos de trabajo sin cambiar de contexto. Para obtener información más detallada y sobre el uso avanzado, consulta la documentación oficial de Gemini CLI.

Nota: Por el momento, la CLI de Antigravity se lanzó oficialmente y es la sucesora de la CLI de Gemini. En este lab, se sigue usando la CLI de Gemini. Para obtener más detalles sobre la CLI de Antigravity, consulta la documentación oficial de la CLI de Antigravity.

Contexto y visibilidad

Antes de continuar con las instrucciones, ten en cuenta que la visibilidad de la CLI de Gemini en tu proyecto depende de dónde la inicies. El modelo puede ver archivos y carpetas en relación con tu directorio de trabajo actual. Si lo ejecutas desde la raíz de tu proyecto, tendrá acceso a todos los archivos de ese proyecto. Si lo ejecutas desde un subdirectorio, su vista se restringirá a ese subdirectorio y a sus elementos secundarios. Siempre asegúrate de estar en el directorio correcto antes de pedirle al modelo que analice o modifique archivos.

Cómo iniciar Gemini CLI

Cloud Shell incluye Gemini CLI de forma predeterminada. Solo tienes que iniciarlo para comenzar a usarlo con tus archivos locales.

  1. Navega al directorio de Cymbal Bank:
    👉💻 Ejecuta el siguiente comando para asegurarte de que estás en el directorio correcto:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    
  2. Inicia Gemini CLI:
    👉💻 Ejecuta el siguiente comando para iniciar Gemini CLI:
    gemini
    

Captura de pantalla que muestra el aspecto de Gemini CLI

Usa Gemini CLI

Todo lo que sabes sobre esta aplicación es dónde encontrar el código y que no funciona. Obtengamos más información y veamos cómo Gemini puede ayudarte a corregir la aplicación. Primero, prueba su capacidad para explorar el contexto haciendo una pregunta sobre los archivos de la aplicación que debería poder ver.

  1. Explora la base de código: Pídele a Gemini que explique qué es esta aplicación y qué hace.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    What is this application and what does it do?
    Gemini CLI lee los archivos del directorio actual y proporciona una descripción general del proyecto.
  2. Intenta encontrar un problema en la base de código: Como Gemini CLI ve tus archivos, pídele que encuentre una discrepancia.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    The contacts service pod is running, but I can't reach the service. Review kubernetes-manifests/contacts.yaml and check for common issues
    Gemini CLI lee los archivos y detecta la discrepancia entre app: contacts-backend y app: contacts. Esto es un gran avance en comparación con las fases anteriores.
  3. Pídele que lo corrija:
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Fix the label mismatch in contacts.yaml so the service matches the deployment.
    Gemini CLI te muestra el código YAML corregido o incluso aplica el cambio si apruebas el comando.
  4. Limitación: Si bien ve los archivos, no sabe qué se está ejecutando realmente en tu clúster. Si un Pod falla debido a un error de tiempo de ejecución que no es evidente en el archivo YAML estático, no se puede ayudar sin registros o el estado del clúster.

Nota: La Gemini CLI te pedirá tu consentimiento cuando ejecutes comandos o realices modificaciones en los archivos. Esto garantiza que mantengas el control sobre tu entorno. Cuando veas un mensaje como el que se muestra a continuación, puedes presionar "Intro" para responder "1. Permitir una vez" para cada solicitud de acción. También puedes presionar la tecla de flecha hacia abajo y, luego, Intro para seleccionar "2. Permitir para esta sesión", lo que hará que Gemini CLI siempre realice esa acción de forma independiente, sin pedir tu permiso, durante esta conversación. Sin embargo, si cierras Gemini CLI y lo vuelves a abrir, ya no tendrá ese permiso y te lo volverá a pedir antes de realizar cualquier acción.

Captura de pantalla que muestra la vista de consentimiento de Gemini CLI

Nota: Si te quedas atascado o quieres volver a intentarlo desde cero, restablece los manifiestos de Kubernetes a su estado inicial dañado en cualquier momento ejecutando ../break.sh desde el directorio cymbal-bank.

Nota: Si alcanzas un límite de uso, selecciona "Detener" y, luego, ejecuta /model para ver qué modelos alcanzaron sus límites y cambiar a otro, como gemini-2.5-flash-lite. Luego, pídele al modelo que "continúe" para seguir con el lab usando el nuevo modelo.

6. Fase 3: Depuración de contexto completo (Gemini CLI + MCP de GKE)

Si bien la fase 2 mostró el poder de la IA cuando puede ver tus archivos, también fue ruidosa. Tuviste que aprobar manualmente cada lectura de archivos y acción de herramientas, lo que genera una fricción significativa durante una sesión de depuración compleja. La fase 3 presenta el servidor de MCP de GKE para ayudar a solucionar este problema, ya que proporciona a la IA una "conciencia de la infraestructura" directa. Esto permite que Gemini solucione problemas de registros, eventos y metadatos con menos interrupciones manuales, lo que crea un flujo de solución de problemas más automatizado y cohesivo.

¿Qué es el MCP?

Para comprender el MCP, primero es útil entender el concepto de herramientas en el mundo de la IA. Básicamente, una herramienta es una función o aplicación externa que un LLM puede usar para realizar acciones o recuperar datos a los que no podría acceder de otra manera, como consultar el clima, ejecutar una secuencia de comandos específica o consultar una base de datos. Si bien las herramientas individuales son poderosas, compartirlas de forma segura y coherente entre diferentes agentes y entornos de IA siempre ha sido un desafío. El MCP resuelve este problema actuando como una plataforma estandarizada que puede alojar estas herramientas y exponerlas a cualquier cliente de IA compatible.

El Protocolo de contexto del modelo (MCP) es un protocolo de código abierto que permite que los modelos de IA accedan de forma segura a herramientas y fuentes de datos externas. En lugar de codificar integraciones para cada herramienta o base de datos específica, MCP proporciona una forma estandarizada para que los modelos interactúen con su entorno.

Para ver las herramientas disponibles en Gemini CLI, ejecuta /mcp dentro de Gemini CLI.

En este lab, el servidor de MCP de GKE permite que la CLI de Gemini interactúe directamente con tu clúster de GKE, lo que le permite inspeccionar recursos, leer registros y ayudarte a depurar problemas con pleno conocimiento del estado activo del clúster. Esto transforma la IA de un analizador de código estático en un asistente activo para la solución de problemas que comprende el estado activo de tu infraestructura.

Configura la extensión de MCP de GKE

De forma predeterminada, Gemini CLI es una herramienta de uso general. Crea un archivo de configuración para configurar el servidor de MCP de GKE.

  1. 👉💻 Primero, sal de Gemini CLI si aún estás en ella escribiendo /quit.
  2. 👉💻 Ejecuta el siguiente comando para crear el directorio de la extensión:
    mkdir -p ~/.gemini/extensions/gke
    
  3. 👉💻 Ejecuta el siguiente comando para crear el archivo de configuración. Este comando inserta automáticamente tu PROJECT_ID en el archivo:
    cat << EOF > ~/.gemini/extensions/gke/gemini-extension.json
    {
      "name": "gke",
      "version": "1.0.0",
      "mcpServers": {
        "container": {
          "httpUrl": "https://container.googleapis.com/mcp",
          "authProviderType": "google_credentials",
          "oauth": {
            "scopes": ["https://www.googleapis.com/auth/container"]
          },
          "timeout": 30000,
          "headers": {
            "x-goog-user-project": "$PROJECT_ID"
          }
        }
      }
    }
    EOF
    
  4. 👉💻 Inicia Gemini CLI:
    gemini
    
  5. Para verificar que el servidor de MCP esté habilitado, escribe /mcp en Gemini CLI.

Pídele a Gemini que depure el código con el estado del clúster

  1. Depura la implementación fallida: Ahora, pídele a Gemini que inspeccione el clúster y corrija los manifiestos según lo que encuentre.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    The frontend deployment is failing. Can you use your tools to check the logs and events of the pods, and then fix it?
    Gemini usa herramientas de MCP para llamar a comandos kubectl tras bambalinas. Ve el error ImagePullBackOff, explica la causa y sugiere la corrección correcta.
  2. Soluciona problemas complejos: Pídele que busque errores a nivel de la aplicación en los registros.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    Ve el error de conexión rechazada y lo rastrea hasta la falta de coincidencia de puertos o la falta de coincidencia de nombres de servicio en config.yaml.
  3. Itera: Sigue pidiéndole a Gemini que corrija los otros problemas que encontraste en la fase 0.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Check if the service 'contacts' is correctly routing traffic to its pods
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Are there any pods failing due to resource limits?

Nota: Si te quedas atascado o quieres volver a intentarlo desde cero, restablece los manifiestos de Kubernetes a su estado inicial dañado en cualquier momento ejecutando ../break.sh desde el directorio cymbal-bank.

7. Fase 4: Capacitación del equipo (habilidades del agente)

Por último, extiende las capacidades de la IA para tus necesidades específicas creando habilidades de agente personalizadas.

¿Qué son las habilidades de los agentes?

Las habilidades de los agentes son paquetes de instrucciones, secuencias de comandos y recursos que extienden un agente de IA para tareas especializadas. Te permiten codificar los estándares de la organización y automatizar flujos de trabajo complejos. Una skill reside en un directorio específico y contiene un archivo SKILL.md que define su comportamiento. Cuando creas habilidades, te aseguras de que la IA siga un proceso coherente y repetible en lugar de improvisar.

Un directorio de Skill típico se ve de la siguiente manera:

my-skill/
├── SKILL.md          # Main instruction file (Required)
├── scripts/           # Helper scripts (Optional)
└── resources/         # Templates or data files (Optional)

Cómo crear una Skill para solucionar problemas de Kubernetes

En lugar de crear estos archivos de forma manual, Gemini CLI proporciona una forma eficaz de generar plantillas de habilidades con lenguaje natural.

Imagina que quieres crear una habilidad llamada k8s-troubleshooter para automatizar los pasos que acabas de realizar.

  1. Crea la habilidad a través de instrucciones: Puedes pedirle a Gemini CLI que cree la habilidad por ti, según lo que aprendiste hoy.
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Create a new skill called 'k8s-troubleshooter' that helps diagnose issues with Kubernetes manifests and cluster state. It should be able to analyze pod logs, events, and resource descriptions to identify common deployment problems and configuration errors.
    Al igual que cuando llama a una herramienta o realiza una acción, Gemini CLI debería indicarte que tu instrucción activó su habilidad de "creador de habilidades". Esta es una habilidad preconfigurada en Gemini CLI que permite que Gemini cree habilidades de agente.
    Gemini debería pedirte permiso para crear el directorio de habilidades. Para aprobar, selecciona "1. Permitir una vez".
    Gemini automáticamente:
    • Crea un directorio en ~/.gemini/skills/k8s-troubleshooter/.
    • Genera un archivo SKILL.md con instrucciones basadas en tu instrucción.
    • Crea directorios de recursos estándar.
  2. Reinicia Gemini CLI:
    👉💻 Cierra Gemini CLI (/quit) y, luego, reiníciala:
    gemini
    
  3. Verifica que la habilidad se haya cargado:
    👉💻 Para verificar que la habilidad esté activa, escribe /skills en Gemini CLI. Deberías ver k8s-troubleshooter en la lista.
  4. Cómo funciona en la práctica: Ahora, invoca la habilidad:
    👉💬 Ingresa esta instrucción en Gemini CLI:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    La IA sigue el plan estructurado en SKILL.md en lugar de improvisar, lo que genera resultados más coherentes.

Ejercicio: Conceptualiza tus propias Skills

Piensa en tu flujo de trabajo diario. ¿Qué tarea repetitiva podrías automatizar con una Skill?

  • Idea: Una habilidad para auditar manifiestos según las prácticas recomendadas de seguridad antes de la implementación.
  • Idea: Una habilidad para generar configuraciones complejas de clústeres de GKE basadas en el tipo de carga de trabajo.

8. Conclusión

En este lab, se muestra una nueva forma de interactuar con la infraestructura de nube a través de diferentes niveles de contexto de IA. Al pasar de un contexto nulo a un contexto de infraestructura completo (Gemini CLI + MCP de GKE), verás cómo un asistente de IA se vuelve mucho más eficaz cuando ve tus archivos y el estado del clúster.

Resumen del lab

  • El contexto es importante: Observa cómo las herramientas de IA sin contexto no pueden ayudar con problemas específicos de la base de código.
  • Contexto de la terminal: Usas Gemini CLI para analizar archivos locales y detectar errores de configuración directamente desde tu espacio de trabajo.
  • Depuración con contexto completo: Usas la Gemini CLI con MCP para permitir que la IA diagnostique y corrija problemas complejos correlacionando archivos de la base de código con el estado del clúster en tiempo real.
  • Extensibilidad: Aprenderás sobre las habilidades y cómo usarlas para codificar el conocimiento de la organización.

Limpieza

Para evitar cargos continuos, ejecuta la secuencia de comandos de limpieza. Ten en cuenta que este paso no es necesario si ejecutas el lab en Qwiklabs.

👉💻 Ejecuta el siguiente comando desde el directorio del taller:

cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
./teardown.sh

Próximos pasos

A continuación, se incluyen algunas recomendaciones para seguir leyendo:

9. Apéndice: Solución para interrupciones del manifiesto

Si te quedas atascado o quieres verificar los errores, aquí tienes la lista de interrupciones introducidas en el directorio manifests-broken/ y cómo corregirlas:

  1. URLs con errores de formato en config.yaml:
    • Error: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (dos puntos).
    • Motivo: La aplicación no puede analizar la dirección, lo que genera errores de conexión.
    • Solución: Vuelve a cambiarlo a "ledgerwriter:8080".
  2. Etiquetas que no coinciden en contacts.yaml:
    • Error: El selector de servicios se estableció en app: contacts-backend en lugar de contacts.
    • Motivo: El Service no puede encontrar los Pods (que aún tienen app: contacts), por lo que no se enrutará el tráfico.
    • Solución: Cambia el selector a app: contacts.
  3. No coinciden los puertos en userservice.yaml:
    • Error: El servicio targetPort se estableció en 8081 en lugar de 8080.
    • Motivo: El tráfico enviado al servicio se reenvía al puerto del contenedor incorrecto, lo que provoca que se rechace la conexión.
    • Solución: Cambia targetPort a 8080.
  4. Los nombres de servicio no coinciden en config.yaml:
    • Error: BALANCES_API_ADDR: "balance-reader:8080" (en lugar de balancereader)
    • Motivo: El nombre de host no se resolverá en el DNS porque el servicio se llama balancereader.
    • Solución: Vuelve a cambiarlo a "balancereader:8080".
  5. Políticas de extracción de imágenes en contacts.yaml:
    • Error: imagePullPolicy: Never.
    • Motivo: K8s no extraerá la imagen del registro, ya que supone que es local. Fallará con ErrImagePull.
    • Solución: Quita la línea o configúrala como IfNotPresent.
  6. Fallas en el sondeo de preparación en userservice.yaml:
    • Error: La ruta de acceso cambió a /healthz en lugar de /ready.
    • Motivo: El contenedor no entrega /healthz, por lo que la sonda falla y el pod nunca se marca como listo.
    • Corrección: Vuelve a cambiar la ruta a /ready.
  7. Límites de recursos en contacts.yaml:
    • Error: El límite de memoria se estableció en 10Mi en lugar de 128Mi.
    • Motivo: La app necesita más memoria para iniciarse, lo que provoca que se cierre por falta de memoria.
    • Corrección: Restaura el límite de memoria.
  8. Faltan variables de entorno en frontend.yaml:
    • Error: Se quitó la variable de entorno REGISTERED_OAUTH_CLIENT_ID.
    • Motivo: Es posible que la app falle o inhabilite funciones si faltan las variables de entorno esperadas.
    • Corrección: Se restableció la definición de la variable de entorno.
  9. No coincide la clave de ConfigMap en frontend.yaml:
    • Error: key: DEMO_USER en lugar de DEMO_LOGIN_USERNAME.
    • Motivo: K8s no puede encontrar la clave en el ConfigMap, lo que provoca que el contenedor no se inicie.
    • Solución: Vuelve a cambiar la clave a DEMO_LOGIN_USERNAME.
  10. Error de escritura en el nombre de la imagen en userservice.yaml:
    • Error: user-service en lugar de userservice.
    • Motivo: La imagen no existe en el registro, lo que provoca ImagePullBackOff.
    • Corrección: Se corrigió el nombre de la imagen.
  11. Problemas con la cuenta de servicio en contacts.yaml:
    • Error: bank-of-anthos-sa en lugar de bank-of-anthos.
    • Causa: La cuenta de servicio no existe o no tiene permisos.
    • Solución: Usa el nombre correcto de ServiceAccount.