Kubernetes: Conceptos y comandos básicos

Repaso de conceptos básicos de Kubernetes y comandos esenciales para gestionar tus aplicaciones.

conceptos-basicos-angular

Kubernetes es una plataforma de orquestación de contenedores de código abierto creada por Google en el 2013. Sirve para automatizar la implementación, administración, operación y escalado de aplicaciones en contenedores. También facilita la gestión de infraestructura distribuida al proporcionar un control centralizado y una alta disponibilidad de los servicios que hospeda.

Conceptos básicos

A continuación detallamos las definiciones de los elementos esenciales que componen Kubernetes:

  • Pods: Son las unidades básicas de ejecución en Kubernetes, que agrupan uno o más contenedores que comparten red, almacenamiento y especificaciones de configuración.
  • Deployments: Son objetos que gestionan el ciclo de vida de los Pods, permitiendo escalado, actualizaciones y retrocesos controlados.
  • Services: Son abstracciones que exponen un conjunto de Pods como un servicio de red, proporcionando un punto de acceso estable a través de un nombre DNS o dirección IP fija.
  • Volumes: Proveen almacenamiento persistente a los Pods, permitiendo que los datos sobrevivan a reinicios de contenedores o Pods.
  • Namespaces: Son divisiones lógicas dentro de un clúster de Kubernetes, que aíslan recursos entre proyectos o entornos (como desarrollo, prueba y producción).
  • ConfigMaps: Almacenan configuraciones no sensibles en forma de pares clave-valor, permitiendo separar configuraciones de la lógica de la aplicación.
  • Secrets: Similar a los ConfigMaps, pero diseñados para almacenar información sensible, como contraseñas o claves, de forma segura.
  • Ingress: Es un objeto que gestiona el acceso HTTP y HTTPS externo a los servicios, mediante reglas de enrutamiento.
  • ReplicaSets: Mantienen un número específico de réplicas de Pods en ejecución para garantizar alta disponibilidad.
  • Nodes: Son las máquinas (físicas o virtuales) dentro de un clúster que ejecutan los Pods y son gestionadas por el plano de control de Kubernetes.
  • Cluster: Es el conjunto completo de máquinas (nodos) que trabajan juntas para ejecutar aplicaciones en contenedores en Kubernetes.
  • DaemonSets: Aseguran que un Pod específico se ejecute en todos (o en algunos) de los nodos del clúster.
  • StatefulSets: Gestionan aplicaciones con estado, proporcionando identidades y almacenamiento persistente para cada réplica.
  • Jobs y CronJobs: Ejecutan tareas temporales o programadas, respectivamente, asegurando que se completen una o varias veces según la configuración.

Herramienta Kubectl

Kubectl es la herramienta de línea de comandos para interactuar con un clúster de Kubernetes. Permite realizar tareas de administración como desplegar aplicaciones, inspeccionar recursos, escalar réplicas, gestionar configuraciones, etc.

Comandos básicos

Para gestionar tus aplicaciones en Kubernetes estos comandos te pueden ayudar:

Pods

  • kubectl get pods: Lista todos los Pods en el namespace actual.
  • kubectl describe pod <nombre-pod>: Muestra detalles específicos de un Pod.
  • kubectl logs <nombre-pod>: Muestra los logs de un Pod.
  • kubectl exec -it <nombre-pod> -- <comando>: Ejecuta un comando en un contenedor dentro de un Pod.
  • kubectl delete pod <nombre-pod>: Elimina un Pod.

Nodes

  • kubectl get nodes: Lista los nodos en el clúster.
  • kubectl describe node <nombre-nodo>: Muestra detalles de un nodo.
  • kubectl cordon <nombre-nodo>: Marca un nodo como no programable.
  • kubectl drain <nombre-nodo>: Desprograma un nodo y elimina Pods en preparación para mantenimiento.
  • kubectl uncordon <nombre-nodo>: Reactiva la programabilidad de un nodo.

Services

  • kubectl get services: Lista todos los servicios en el namespace actual.
  • kubectl describe service <nombre-servicio>: Muestra detalles de un servicio.
  • kubectl expose pod <nombre-pod> --type=<tipo> --port=<puerto>: Crea un servicio para exponer un Pod.
  • kubectl delete service <nombre-servicio>: Elimina un servicio.

Deployments

  • kubectl get deployments: Lista todos los deployments en el namespace actual.
  • kubectl describe deployment <nombre-deployment>: Muestra detalles de un deployment.
  • kubectl scale deployment <nombre-deployment> --replicas=<número>: Escala un deployment a un número específico de réplicas.
  • kubectl rollout restart deployment <nombre-deployment>: Reinicia un deployment.
  • kubectl delete deployment <nombre-deployment>: Elimina un deployment.

Ingress

  • kubectl get ingress: Lista todos los objetos Ingress en el namespace actual.
  • kubectl describe ingress <nombre-ingress>: Muestra detalles de un Ingress.
  • kubectl create ingress <nombre-ingress> --rule="<host>=<servicio>:<puerto>": Crea un Ingress básico con una regla de enrutamiento.
  • kubectl delete ingress <nombre-ingress>: Elimina un Ingress.

ConfigMaps

  • kubectl get configmaps: Lista todos los ConfigMaps en el namespace actual.
  • kubectl describe configmap <nombre-configmap>: Muestra detalles de un ConfigMap.
  • kubectl create configmap <nombre-configmap> --from-literal=<clave>=<valor>: Crea un ConfigMap con pares clave-valor.
  • kubectl create configmap <nombre-configmap> --from-file=<archivo>: Crea un ConfigMap a partir de un archivo.
  • kubectl edit configmap <nombre-configmap>: Edita un ConfigMap existente.
  • kubectl delete configmap <nombre-configmap>: Elimina un ConfigMap.

Secrets

  • kubectl get secrets: Lista todos los Secrets en el namespace actual.
  • kubectl describe secret <nombre-secret>: Muestra detalles de un Secret (aunque los valores estarán codificados en base64).
  • kubectl create secret generic <nombre-secret> --from-literal=<clave>=<valor>: Crea un Secret con pares clave-valor.
  • kubectl create secret generic <nombre-secret> --from-file=<archivo>: Crea un Secret a partir de un archivo.
  • kubectl delete secret <nombre-secret>: Elimina un Secret.
  • kubectl edit secret <nombre-secret>: Edita un Secret existente.

Conclusión

Hay que tener en cuenta que Kubernetes es un sistema enorme y complejo. En este artículo hemos explicado de forma superficial la definición de los conceptos básicos y comandos esenciales para entender mejor la plataforma y gestionar los recursos con Kubectl.