¿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: 80Paso 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: 8080Conclusió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
