En este tema, aprenderás cómo desplegar contenedores Docker en un clúster de Kubernetes. Kubernetes es una plataforma de orquestación de contenedores que automatiza el despliegue, la gestión y el escalado de aplicaciones en contenedores. Este módulo te guiará a través de los conceptos básicos y los pasos necesarios para desplegar tus contenedores Docker en Kubernetes.

Objetivos de Aprendizaje

  • Comprender los conceptos básicos de Kubernetes.
  • Configurar un clúster de Kubernetes.
  • Crear y desplegar aplicaciones en contenedores en Kubernetes.
  • Gestionar y escalar aplicaciones en Kubernetes.

Conceptos Básicos de Kubernetes

¿Qué es Kubernetes?

Kubernetes es una plataforma de código abierto para la automatización del despliegue, escalado y operación de aplicaciones en contenedores. Fue desarrollado originalmente por Google y ahora es mantenido por la Cloud Native Computing Foundation (CNCF).

Componentes Clave de Kubernetes

  1. Nodo: Una máquina (física o virtual) en el clúster de Kubernetes.
  2. Pod: La unidad más pequeña y simple en el modelo de objetos de Kubernetes. Un pod puede contener uno o más contenedores.
  3. Servicio: Una abstracción que define un conjunto lógico de pods y una política para acceder a ellos.
  4. Deployment: Un objeto que proporciona actualizaciones declarativas para pods y ReplicaSets.
  5. Namespace: Un mecanismo para dividir recursos de clúster entre múltiples usuarios.

Configurando un Clúster de Kubernetes

Instalación de Minikube

Minikube es una herramienta que permite ejecutar un clúster de Kubernetes localmente. Es ideal para el desarrollo y pruebas.

  1. Instalar Minikube:

    • En macOS:
      brew install minikube
      
    • En Linux:
      curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
      sudo install minikube-linux-amd64 /usr/local/bin/minikube
      
    • En Windows: Descarga el ejecutable desde Minikube Releases y agrégalo a tu PATH.
  2. Iniciar Minikube:

    minikube start
    

Instalación de kubectl

kubectl es la herramienta de línea de comandos para interactuar con Kubernetes.

  1. Instalar kubectl:
    • En macOS:
      brew install kubectl
      
    • En Linux:
      curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
      chmod +x ./kubectl
      sudo mv ./kubectl /usr/local/bin/kubectl
      
    • En Windows: Descarga el ejecutable desde Kubernetes Releases y agrégalo a tu PATH.

Desplegando una Aplicación en Kubernetes

Creación de un Deployment

Un Deployment en Kubernetes gestiona un conjunto de pods idénticos. Vamos a crear un Deployment para una aplicación simple en contenedor Docker.

  1. Archivo de Deployment (deployment.yaml):

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-app
            image: my-docker-image:latest
            ports:
            - containerPort: 80
    
  2. Aplicar el Deployment:

    kubectl apply -f deployment.yaml
    

Exponiendo el Deployment con un Servicio

Para acceder a los pods desde fuera del clúster, necesitas crear un Servicio.

  1. Archivo de Servicio (service.yaml):

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    
  2. Aplicar el Servicio:

    kubectl apply -f service.yaml
    

Verificando el Despliegue

  1. Listar Pods:

    kubectl get pods
    
  2. Listar Servicios:

    kubectl get services
    
  3. Acceder a la Aplicación:

    • Si estás usando Minikube, obtén la URL del servicio:
      minikube service my-app-service --url
      

Escalando la Aplicación

Para escalar la aplicación, puedes ajustar el número de réplicas en el Deployment.

  1. Escalar el Deployment:

    kubectl scale deployment my-app --replicas=5
    
  2. Verificar el Escalado:

    kubectl get pods
    

Ejercicio Práctico

Ejercicio

  1. Crea un clúster de Kubernetes usando Minikube.
  2. Despliega una aplicación Docker simple usando un Deployment.
  3. Exponla mediante un Servicio.
  4. Escala el Deployment a 5 réplicas.

Solución

  1. Iniciar Minikube:

    minikube start
    
  2. Crear el Deployment:

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-app
            image: my-docker-image:latest
            ports:
            - containerPort: 80
    
    kubectl apply -f deployment.yaml
    
  3. Crear el Servicio:

    # service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    
    kubectl apply -f service.yaml
    
  4. Escalar el Deployment:

    kubectl scale deployment my-app --replicas=5
    

Conclusión

En este tema, has aprendido cómo desplegar contenedores Docker en un clúster de Kubernetes. Has configurado un clúster local usando Minikube, creado y desplegado un Deployment, expuesto tu aplicación mediante un Servicio y escalado el Deployment. Estos son los fundamentos para gestionar aplicaciones en contenedores a gran escala con Kubernetes. En el siguiente tema, profundizaremos en el escalado y balanceo de carga en Kubernetes.

© Copyright 2024. Todos los derechos reservados