¿Qué es Kubernetes?

Kubernetes es una plataforma de orquestación de contenedores de código abierto que automatiza la implementación, el escalado y la gestión de aplicaciones en contenedores. Fue desarrollado originalmente por Google y ahora es mantenido por la Cloud Native Computing Foundation (CNCF).

Conceptos Clave

  • Cluster: Un conjunto de nodos que ejecutan aplicaciones en contenedores gestionados por Kubernetes.
  • Nodo: Una máquina individual en el clúster, puede ser una máquina física o virtual.
  • Pod: La unidad más pequeña y básica de Kubernetes, que puede contener uno o más contenedores.
  • Servicio: Una abstracción que define un conjunto lógico de Pods y una política para acceder a ellos.
  • Namespace: Un mecanismo para dividir recursos de clúster entre múltiples usuarios.

Arquitectura de Kubernetes

Kubernetes sigue una arquitectura maestro-esclavo (master-slave) donde el nodo maestro gestiona el clúster y los nodos esclavos ejecutan las aplicaciones en contenedores.

Componentes del Nodo Maestro

  1. API Server: Punto de entrada para todas las operaciones administrativas en el clúster.
  2. etcd: Almacén de datos clave-valor distribuido que Kubernetes usa para almacenar todos los datos del clúster.
  3. Controller Manager: Ejecuta los controladores que regulan el estado del clúster.
  4. Scheduler: Asigna Pods a los nodos basándose en varios factores como recursos disponibles y políticas de afinidad.

Componentes del Nodo de Trabajo

  1. Kubelet: Agente que se ejecuta en cada nodo y asegura que los contenedores estén ejecutándose en un Pod.
  2. Kube-proxy: Gestiona las reglas de red en cada nodo.
  3. Container Runtime: Software responsable de ejecutar contenedores (por ejemplo, Docker, containerd).

Instalación de Kubernetes

Requisitos Previos

  • Sistema Operativo: Linux (preferiblemente Ubuntu o CentOS)
  • Recursos de Hardware: Mínimo 2 CPU, 2GB de RAM
  • Herramientas: kubectl, kubeadm, kubelet, y un runtime de contenedores como Docker.

Pasos de Instalación

  1. Instalar Docker:

    sudo apt-get update
    sudo apt-get install -y docker.io
    sudo systemctl enable docker
    sudo systemctl start docker
    
  2. Instalar kubeadm, kubelet y kubectl:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    
  3. Inicializar el Clúster:

    sudo kubeadm init --pod-network-cidr=192.168.0.0/16
    
  4. Configurar kubectl:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  5. Instalar una Red de Pod (por ejemplo, Calico):

    kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
    

Ejemplo Práctico: Desplegando una Aplicación en Kubernetes

Paso 1: Crear un Archivo de Manifesto YAML

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

Paso 2: Aplicar el Manifesto

kubectl apply -f nginx-pod.yaml

Paso 3: Verificar el Estado del Pod

kubectl get pods

Ejercicio Práctico

Ejercicio 1: Desplegar una Aplicación Simple

  1. Crear un archivo YAML para un Pod que ejecute una aplicación simple (por ejemplo, una aplicación web en Python).
  2. Aplicar el archivo YAML usando kubectl apply -f <archivo>.yaml.
  3. Verificar que el Pod esté en ejecución usando kubectl get pods.

Solución

apiVersion: v1
kind: Pod
metadata:
  name: python-web
  labels:
    app: python-web
spec:
  containers:
  - name: python-web
    image: python:3.8-slim
    command: ["python", "-m", "http.server", "8080"]
    ports:
    - containerPort: 8080
kubectl apply -f python-web.yaml
kubectl get pods

Conclusión

En esta sección, hemos introducido Kubernetes, su arquitectura y componentes clave, y hemos aprendido a instalar y desplegar una aplicación simple en un clúster de Kubernetes. En el siguiente módulo, profundizaremos en cómo desplegar contenedores Docker en Kubernetes y gestionarlos de manera eficiente.

© Copyright 2024. Todos los derechos reservados