En esta sección, exploraremos los conceptos y la terminología fundamental de Kubernetes. Comprender estos términos es crucial para avanzar en el uso y la administración de Kubernetes.
- Clúster de Kubernetes
Un clúster de Kubernetes es un conjunto de máquinas (físicas o virtuales) que trabajan juntas para ejecutar aplicaciones en contenedores. Un clúster de Kubernetes consta de dos tipos de recursos:
- Nodos de Control (Control Plane): Gestionan el clúster y su estado.
- Nodos de Trabajo (Worker Nodes): Ejecutan las aplicaciones en contenedores.
- Nodo
Un nodo es una máquina (física o virtual) en el clúster de Kubernetes. Hay dos tipos de nodos:
- Nodo de Control: Gestiona el clúster y su estado.
- Nodo de Trabajo: Ejecuta las aplicaciones en contenedores.
- Pod
Un pod es la unidad más pequeña y básica de despliegue en Kubernetes. Un pod puede contener uno o más contenedores que comparten el mismo espacio de red y almacenamiento. Los pods son efímeros y pueden ser reemplazados por otros pods en cualquier momento.
- ReplicaSet
Un ReplicaSet asegura que un número especificado de réplicas de un pod estén ejecutándose en todo momento. Si un pod falla, el ReplicaSet crea un nuevo pod para reemplazarlo.
apiVersion: apps/v1 kind: ReplicaSet metadata: name: my-replicaset spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx
- Deployment
Un Deployment proporciona actualizaciones declarativas para los pods y ReplicaSets. Puedes definir el estado deseado de tu aplicación y Kubernetes se encargará de gestionar el proceso de actualización.
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx
- Servicio (Service)
Un Servicio en Kubernetes es una abstracción que define un conjunto lógico de pods y una política para acceder a ellos. Los servicios permiten la comunicación entre diferentes componentes de una aplicación.
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80
- Namespace
Un Namespace es una forma de dividir un clúster de Kubernetes en múltiples entornos virtuales. Los namespaces son útiles para organizar y gestionar recursos en un clúster compartido.
- ConfigMap
Un ConfigMap es un objeto que permite almacenar datos de configuración en pares clave-valor. Los ConfigMaps se utilizan para separar la configuración del código de la aplicación.
- Secret
Un Secret es similar a un ConfigMap, pero se utiliza para almacenar información sensible, como contraseñas, tokens y claves SSH.
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm
- Volumen
Un Volumen es una forma de almacenar datos que persisten más allá de la vida útil de un pod. Los volúmenes pueden ser de diferentes tipos, como volúmenes persistentes, volúmenes efímeros, etc.
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: "/data" name: my-volume volumes: - name: my-volume emptyDir: {}
- Ingress
Un Ingress es un objeto que gestiona el acceso externo a los servicios en un clúster de Kubernetes, típicamente HTTP y HTTPS. Ingress puede proporcionar balanceo de carga, terminación SSL y alojamiento virtual basado en nombres.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: my-app.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80
- StatefulSet
Un StatefulSet es una API de Kubernetes que gestiona el despliegue y el escalado de un conjunto de pods, y proporciona garantías sobre el orden y la unicidad de estos pods.
apiVersion: apps/v1 kind: StatefulSet metadata: name: my-statefulset spec: serviceName: "my-service" replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx
- DaemonSet
Un DaemonSet asegura que todos (o algunos) nodos ejecuten una copia de un pod. Cuando se añade un nodo al clúster, se añade un pod para él.
apiVersion: apps/v1 kind: DaemonSet metadata: name: my-daemonset spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx
- Job y CronJob
Un Job crea uno o más pods y asegura que un número específico de ellos terminen exitosamente. Un CronJob crea Jobs en un horario basado en cron.
apiVersion: batch/v1 kind: Job metadata: name: my-job spec: template: spec: containers: - name: my-container image: busybox command: ["echo", "Hello, Kubernetes!"] restartPolicy: OnFailure
apiVersion: batch/v1beta1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: my-container image: busybox command: ["echo", "Hello, Kubernetes!"] restartPolicy: OnFailure
Conclusión
En esta sección, hemos cubierto los conceptos y la terminología clave de Kubernetes. Estos términos forman la base de la comprensión de cómo funciona Kubernetes y cómo se gestionan las aplicaciones en un clúster. En el próximo módulo, profundizaremos en los componentes principales de Kubernetes, comenzando con los Pods.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster