Mostrando entradas con la etiqueta Apache License. Mostrar todas las entradas
Mostrando entradas con la etiqueta Apache License. Mostrar todas las entradas

martes, 22 de septiembre de 2020

¿Qué es Kubernetes?

En entradas anteriores, "De los Monolitos a los Microservicios" y "Orquestación de Contenedores" comenzamos a abordar con más detalle este tema tecnológico de actualidad (Microservicios y Contenedores). En esta tercer entrega relativa al misma Tecnología, deseamos continuar en donde nos habíamos quedado.

Según el sitio web oficial de Kubernetes: "Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la gestión de aplicaciones en Contenedores".

La palabra Kubernetese proviene del vocablo griego κυβερνήτης, que significa timonel o piloto de barco. Con esta analogía en mente, podemos pensar en Kubernetes como el timonel de los contenedores.

A Kubernetes también se conoce de manera abreviada como k8s, ya que hay 8 caracteres entre la letra "K" y la letra "s" dentro de la cadena de caracteres que conforman el nombre.

Kubernetes está muy inspirado en el sistema Google Borg, un Orquestador de Contenedores para sus operaciones globales durante más de una década. Es un proyecto de código abierto escrito en el lenguaje Go y con licencia de Apache License, Versión 2.0.

Kubernetes fue iniciado por Google y, con su versión v1.0 en julio de 2015, Google lo donó a la Cloud Native Computing Foundation (CNCF). Hablaremos más sobre CNCF más adelante.

Las nuevas versiones de Kubernetes se lanzan en ciclos de 3 meses. La versión estable actual es 1.14 (a mayo de 2019).

Desde Borg hasta Kubernetes

Según el resumen del artículo Borg de Google, publicado en 2015: "El sistema Borg de Google es un administrador de clústeres que ejecuta cientos de miles de trabajos, desde muchos miles de aplicaciones diferentes, en varios clústeres, cada uno con hasta decenas de miles de máquinas".

Durante más de una década, Borg fue el secreto de Google, con el que ejecutó (y aún ejecuta) sus cargas de trabajo dentro Contenedores, en todo el mundo, en ambiente de producción. Los servicios que utilizamos de Google como Gmail, Drive, Maps, Docs, etc., se prestan todos mediante Borg.

Algunos de los autores iniciales de Kubernetes fueron empleados de Google que han utilizado y desarrollado Borg en el pasado, aportando su valioso conocimiento y experiencia al diseñar Kubernetes. Algunas de las características/objetos de Kubernetes que se pueden rastrear hasta Borg y/o las lecciones aprendidas de él, son:

  • Servidores de APIs
  • Pods
  • IPs por Pod
  • Servicios
  • Etiquetas

Exploraremos todos ellos, y más, posteriormente.

Características de Kubernetes

Kubernetes ofrece un conjunto muy rico de funciones para la orquestación de contenedores. Algunas de sus funciones totalmente compatibles son:

Embalaje automático de contenedores programa automáticamente los contenedores en función de las necesidades y limitaciones de los recursos, para maximizar la utilización sin sacrificar la disponibilidad.

Autocuración reemplaza y reasigna automáticamente los contenedores de los nodos fallidos. Mata y reinicia los contenedores que no responden a las verificaciones de estado, según las reglas y/o políticas existentes. También evita que el tráfico se enrute a contenedores que no responden.

Escalamiento horizontal

Con Kubernetes, las aplicaciones se escalan de forma manual o automática según el consumo de CPU o la utilización de métricas personalizadas.


Descubrimiento de servicios y balanceo de carga

Los contenedores reciben sus propias direcciones IP de Kubernetes, mientras que éste asigna un único nombre de Servidor de Nombres de Dominio (DNS) a un conjunto de contenedores, para ayudar a equilibrar la carga de las solicitudes en todos los contenedores del conjunto.

Algunas otras funciones de Kubernetes totalmente compatibles son:

Implementaciones y reversiones automatizadasKubernetes implementa y revierte sin problemas las actualizaciones de la aplicación y los cambios de configuración, monitoreando constantemente el estado de la aplicación para evitar cualquier tiempo de inactividad.

Administración de secretos y configuracionesKubernetes administra los secretos y los detalles de configuración de una aplicación por separado de la imagen del contenedor, para evitar una reconstrucción de la imagen respectiva. Los secretos consisten en información confidencial que se pasa a la aplicación sin revelar el contenido sensible a la configuración de la pila, como en GitHub.

Orquestación de almacenamientoKubernetes monta automáticamente soluciones de almacenamiento definido por software (SDS) en contenedores de almacenamiento local, proveedores de nube externos o sistemas de almacenamiento en red.

Ejecución por lotes

Kubernetes admite la ejecución por lotes, trabajos de larga ejecución y reemplaza los contenedores fallidos.

Hay muchas otras características además de las que acabamos de mencionar, y actualmente se encuentran en fase alfa / beta. Agregarán un gran valor a cualquier implementación de Kubernetes una vez que se conviertan en características estables. Por ejemplo, la compatibilidad con el Control de Acceso Basado en Roles (RBAC) es estable a partir de la versión 1.8 de Kubernetes.

¿Por qué utilizar Kubernetes?

Además de sus funciones totalmente compatibles, Kubernetes también es portátil y extensible. Se puede implementar en muchos entornos, como máquinas virtuales locales o remotas, seridores físicos o en configuraciones públicas/privadas/híbridas/de múltiples nubes. Es soportado y soporta muchas herramientas de código abierto de terceros que mejoran las capacidades de Kubernetes y brindan una experiencia rica en funciones a sus usuarios.

La arquitectura de Kubernetes es modular y "conectable". No solo organiza aplicaciones de tipo microservicios desacoplados modulares, sino que también su arquitectura sigue patrones de microservicios desacoplados. La funcionalidad de Kubernetes se puede ampliar creando, programando, escribiendo recursos personalizados, operadores, API personalizadas, reglas de programación o complementos.

Para todo proyecto de código abierto exitoso, la comunidad es tan importante como tener un buen código. Kubernetes cuenta con el respaldo de una comunidad próspera en todo el mundo. Tiene más de 2.000 contribuyentes que, con el tiempo, han impulsado más de 77.000 "commits". Hay grupos de encuentro en diferentes ciudades y países que se reúnen regularmente para discutir sobre Kubernetes y su ecosistema. Hay Grupos de Interés Especial (SIG), que se enfocan en temas especiales, como escalabilidad, servioder físicos, redes, etc. Hablaremos más sobre ellos en nuestro último capítulo, Comunidades de Kubernetes.

Usuarios de Kubernetes

Con solo unos años desde su debut, muchas empresas de todos tamaños ejecutan sus cargas de trabajo con Kubernetes. Es una solución para la gestión de cargas de trabajo en rubros tan distintos como la banca, educación, finanzas e inversiones, juegos, tecnologías de la información, medios y transmisión, venta minorista en línea (retail/e-commerce), tiempos compartidos (turismo), telecomunicaciones y muchas otras industrias. Existen numerosos estudios de casos de usuarios e historias de éxito en el sitio web de Kubernetes como:

  • BlaBlaCar
  • BlackRock
  • box
  • eBay
  • Haufe Group
  • Huawei
  • IBM
  • ING
  • Nokia
  • Pearson
  • Wikimedia

Y muchos más.

Cloud Native Computing Foundation (CNCF)

Cloud Native Computing Foundation (CNCF) es uno de los proyectos alojados por Linux Foundation. CNCF tiene como objetivo acelerar la adopción de contenedores, microservicios y aplicaciones nativas de la nube.

CNCF alberga una multitud de proyectos y se agregarán más en el futuro. CNCF proporciona recursos a cada uno de los proyectos, pero, al mismo tiempo cada proyecto continúa operando de forma independiente bajo su estructura de gobernancia preexistente y con sus mantenedores existentes. Los proyectos dentro de CNCF se clasifican según el estado alcanzado:

  • Sandbox
  • Incubating
  • Graduate

En el momento en que se creó este ducumento, había seis proyectos con estatus de "Graduate" y muchos más aún en "Incubating" y en el Sandbox.

Proyectos estatus "Graduate":

  • Kubernetes para la orquestación de contenedores
  • Prometheus para monitorización
  • Envoy de malla de servicio
  • CoreDNS para descubrimiento de servicios
  • Containerd para el ambiente de ejecución del Contenedor
  • Fluentd para el "logging" (registro)

Proyectos de incubación:

  • rkt y CRI-O para el tiempo de ejecución del contenedor
  • Linkerd para malla de servicios
  • etcd para almacén de key/value
  • gRPC para llamada a procedimiento remoto (RPC)
  • CNI para API de redes
  • Harbor para registro
  • Helm para la gestión de paquetes
  • Rook y Vitess para almacenamiento nativo en la nube
  • Notary para seguridad
  • TUF para actualizaciones de software
  • NATS para mensajería
  • Jaeger y OpenTracing para rastreo distribuido
  • Open Policy Agent para la políticas.

Hay muchos proyectos en CNCF Sandbox orientados a métricas, monitoreo, identidad, "serverless", "nodeless", "edge", etc.

Como podemos ver, los proyectos de CNCF cubren todo el ciclo de vida de una aplicación nativa de la nube, desde su ejecución usando ambientes de ejecución basados en contenedores, hasta su monitoreo y registro. Esto es muy importante para cumplir con el objetivo de la CNCF.

La CNCF y Kubernetes

Para Kubernetes, Cloud Native Computing Foundation representa-entrega-ofrece:

  • Proporciona un hogar neutral para la marca comercial Kubernetes y hace cumplir el uso adecuado de éste.
  • Proporciona escaneo de licencias de código central y de proveedor.
  • Ofrece orientación legal sobre cuestiones de patentes y derechos de autor.
  • Crea un plan de estudios de aprendizaje, capacitación y certificación de código abierto para administradores y desarrolladores de aplicaciones de Kubernetes.
  • Administra un grupo de trabajo para garantizar la consistencia y conformidad del software.
  • Comercializa activamente Kubernetes.
  • Apoya actividades "ad hoc".
  • Financia conferencias y eventos de reuniones.

Resumen

Haciendo la cuasi obligada analogía naviera, mientras que el Kernel del Sistema Operativo es el océano, Doker es el equivalente al Buque Portacontenedores y Kubernetes es ese Capitán que conduce, administra, organiza y orquesta todas las operaciones del Buque Portacontenedores.