Introduciendo Kubernetes

¿Qué es Kubernetes?

Kubernetes es un orquestador de contenedores como docker o cri-o. Gracias a kubernetes, se eliminan muchos de los procesos manuales involucrados en la implementación y escalabilidad de las aplicaciones en contenedores.

¿Por qué Kubernetes?

En producción, las aplicaciones constan de varios contenedores, los cuales están alojados en distintos hosts de servidores. Con kubernetes puedes crear servicios de aplicaciones que abarcan varios contenedores, programarlos en un clúster, escarlarlos y administrar el estado de esos contenedores.

Con lo que con kubernetes, solucionamos muchos de los problemas de proliferación de contenedores, ya que están juntos en un pod, en breves detallamos conceptos.

Posibilidades de Kubernetes

  • Orquestar contenedores en múltiples hosts.
  • Optimizar el uso de nuestros recursos hardware.
  • Controlar y automatizar nuestras implementaciones y actualizaciones de las aplicaciones.
  • Añadir almacenamiento para ejecutar aplicaciones con estado.
  • Escalar las aplicaciones en contenedores y sus recursos sobre la marcha.
  • Administrar servicios de forma declarativa, garantizando que las aplicaciones implementadas siempre se ejecuten del mismo modo que se implementaron.
  • Comprobaciones de estado y autorregeneración de sus aplicaciones con ubicación, reinicio, replicación y escalamiento automáticos.

Dependencias

  • Registro, se suele usar Docker Registry.
  • Conexiones en red y enrutamiento inteligente de perímetros, con proyectos como Flannel u OVS.
  • Telemetría, con proyectos como heapster, kibana, hawkular y elastic.
  • Seguridad, a través de tecnologías como LDAP, SELinux, RBAC y OAUTH, con capas multitenencia.
  • Servicios, a través de un amplio catálogo del contenido creado de antemano de los patrones de las aplicaciones más conocidas.

Conceptos de Kubernetes

Vamos a ver los principales términos de kubernetes que, antes de empezar, debemos conocer.

  • Master: La máquina/s que controla/n todos los nodos de kubernetes.
  • Nodo: Máquinas donde se realizarán las tareas asignadas.
  • Pod: Éste es el componente básico de kubernetes, un pod encapsula un contenedor (o contenedores) de aplicaciones, recursos de almacenamiento, una ip única y las opciones que rigen como deben ejecutarse esos contenedores.
  • Service: Es una abstracción de los pods, que define un conjunto lógico de pods, éste conjunto es “apuntado” (generalmente) por un LabelSelector.
  • Volumenes: Los archivos de un contenedor son efímeros, y del propio contentedor. Para solucionar esto tenemos los volúmenes.
  • Label: Las etiquetas, son pares clave/valor que están unidos a objetos. Cada objeto puede tener múltiples etiquetas
  • LabelSelector: A través del selector de etiquetas, el cliente/usuario puede identificar un conjunto de objetos.
  • Namespaces: Kubernetes admite múltiples clústers virtuales en un mismo clúster físico, cada clúster virtual es un namespace.
  • ReplicaSet: Es el encargado de controlar cuántas replicas de un pod deben estar ejecutándose. Manteniendo que estén siempre activos y disponibles.
  • Deployments: Proporciona actualizaciones declarativas para los pods y los ReplicaSets. Se describe el estado deseado del objeto y éste se encarga de mantener el estado deseado del despliegue. Modificando el deployment, éste hace los cambios necesarios para adoptar el nuevo estado deseado.
  • StatefulSets: La diferencia con un deployment, es que éste mantiene una identidad adhesiva para cada uno de sus pods, estos pods se crean a partir de la misma especificación, pero no son intercambiables, Cada uno tiene un identificador persistente que mantiene en cualquier reprogramación.
  • DaemonSets: Se encarga de garantizar que todos (o algunos) de los nodos ejecuten una copia de un pod.
  • Jobs: Los jobs crean uno o más pods y asegura que un número de ellos finalice de forma exitosa. Cuando se alcanza el objetivo deseado, el job estaría finalizado, pero los datos permanecen guardados hasta que se elimine dicho job.
  • Kubelet: Servicio que se ejecuta en los nodos y lee los manifiestos del contenedor, garantizando que los contenedores definidos estén iniciados y ejecutándose.
  • Kubectl: Es la herramienta de configuración de la línea de comandos de kubernetes.

En la siguiente entrada veremos como desplegar un clúster de kubernetes en alta disponibilidad con kubeadm.

Referencias:
https://kubernetes.io/docs/
http://kubernetesbyexample.com/
https://www.redhat.com/es/topics/containers/what-is-kubernetes
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s