¿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
- API Server: Punto de entrada para todas las operaciones administrativas en el clúster.
- etcd: Almacén de datos clave-valor distribuido que Kubernetes usa para almacenar todos los datos del clúster.
- Controller Manager: Ejecuta los controladores que regulan el estado del clúster.
- Scheduler: Asigna Pods a los nodos basándose en varios factores como recursos disponibles y políticas de afinidad.
Componentes del Nodo de Trabajo
- Kubelet: Agente que se ejecuta en cada nodo y asegura que los contenedores estén ejecutándose en un Pod.
- Kube-proxy: Gestiona las reglas de red en cada nodo.
- 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
-
Instalar Docker:
sudo apt-get update sudo apt-get install -y docker.io sudo systemctl enable docker sudo systemctl start docker
-
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
-
Inicializar el Clúster:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
-
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
-
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
Paso 3: Verificar el Estado del Pod
Ejercicio Práctico
Ejercicio 1: Desplegar una Aplicación Simple
- Crear un archivo YAML para un Pod que ejecute una aplicación simple (por ejemplo, una aplicación web en Python).
- Aplicar el archivo YAML usando
kubectl apply -f <archivo>.yaml
. - 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
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.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga