Aprendiendo sobre Kubernetes

Aprendiendo sobre Kubernetes


¿ Qué es Kubernetes ?

Kubernetes facilita la automatización y la configuración declarativa. Kubernetes (en inglés llamado habitualmente «K8s») es una plataforma de sistema distribuido de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores​ que fue originalmente diseñado por Google y donado a la Cloud Native Computing Foundation (parte de la Linux Foundation).

Con la gran popularidad de los contenedores en las organizaciones, Kubernetes, el software de administración centrado en contenedores, se convirtió en el estándar de facto para implementar y operar aplicaciones en contenedores. Google Cloud es la base de Kubernetes, que originalmente se desarrolló en Google y se lanzó como código abierto en 2014. Kubernetes se creó sobre la base de la experiencia de 15 años de ejecuciones de cargas de trabajo en contenedores de Google y las valiosas contribuciones de la comunidad de código abierto. Inspirado en el sistema de administración de clústeres interno de Google, Borg, Kubernetes facilita todo lo asociado con la implementación y la administración de tu aplicación. Mediante la organización automática de contenedores, Kubernetes mejora la confiabilidad y reduce el tiempo y los recursos asociados a las operaciones diarias.

¿Qué es Alta Disponibilidad ?

La alta disponibilidad es la capacidad de un sistema o componente del sistema para estar continuamente operando durante un período deseablemente largo; es decir, sin interrupciones por fallos. La disponibilidad se se mide del 0% al 100% idealmente, aunque es complicado lograr el 100% de disponibilidad en la mayoría de los casos.

Combina dos conceptos para determinar si un sistema cumple con su nivel de rendimiento operativo: el primero tiene que ver con la accesibilidad o la disponibilidad prácticamente permanentes de un servicio o servidor sin tiempo de inactividad; y el segundo se refiere a su funcionamiento según las expectativas razonables y durante un período establecido. Para que cualquier sistema esté altamente disponible, las partes de un sistema deben estar bien diseñadas y probadas exhaustivamente antes de ser utilizadas. Dado que un sistema informático o una red consta de muchas partes en las que todas las partes generalmente deben estar presentes para que todo funcione correctamente.

La adopción de los servicios en línea y las cargas de trabajo híbridas genera la necesidad de que las infraestructuras gestionen el aumento de las cargas en los sistemas mientras mantienen los estándares operativos.No es suficiente con que las infraestructuras, comúnmente conocidas como sistemas de alta disponibilidad, “funcionen mejor”, sino que deben generar resultados definidos y cuantificables para lograr la alta disponibilidad. Uno de los objetivos de estas soluciones o servicios es ofrecer un tiempo de actividad del 99,999 %, es decir, que el sistema funcione correctamente el 99,999 % del tiempo.

Disponibilidad con un SLA de 99,999%

Con este acuerdo el usuario final puede esperar que el servicio no esté disponible durante los siguientes períodos de tiempo:

  • Diario: 0.9 segundos
  • Semanal: 6.0 segundos
  • Mensual: 26,3 segundos
  • Anual: 5 minutos y 15,6 segundos

Por lo general, solo los sectores más importantes, como la salud, el Gobierno y los servicios financieros, requieren este nivel de disponibilidad por razones de cumplimiento normativo o de competencia. Sin embargo, también hay otras empresas y sectores que necesitan que los sistemas mantengan el tiempo de actividad del 99,9 % o incluso del 99,99 % para ofrecer acceso digital constante a los clientes o permitir que los empleados trabajen desde sus hogares.

Algunos Indicadores

Los equipos de TI utilizan varios indicadores comunes para determinar si la arquitectura de los entornos de alta disponibilidad cumple con sus objetivos. Es posible que algunos sean más útiles que otros para su arquitectura, pero vale la pena evaluarlos a todos para establecer las expectativas de referencia en cuanto al rendimiento:

  1. Tiempo medio entre fallas (MTBF): determina el tiempo de funcionamiento del entorno entre una falla y otra del sistema.
  2. Tiempo medio de inactividad: determina el tiempo de inactividad del sistema, en minutos, antes de que se recupere o sustituya.
  3. Objetivo de tiempo de recuperación (RTO): determina el tiempo total que toma completar una reparación y volver a conectar el sistema.
  4. Objetivo de punto de recuperación (RPO): determina el período en el que se deben poder recuperar los datos. Es el período en que se pierden los datos. Por ejemplo, si un sistema depende de la recuperación de otro cuyos backups se ejecutan una vez al día, podría haber una pérdida de datos de hasta 24 horas. Por el contrario, si cuenta con el almacenamiento replicado o compartido, la pérdida puede ser de tan solo unos minutos o menos.

¿ Qué es Escalabilidad ?

La escalabilidad, término tomado en préstamo del idioma inglés, es la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para reaccionar y adaptarse sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos.

La escalabilidad como propiedad de los sistemas es generalmente difícil de definir,​ en particular es necesario definir los requisitos específicos para la escalabilidad en esas dimensiones donde se crea que son importantes. Es una edición altamente significativa en sistemas electrónicos, bases de datos, ruteadores y redes. A un sistema cuyo rendimiento es mejorado después de haberle añadido más capacidad hardware, proporcionalmente a la capacidad añadida, se dice que pasa a ser un sistema escalable.

La escalabilidad se puede medir en diferentes dimensiones.

  • Escalabilidad en carga: Un sistema distribuido nos hace fácil el ampliar y reducir sus recursos para acomodar (a conveniencia), cargas más pesadas o más ligeras según se requiera.
  • Escalabilidad geográfica: Un sistema geográficamente escalable, es aquel que mantiene su utilidad y usabilidad, sin importar que tan lejos estén sus usuarios o recursos.
  • Escalabilidad administrativa: No importa qué tantas diferentes organizaciones necesiten compartir un solo sistema distribuido, debe ser fácil de usar y manejar.

¿ Por qué usar contenedores ?

  • Ágil creación y despliegue de aplicaciones: Mayor facilidad y eficiencia al crear imágenes de contenedor en vez de máquinas virtuales
  • Desarrollo, integración y despliegue continuo: Permite que la imagen de contenedor se construya y despliegue de forma frecuente y confiable, facilitando los rollbacks pues la imagen es inmutable
  • Separación de tareas entre Dev y Ops: Puedes crear imágenes de contenedor al momento de compilar y no al desplegar, desacoplando la aplicación de la infraestructura
  • Observabilidad No solamente se presenta la información y métricas del sistema operativo, sino la salud de la aplicación y otras señales
  • Consistencia entre los entornos de desarrollo, pruebas y producción: La aplicación funciona igual en un laptop y en la nube
  • Portabilidad entre nubes y distribuciones: Funciona en Ubuntu, RHEL, CoreOS, tu datacenter físico, Google Kubernetes Engine y todo lo demás
  • Administración centrada en la aplicación: Eleva el nivel de abstracción del sistema operativo y el hardware virtualizado a la aplicación que funciona en un sistema con recursos lógicos
  • Microservicios distribuidos, elásticos, liberados y débilmente acoplados: Las aplicaciones se separan en piezas pequeñas e independientes que pueden ser desplegadas y administradas de forma dinámica, y no como una aplicación monolítica que opera en una sola máquina de gran capacidad
  • Aislamiento de recursos: Hace el rendimiento de la aplicación más predecible
  • Utilización de recursos: Permite mayor eficiencia y densidad

Comparando Kubernetes y Docker

Muchas veces se interpreta que debe elegirse uno o el otro; sin embargo, si bien Kubernetes y Docker son tecnologías muy diferentes, son complementarias para ejecutar aplicaciones en contenedores.

Docker te permite colocar todo lo necesario para ejecutar tu aplicación en una caja que puede almacenarse y abrirse cuando y donde sea necesario. Una vez que comienzas a hacer esto con tus aplicaciones, debes encontrar la forma de administrar dichas cajas; esa es la función de Kubernetes.

Kubernetes es una palabra griega que significa “capitán” en español. Así como el capitán es responsable de navegar el barco de forma segura en el mar, Kubernetes es responsable de trasladar y entregar las cajas de forma segura a las ubicaciones en las que puedan usarse.

  • Kubernetes puede usarse con o sin Docker
  • Docker no es una alternativa a Kubernetes, por lo que no es una cuestión de “Kubernetes o Docker”. Se trata de usar Kubernetes y Docker para colocar las aplicaciones en contenedores y ejecutarlas a gran escala.
  • La diferencia entre Docker y Kubernetes está en la función que cada uno cumple en la creación de contenedores y la ejecución de las aplicaciones.
  • Docker es un estándar de la industria para el empaquetado y la distribución de aplicaciones en contenedores.
  • Kubernetes usa Docker para implementar, administrar y escalar aplicaciones en contenedores.

¿ Qué es k8s ?

K8s es solo una abreviatura de Kubernetes (“K” seguida de 8 letras “ubernete” seguida de “s”). Sin embargo, normalmente cuando la gente habla de Kubernetes o K8, se refiere al proyecto original, diseñado por Google como una plataforma realmente altamente disponible y enormemente escalable.

miniKube: ¿Por qué elegir algo simple cuando puedes elegir algo aún más simple?

Minikube es una distribución reducida de Kubernetes que permite alcanzar el máximo rendimiento funcional de esta herramienta con el mínimo esfuerzo. Esto no solo es interesante para quienes se están iniciando en el uso de contenedores, sino también, y sobre todo, en el mundo del edge computing y el del Internet de las cosas.

Minikube es la solución ideal para pequeños proyectos basados ​​en contenedores. Te permite, por ejemplo, configurar un clúster de Kubernetes en privado sin tener que trabajar directamente con todo un servidor o una nube. Al contrario que Kubernetes, Minikube prescinde de grandes infraestructuras y puede configurar clústeres fácilmente de forma local.

Un ordenador y un clúster con un solo nodo: este es el espacio que necesita Minikube. Este requisito mínimo es especialmente adecuado para pequeños proyectos privados, que los desarrolladores de software ya pueden implementar fácilmente gracias a Minikube. No hace falta un servidor ni una nube, ya que el clúster de Kubernetes simplemente se ejecuta en el localhost. Minikube funciona de forma predeterminada con VirtualBox como software de virtualización, por lo que no solo se puede utilizar en Linux, sino también en Windows o macOS. Sin embargo, si prefieres trabajar sin VirtualBox, Minikube también consigue expandirse de manera que no requiera este software.

La simplicidad de Minikube también se nota en sus funciones. La herramienta es compatible con las siguientes funciones de Kubernetes:

  • DNS
  • NodePorts
  • ConfigMaps y Secrets
  • Dashboards
  • Entornos de tiempo de ejecución de contenedores: Docker o alternativas a Docker como rkt, CRI-O o containerd
  • Compatibilidad con CNI (Container Network Interface)
  • Ingress

¿ Qué es k3s ?

K3s está diseñado para ser un binario único de menos de 40 MB que implementa completamente la API de Kubernetes. Para lograr esto, eliminaron muchos controladores adicionales que no necesitaban ser parte del núcleo y se reemplazan fácilmente con complementos.

K3s es una oferta de Kubernetes totalmente certificada por CNCF (Cloud Native Computing Foundation) . Esto significa que puede escribir su YAML para operar en un Kubernetes “completo” normal y también se aplicará en un clúster k3s.

Debido a sus bajos requisitos de recursos, es posible ejecutar un clúster en cualquier máquina con 512 MB de RAM o más. Esto significa que podemos permitir que los pods se ejecuten en el maestro, así como en los nodos.

Y, por supuesto, debido a que es un binario pequeño, significa que podemos instalarlo en una fracción del tiempo que lleva iniciar un clúster de Kubernetes normal. Por lo general, tardamos menos de dos minutos en lanzar un clúster k3s con un puñado de nodos, lo que significa que puede implementar aplicaciones para aprender/probar en un abrir y cerrar de ojos.

Si está buscando una plataforma liviana y fácil de usar que sea ideal para implementaciones más pequeñas, entornos con recursos limitados, computación de vanguardia o IoT, entonces los K3 pueden ser la mejor opción para usted. Con su tamaño más pequeño, configuración simplificada y uso reducido de recursos, los K3 pueden ayudarlo a implementar y administrar rápidamente aplicaciones en contenedores de una manera más eficiente y rentable.

Por otro lado, si trabaja con cargas de trabajo grandes y complejas que requieren alta escalabilidad, rendimiento y disponibilidad, entonces los K8 pueden ser la mejor opción para usted. Con sus sólidas funciones, su extenso ecosistema y su amplia gama de extensiones, K8 puede ayudarlo a administrar y orquestar fácilmente incluso las aplicaciones en contenedores más complejas.

También vale la pena señalar que tanto los K3 como los K8 tienen sus fortalezas y debilidades y pueden ser más adecuados para ciertos casos de uso que para otros. En última instancia, la mejor opción dependerá de sus necesidades, recursos y objetivos específicos, por lo que es importante evaluar cuidadosamente sus opciones y elegir la plataforma que mejor se adapte a sus necesidades.

¿ Qué es k0s ?

k0s es una distribución de Kubernetes con todo incluido, que está configurada con todas las funciones necesarias para crear un clúster de Kubernetes y empaquetada como un único binario para facilitar su uso.

k0s se adapta bien a cualquier entorno de nube, pero también se puede utilizar en puertas de enlace de IoT, implementaciones Edge y Bare metal debido a su diseño simple, opciones de implementación flexibles y requisitos de sistema modestos.

  1. Diferentes métodos de instalación: nodo único , nodo múltiple , airgap y Docker
  2. Gestión automática del ciclo de vida con k0sctl: actualización , copia de seguridad y restauración
  3. Requisitos del sistema modestos (1 vCPU, 1 GB de RAM)
  4. Kubernetes ascendente Vanilla (sin cambios)
  5. Disponible como un binario único sin dependencias de tiempo de ejecución externas además del kernel
  6. Opciones de implementación flexibles con aislamiento del plano de control por defecto
  7. Escalable desde un único nodo hasta grandes clústeres de alta disponibilidad
  8. Admite complementos personalizados de interfaz de red de contenedores (CNI) (Kube-Router es el predeterminado, Calico se ofrece como alternativa preconfigurada)
  9. Admite complementos personalizados de Container Runtime Interface (CRI) (containerd es el valor predeterminado)
  10. Admite todas las opciones de almacenamiento de Kubernetes con Container Storage Interface (CSI)
  11. Admite una variedad de backends de almacenes de datos : etcd (predeterminado para clústeres de múltiples nodos), SQLite (predeterminado para clústeres de un solo nodo), MySQL y PostgreSQL
  12. Soporta x86-64, ARM64 y ARMv7
  13. Servicio de conectividad , CoreDNS, Servidor de métricas
/home/mrosero/web/mauro.rosero.one/public_html/data/gitrepo/pages/notes/microservices/kubernetes_conceptos.txt · Última modificación: 2023/11/12 01:30 por mrosero
CC Attribution-Noncommercial 4.0 International Excepto donde se indique lo contrario, el contenido de este wiki esta bajo la siguiente licencia: CC Attribution-Noncommercial 4.0 International