Fundamentos de Kubernetes y Google Kubernetes Engine

Clase 21 de 48Entrenamiento de Google Cloud Platform

Resumen

¿Qué es Kubernetes?

Kubernetes ha sido un tema candente en el mundo de la tecnología, especialmente para aquellos que trabajan con orquestación de contenedores y cargas de trabajo. Es esencial entender que Kubernetes es, básicamente, un sistema para gestionar y automatizar la implementación de aplicaciones en contenedores.

¿Cómo funcionan los contenedores?

A diferencia de las máquinas virtuales, que replican un sistema operativo completo, los contenedores se centran en aislar solo las aplicaciones necesarias bajo un único sistema operativo. Esto permite que los contenedores se inicien mucho más rápido, ya que evitan la carga completa de un sistema operativo. Este enfoque ha revolucionado la forma en que manejamos aplicaciones al permitir una ejecución más eficiente y flexible.

Objetos de Kubernetes: bloques básicos

¿Qué es un pod?

En Kubernetes, un pod es el núcleo básico de ejecución. Se compone de uno o varios contenedores y es esencialmente una unidad que Kubernetes administra, reiniciando automáticamente cuando enfrentan problemas.

¿Cuáles son los roles de servicios y volúmenes?

  • Servicios: Actúan como la puerta de entrada a tu aplicación. Kubernetes permite a los servicios abstraer la capa de red, de modo que los pods pueden crearse, destruirse y seguir siendo accesibles. Es, literalmente, el "puente" de comunicación.
  • Volúmenes: Son usados para almacenar datos. Estos objetos pueden ser discos, NAS, o sistemas NFS, y son adjuntados a pods, proporcionándoles almacenamiento necesario.

¿Y qué hay de los namespaces?

Los namespaces permiten la partición de un clúster de Kubernetes para soportar entornos multi-tenant. Puedes aislar diferentes despliegues dentro del mismo clúster y aplicar políticas de seguridad y despliegue específicas.

Controladores y administración de Kubernetes

¿Qué es un ReplicaSet?

El ReplicaSet asegura que una cantidad específica de pods esté siempre funcionando en el clúster. Este controlador es ideal para cuando se requiere redundancia y resiliencia.

¿Cómo se gestionan los despliegues?

La recomendación es usar deployments para manejar eficientemente tus aplicaciones. Un deployment proporciona un marco centralizado para gestionar tus pods y ReplicaSets, facilitando actualizaciones y mantenimiento en bloque.

¿Cuándo utilizar StatefulSet, DaemonSet y Jobs?

  • StatefulSet: Es elegido cuando una aplicación necesita rastrear el estado de sus pods. Permite mantener la identidad y el estado de cada pod.
  • DaemonSet: Distribuye un pod específico en todos o algunos nodos, útil para herramientas de monitoreo como FluentD o Grafana en Kubernetes.
  • Jobs: Se usan para tareas específicas que deben completarse y luego finalizarse, como scripts de mantenimiento o procesamiento por lotes.

Google Kubernetes Engine y Anthos: Arquitectura y funcionamiento

¿Cómo interactúan GKE y Kubernetes?

Google Kubernetes Engine (GKE) opera sobre la infraestructura de Google Compute Engine y utiliza Borg, el precursor de Kubernetes. Esto significa que Google Kubernetes Engine genera máquinas virtuales sobre contenedores que se gestionan con Borg. Para interactuar, se usan diferentes comandos: gcloud para tareas específicas sobre Google Compute Engine y kubectl para manejar directamente el clúster de Kubernetes.

¿Cómo configurar un clúster en GKE?

Para iniciar un clúster en GKE, se configuran el proyecto, la zona y el nombre del proyecto. Posteriormente, se obtienen las credenciales del clúster mediante gcloud, que se integran con kubectl para la administración del clúster.

# Configurar proyecto y obtener credenciales
gcloud config set project PROJECT_ID
gcloud container clusters get-credentials CLUSTER_NAME --zone ZONE

# Desplegar un deployment
kubectl create deployment DEPLOYMENT_NAME --image=IMAGE_PATH

# Exponer el servicio al exterior
kubectl expose deployment DEPLOYMENT_NAME --type=LoadBalancer --port=PORT

Esta arquitectura aprovecha el balanceador de carga de GKE para exponer servicios, y kubectl expose conecta puertos internos con externos a través de un balanceador de cargas.

En definitiva, Kubernetes y GKE, junto con sus objetos y controladores avanzados, proporcionan un entorno robusto y flexible para el despliegue de aplicaciones en contenedores, ofreciendo a los desarrolladores herramientas poderosas para gestionar su infraestructura de manera escalable y eficiente. ¡Sigue aprendiendo y explorando las posibilidades de Kubernetes!