Mostrando entradas con la etiqueta Container. Mostrar todas las entradas
Mostrando entradas con la etiqueta Container. Mostrar todas las entradas

domingo, 24 de marzo de 2024

Los Contenedores: Preguntas y Respuestas

 ¿Para qué nacieron las Computadoras? Para resolver problemas. Sí. Ya son legendarias las aventuras de Alan Turing, su equipo de trabajo y todos los esfuerzos por parte del gobierno británico para descifrar o más bien decriptar los mensajes generados con la máquina "Enigma" de los nacionales socialistas alemanes (nazis).

También las computadoras se han aplicado para analizar datos, ordenarlos (por eso en España se les dice "ordenadores") clasificarlos, realizar operaciones matemática e iterando algoritmos (que deriva del nombre del matemático árabe Abu Abdallah Muḥammad Ibn Mūsā Al-Jwarizmī).

Son precisamente esos algoritmos lo que hace que un grupo de personas, los Programadores, puedan "ecribir" Programas de Cómputo y que estos al ejecutarse en el Hardware, realmente le den sentido a las Computadoras.

Durante mucho tiempo, sin importar el lenguaje de cómputo, se seguían los lineamientos y cánones de la Programación en Cascada.

La Programación en Cascada

Más comúnmente conocida como el modelo de desarrollo de software en cascada, es una metodología secuencial que se ha utilizado tradicionalmente en la ingeniería de software. Este modelo se caracteriza por una serie de fases claramente definidas y ordenadas, donde cada fase debe completarse antes de pasar a la siguiente. Aquí te detallo sus características principales y cómo se desarrolla:

Secuencialidad: El proceso sigue una secuencia lineal desde el inicio del proyecto hasta su conclusión, sin retroceder a fases anteriores.

Estructura Fija: Las fases del proyecto son fijas y se completan una tras otra en orden específico: Requisitos, Diseño, Implementación, Verificación, y Mantenimiento.

Documentación Completa: Cada fase produce documentos que sirven como entrada para la siguiente fase. Esto significa que antes de escribir código, se realiza una extensa documentación de los requisitos y el diseño.

Revisiones y Aprobaciones: Al final de cada fase, el trabajo realizado se revisa y debe ser aprobado antes de pasar a la siguiente etapa.

Las Fases del Modelo en Cascada incluyen:

  • Análisis de Requisitos: Se identifican las necesidades del sistema y se documentan de manera detallada. Es la base para el diseño del sistema.
  • Diseño del Sistema y del Software: Basándose en los requisitos, se elabora una arquitectura de cómo el software funcionará internamente y en interacción con otros sistemas o con el usuario.
  • Implementación y Codificación: Los diseñadores comienzan a escribir el código del software según las especificaciones del diseño.
  • Pruebas: El software se prueba para identificar y corregir errores. Se verifica que cumpla con los requisitos especificados.
  • Despliegue: Una vez que el software ha sido probado y se considera listo, se instala o se libera para su uso.
  • Mantenimiento: Después del lanzamiento, el software entra en una fase de mantenimiento para corregir errores no identificados previamente o para realizar actualizaciones.

¿Cuáles son las Ventajas y Desventajas de este modelo de programación?:

Ventajas:
  • Predecible: Las etapas y resultados están claramente definidos, lo que facilita la planificación y el presupuesto.
  • Estructura: La metodología en cascada es fácil de entender y seguir, especialmente para proyectos simples y pequeños.
Desventajas:
  • Rigidez: La dificultad para volver a fases anteriores puede resultar en problemas si los requisitos cambian durante el desarrollo.
  • Retrasos en la Prueba: Las pruebas se realizan al final del ciclo de vida, lo que puede resultar en la detección tardía de errores fundamentales.
  • Dificultad con Requisitos Complejos o Cambiantes: No es ideal para proyectos donde los requisitos no están bien definidos desde el principio o son propensos a cambiar.
Aunque el modelo en cascada ha sido criticado por su rigidez y por no adaptarse bien a los proyectos donde los requisitos son inciertos o cambiantes, sigue siendo una metodología valiosa para ciertos tipos de proyectos con requisitos bien definidos y donde los cambios son mínimos o nulos.

Precisamente por su rigidez y como resultado de un cada vez más cambiante ambiente de operación para cualquier programa de cómputo, así como también la necesidad de incluir más dinámicos, flexibles y versátiles ambientes de ejecución, es por lo que se buscó un enfoque diferente y obviamente un modelo de programación que pudiese cumplir con todos estos nuevos requisitos. Es entonces que nace el Modelo de Programación basado en Microservicios.

La Programación Basado en Microservicios

El modelo de programación basado en microservicios representa un enfoque arquitectónico para el desarrollo de aplicaciones. En lugar de construir una aplicación monolítica grande (o inmensa en ocasiones), el enfoque de microservicios descompone o más bien parte la aplicación en componentes más pequeños y manejables, conocidos como microservicios. Estos microservicios son independientes entre sí, cada uno ejecutando un proceso único y gestionando una parte específica de la funcionalidad de la aplicación.

A continuación enumeramos cuáles son las características principales, cómo funcionan, y las ventajas y desventajas de este modelo basado en microservicios.

Características Principales:

Desacoplamiento: Cada microservicio es independiente y responsable de una función específica dentro de la aplicación. Esto permite que se desarrollen, desplieguen, y escalen de manera independiente.

Especialización: Los microservicios se centran en una sola tarea o proceso, siguiendo el principio de responsabilidad única. Esto facilita la comprensión, el desarrollo y el mantenimiento del código.

Comunicación a través de API: Los microservicios interactúan entre sí mediante interfaces de programación de aplicaciones (APIs), generalmente sobre protocolos HTTP/HTTPS con patrones de comunicación REST o GraphQL.

Tecnología Diversa: Cada microservicio puede ser desarrollado utilizando el lenguaje de programación, base de datos, o tecnología de almacenamiento más adecuado para su función específica.

Funcionamiento:
  • Una aplicación basada en microservicios se compone de varios servicios pequeños que se comunican a través de la red.
  • Cada servicio tiene su propia base de datos y lógica de negocio, lo que permite su desarrollo y escalabilidad de manera independiente.
  • Los servicios se despliegan típicamente en contenedores, lo que facilita su replicación y gestión a través de plataformas de orquestación como Kubernetes.
Ventajas:
  • Flexibilidad Tecnológica: Permite el uso de diferentes tecnologías y lenguajes de programación según las necesidades específicas del servicio.
  • Escalabilidad: Los servicios pueden escalarse independientemente, mejorando el uso de recursos y la capacidad de respuesta ante cargas variables.
  • Resiliencia: El fallo en un microservicio no necesariamente causa un fallo en toda la aplicación, lo que mejora la disponibilidad y confiabilidad del sistema.
  • Facilita la Integración Continua y la Entrega Continua (CI/CD): La independencia de los servicios facilita la actualización, el testing y el despliegue rápido y frecuente de nuevas características.
Desventajas:
  • Complejidad de Gestión: El manejo de múltiples servicios y su intercomunicación puede resultar en una complejidad operativa significativa.
  • Consistencia de Datos: Mantener la consistencia a través de los servicios puede ser desafiante, especialmente en transacciones que abarcan múltiples servicios.
  • Latencia: La comunicación entre servicios a través de la red puede introducir latencia.
  • Sobrecarga de Desarrollo: El diseño e implementación inicial pueden requerir más trabajo comparado con una aplicación monolítica debido a la planificación de la interacción entre servicios.
El enfoque de microservicios es particularmente adecuado para aplicaciones empresariales grandes y complejas, donde la capacidad de escalar y actualizar componentes de manera independiente puede ofrecer ventajas significativas en términos de agilidad y mantenibilidad.

Queremos aquí hacer una pausa, pues como veremos más delante en esta entrada, Microservicios es un Modelo de Programación, pero los Contenedores son una manera de llevar a la práctica este modelo de programación y no por ello presentar las mismas desventajas.

¿Qué son los Contenedores?

Los contenedores son una tecnología de virtualización a nivel de sistema operativo que permite empaquetar y distribuir aplicaciones y sus dependencias de manera ligera y portátil. Cada contenedor encapsula una aplicación, junto con todas sus bibliotecas y archivos necesarios para ejecutarse, en un entorno aislado y autocontenido.

Aquí hay algunas características clave de los contenedores:

Aislamiento: Cada contenedor ejecuta su propia instancia del sistema operativo, lo que proporciona un alto grado de aislamiento y seguridad. Los contenedores comparten los recursos del sistema subyacente, como el kernel del sistema operativo, pero tienen sus propios espacios de nombres para procesos, red, almacenamiento, etc.

Portabilidad: Los contenedores son portátiles y se pueden ejecutar en cualquier entorno que admita el motor de contenedores utilizado. Esto significa que una aplicación empaquetada en un contenedor funcionará de la misma manera, independientemente de si se ejecuta en un entorno de desarrollo, pruebas o producción.

Eficiencia: Los contenedores son ligeros y rápidos de crear y destruir. Comparados con las máquinas virtuales tradicionales, que incluyen un sistema operativo completo, los contenedores comparten el núcleo del sistema operativo subyacente, lo que reduce la sobrecarga y el consumo de recursos.

Escalabilidad: Los contenedores facilitan la implementación de aplicaciones en entornos de infraestructura escalables y distribuidos. Pueden escalarse horizontalmente de manera rápida y eficiente para satisfacer las demandas cambiantes de la carga de trabajo.

Orquestación: Para gestionar y coordinar un gran número de contenedores en entornos de producción, se utilizan herramientas de orquestación de contenedores como Kubernetes, Docker Swarm o Amazon ECS. Estas herramientas permiten automatizar tareas como el despliegue, la escalabilidad, la monitorización y la recuperación ante fallos de los contenedores.

Cierto es que a la fecha en la que esta entrada fue creada, los contenedores ya no son unos completos desconocidos y el crecimiento de adopción de éstos ha sido descomunal, pero sí vale la pena (sobre todo para quienes son novatos en este tema) revisar

¿Qué SÍ son y qué NO son los Contenedores?

Qué SÍ son los contenedores:
  • Sí son entornos aislados: Los contenedores encapsulan una aplicación y todas sus dependencias en un entorno aislado del resto del sistema, lo que garantiza que funcionen de manera consistente y sin conflictos con otras aplicaciones.
  • Sí ofrecen portabilidad: Los contenedores son portátiles y pueden ejecutarse en cualquier entorno que admita el motor de contenedores utilizado, lo que facilita el desarrollo, la prueba y la implementación de aplicaciones en diferentes entornos de forma consistente.
  • Sí son eficientes: Los contenedores son ligeros y rápidos de crear y destruir, lo que los hace ideales para implementaciones rápidas y escalables de aplicaciones.
  • Sí son escalables: Los contenedores pueden escalarse horizontalmente fácilmente para satisfacer las demandas cambiantes de la carga de trabajo, lo que los hace ideales para aplicaciones en la nube y en entornos distribuidos.
Qué NO son los contenedores:
  • No son máquinas virtuales: A diferencia de las máquinas virtuales, los contenedores no incluyen un sistema operativo completo. En su lugar, comparten el kernel del sistema operativo subyacente y solo encapsulan las bibliotecas y dependencias necesarias para ejecutar la aplicación.
  • No son un reemplazo de la virtualización tradicional: Aunque los contenedores ofrecen muchas ventajas en términos de eficiencia y portabilidad, no reemplazan por completo la virtualización tradicional. Ambas tecnologías pueden coexistir y ofrecer beneficios complementarios en entornos de desarrollo y producción.
  • No son una solución de seguridad completa: Aunque los contenedores ofrecen un cierto grado de aislamiento y seguridad, no son una solución de seguridad completa por sí solos. Se deben implementar medidas adicionales, como políticas de acceso y control de seguridad, para proteger los contenedores y las aplicaciones que contienen.
MUY IMPORTANTE
Los contenedores son una herramienta poderosa para empaquetar y distribuir aplicaciones de manera eficiente y portátil, pero es importante comprender sus características y limitaciones para aprovechar al máximo su potencial.

¿Qué empresas son actualmente los más importantes e influyentes exponentes de los Contenedores?

Hay varias empresas que han sido influyentes en el desarrollo y la adopción de contenedores. Algunas de las más destacadas incluyen:

Docker, Inc.: Docker es la empresa que popularizó la tecnología de contenedores al crear la plataforma Docker. Su enfoque en la facilidad de uso y la portabilidad ayudó a impulsar la adopción masiva de contenedores en la industria de la tecnología.

Google: Google ha desempeñado un papel fundamental en el desarrollo de la tecnología de contenedores. Contribuyeron al desarrollo de Kubernetes, un sistema de orquestación de contenedores de código abierto, que se ha convertido en el estándar de facto para administrar contenedores a escala.

Red Hat: Red Hat ha sido un líder en la adopción de contenedores en el mundo empresarial. Contribuyeron al desarrollo de herramientas como Kubernetes y OpenShift, una plataforma de contenedores empresariales basada en Kubernetes.

Amazon Web Services (AWS): AWS ofrece una amplia gama de servicios de contenedores, incluyendo Amazon ECS (Elastic Container Service) y Amazon EKS (Elastic Kubernetes Service). Su infraestructura de nube escalable ha facilitado la adopción de contenedores en empresas de todos los tamaños.

Microsoft: Microsoft ha integrado el soporte para contenedores en su plataforma en la nube Azure, así como en su sistema operativo Windows Server. Han contribuido al desarrollo de herramientas como Docker Desktop for Windows y Azure Kubernetes Service (AKS).

VMware: VMware ha expandido su oferta para incluir soluciones de contenedores a través de productos como VMware Tanzu y vSphere Integrated Containers. Su experiencia en virtualización ha ayudado a las empresas a integrar contenedores en sus infraestructuras existentes.

CoreOS (ahora parte de Red Hat): CoreOS fue una empresa pionera en el desarrollo de sistemas operativos optimizados para contenedores. Su sistema operativo CoreOS Container Linux y su plataforma de orquestación de contenedores Tectonic contribuyeron al avance de la tecnología de contenedores en la industria.

Estas son solo algunas de las empresas que han desempeñado un papel importante en el desarrollo y la adopción de contenedores. Hay muchas otras organizaciones y líderes en la comunidad de código abierto que también han contribuido al éxito de esta tecnología.

¿Qué liboros y/o guías básicas hay ya disponibles para el entendimiento y aprendizaje de los Contenedores?

Aquí compartimos una lista de libros y guías básicas que pueden ser útiles para entender y aprender sobre contenedores:

"Docker Deep Dive" por Nigel Poulton: Este libro proporciona una introducción completa a Docker, desde los conceptos básicos hasta las características avanzadas. Es ideal tanto para principiantes como para usuarios experimentados.

"Kubernetes Up & Running" por Kelsey Hightower, Brendan Burns y Joe Beda: Este libro es una guía completa para comenzar con Kubernetes, la plataforma de orquestación de contenedores más popular. Cubre todo, desde los fundamentos hasta la implementación y la administración en producción.

"Docker in Action" por Jeff Nickoloff: Este libro cubre los conceptos básicos de Docker y cómo se puede utilizar para empaquetar, distribuir y ejecutar aplicaciones de manera eficiente. Proporciona ejemplos prácticos y consejos para trabajar con Docker en entornos reales.

"Containerization with Docker" por Russ McKendrick: Este libro es una guía práctica para comenzar con Docker, cubriendo temas como la instalación, la creación de imágenes de contenedores y la administración de contenedores en producción.

"The Kubernetes Book" por Nigel Poulton: Este libro es una guía detallada para comprender y trabajar con Kubernetes. Cubre desde los conceptos básicos hasta las prácticas recomendadas para implementar y administrar aplicaciones en Kubernetes.

"Learn Docker - Fundamentals of Docker 19.x" por Gabriel N. Schenker: Este libro es una introducción práctica a Docker, diseñada para aquellos que están comenzando con la tecnología de contenedores. Cubre los fundamentos y proporciona ejemplos paso a paso para comenzar a trabajar con Docker.

Documentación oficial de Docker y Kubernetes: Ambas comunidades ofrecen una amplia documentación en línea que cubre todos los aspectos de sus respectivas tecnologías. Estas guías son una excelente fuente de información para aprender sobre contenedores.

¿Qué debe de incluír un programa de estudios para una capacitación y formación completa en los Contenedores?

¿Desea ir más allá de lo que ofrecen los libros y la documentación? Entonces al parecer es necesario tomar un curso. ¿Qué debe de incluír un programa de estudios para una capacitación y formación completa en los Contenedores?

Un programa de estudios completo para la capacitación y formación en contenedores debe incluir una variedad de temas que cubran desde los fundamentos básicos hasta los aspectos más avanzados de la tecnología. Aquí hay una propuesta de los temas que podrían incluirse en dicho programa:

Introducción a los contenedores:
  • Definición de contenedores y su importancia en el desarrollo de software moderno.
  • Diferencias entre contenedores y máquinas virtuales.
  • Historia y evolución de la tecnología de contenedores.
Conceptos básicos de Docker:
  • Instalación y configuración de Docker en diferentes sistemas operativos.
  • Creación y gestión de contenedores Docker.
  • Uso de imágenes de Docker y registro de Docker Hub.
  • Redes y almacenamiento en Docker.
Orquestación de contenedores con Kubernetes:
  • Introducción a Kubernetes y su arquitectura.
  • Instalación y configuración de un clúster de Kubernetes.
  • Despliegue y escalado de aplicaciones en Kubernetes.
  • Gestión de recursos y monitoreo en Kubernetes.
Desarrollo de aplicaciones basadas en contenedores:
  • Desarrollo de aplicaciones utilizando Docker y Docker Compose.
  • Uso de Docker en entornos de desarrollo local y en la nube.
  • Integración de contenedores en pipelines de integración continua/despliegue continuo (CI/CD).
Seguridad y buenas prácticas en contenedores:
  • Principios de seguridad en contenedores.
  • Mejores prácticas para la creación de imágenes seguras.
  • Configuración de políticas de acceso y control de seguridad en Kubernetes.
Optimización y rendimiento de contenedores:
  • Estrategias para optimizar el tamaño y el rendimiento de las imágenes de Docker.
  • Configuración de recursos y límites en contenedores.
  • Estrategias de almacenamiento y gestión de datos en contenedores.
Casos de uso y estudios de casos:
  • Aplicaciones de contenedores en diferentes industrias y sectores.
  • Estudios de casos de empresas que han adoptado contenedores con éxito.
  • Prácticas recomendadas y lecciones aprendidas de implementaciones reales.
Este es solo un ejemplo de los temas que podrían incluirse en un programa de estudios completo sobre contenedores. Es importante adaptar el contenido según las necesidades y el nivel de conocimiento de los estudiantes, así como incorporar ejercicios prácticos y proyectos para reforzar los conceptos aprendidos.

¿Qué alternativas existen en línea, para el aprendizaje, formación y capacitación en Contenedores?

Plataformas de cursos en línea:
  • Udemy: Ofrece una amplia variedad de cursos sobre Docker, Kubernetes y contenedores en general, impartidos por instructores expertos.
  • Coursera: Tiene cursos y especializaciones en contenedores ofrecidos por universidades y empresas líderes en tecnología.
  • LinkedIn Learning: Ofrece una amplia gama de cursos y tutoriales sobre Docker, Kubernetes y desarrollo de contenedores.
  • Pluralsight: Tiene cursos especializados en contenedores y orquestación de contenedores, diseñados para profesionales de la tecnología.
  • edX: Ofrece cursos en línea gratuitos y de pago sobre contenedores, impartidos por universidades y organizaciones académicas.
Recursos gratuitos y de código abierto:
  • Documentación oficial de Docker y Kubernetes: Ambas comunidades ofrecen una amplia documentación en línea que cubre todos los aspectos de sus respectivas tecnologías.
  • Tutoriales y guías en blogs y sitios web: Hay muchos blogs y sitios web que ofrecen tutoriales y guías gratuitas sobre Docker, Kubernetes y contenedores en general.
  • GitHub: Hay numerosos repositorios en GitHub con ejemplos de código, proyectos y recursos de aprendizaje relacionados con contenedores.
Cursos especializados y certificaciones:
  • Certificaciones oficiales de Docker y Kubernetes: Tanto Docker como Kubernetes ofrecen programas de certificación oficial que pueden ayudar a validar tus habilidades en contenedores.
  • Cursos especializados en plataformas de capacitación en línea: Algunas plataformas ofrecen cursos específicos para la preparación de certificaciones en Docker y Kubernetes.
Comunidades y grupos de usuarios:
  • Participar en comunidades en línea, como foros, grupos de usuarios y canales de Slack relacionados con Docker y Kubernetes, puede ser una forma útil de aprender y compartir conocimientos con otros profesionales de contenedores.
¿Qué ambientes de ejecución (en máquinas físicas o virtuales) existen y cuáles son las mas recomendables para comenzar a aprender a programar y ejecutar contenedores?

Para comenzar a aprender a programar y ejecutar contenedores, es útil familiarizarse con los ambientes de ejecución que permiten manejar estas tecnologías eficientemente. La buena noticia es que podemos iniciar con herramientas relativamente sencillas que no requieren de infraestructuras complejas ni de grandes recursos de hardware. Aquí algunos de los entornos más populares y accesibles:

1. Docker
Docker es la plataforma de contenedores más popular y un excelente punto de partida para aprender sobre contenedores. Permite crear, desplegar y manejar contenedores de manera sencilla y eficiente. Docker puede ejecutarse tanto en máquinas físicas como virtuales y es compatible con múltiples sistemas operativos, incluyendo Linux, macOS y Windows. Para quienes inician, Docker ofrece una curva de aprendizaje amigable y una gran cantidad de documentación y recursos de aprendizaje.

2. Kubernetes
Aunque Kubernetes es más un sistema de orquestación de contenedores que un ambiente de ejecución per se, aprender a usarlo después de Docker es un paso natural. Kubernetes te permite manejar aplicaciones contenerizadas a gran escala. Es más complejo que Docker en términos de curva de aprendizaje, pero también es muy poderoso y ampliamente utilizado en la industria. Minikube es una herramienta que te permite ejecutar Kubernetes localmente en tu máquina (física o virtual), simplificando el proceso de aprendizaje y experimentación con Kubernetes.

3. Play with Docker (PWD)
Play with Docker es una herramienta en línea que proporciona un entorno Docker gratuito, accesible directamente desde tu navegador. Es una opción excelente para experimentar con Docker sin necesidad de instalar nada en tu máquina. Aunque no sustituye la experiencia de trabajar con Docker localmente, es una forma rápida de empezar a aprender y experimentar con contenedores.

4. Katacoda
Katacoda es una plataforma de aprendizaje interactivo que ofrece escenarios gratuitos y tutoriales en vivo para tecnologías como Docker y Kubernetes. Katacoda ejecuta contenedores y ambientes de orquestación directamente en tu navegador, lo que permite aprender y experimentar sin configuraciones complejas.

Recomendaciones para Principiantes
Para los principiantes, empezar con Docker en una máquina local es altamente recomendable. Esto se debe a que Docker simplifica muchos de los conceptos fundamentales de los contenedores y tiene una comunidad de soporte extensa. Una vez que te sientas cómodo con Docker, avanzar hacia Kubernetes utilizando Minikube o incluso Katacoda para experimentar sin necesidad de un entorno de hardware dedicado puede ser el siguiente paso lógico.

¿Qué Sistemas Operativos son más recomendables para ejecutar Contenedores?

Los contenedores son una tecnología que se ejecuta en sistemas operativos basados en Linux, por lo que cualquier distribución Linux es adecuada para ejecutar contenedores. Sin embargo, algunos sistemas operativos han sido diseñados específicamente con contenedores en mente y ofrecen características adicionales para administrar y desplegar contenedores de manera más eficiente. Aquí hay algunas opciones recomendadas:

Ubuntu: Es una de las distribuciones Linux más populares y ampliamente utilizadas para ejecutar contenedores. Es fácil de instalar, tiene una amplia base de usuarios y cuenta con una gran cantidad de documentación y soporte disponible.

Fedora CoreOS: Es una distribución de Linux optimizada para ejecutar contenedores en entornos de producción. Está diseñada para ser segura, estable y fácil de administrar, con actualizaciones automáticas y soporte nativo para Kubernetes.

Red Hat Enterprise Linux (RHEL): Es una distribución de Linux empresarial con soporte comercial proporcionado por Red Hat. Ofrece características avanzadas de seguridad y administración, así como soporte a largo plazo para entornos críticos.

CentOS: Es una distribución de Linux de código abierto basada en el código fuente de RHEL. Es una opción popular para entornos de servidor debido a su estabilidad y compatibilidad con aplicaciones empresariales.

Debian: Es una distribución de Linux conocida por su estabilidad y seguridad. Es una opción sólida para ejecutar contenedores, especialmente si prefieres un enfoque más conservador y de código abierto.

Arch Linux: Es una distribución de Linux para usuarios avanzados que prefieren construir su sistema desde cero. Si estás dispuesto a configurar tu sistema manualmente, Arch Linux puede ser una opción interesante para ejecutar contenedores.

¿Qué Lenguaje de Programación puedo utilizar para programar contenedores?

La belleza de los contenedores es que permiten empaquetar y ejecutar aplicaciones de manera consistente a través de diferentes entornos, independientemente del lenguaje de programación en que estas estén escritas. Esto significa que podemos utilizar prácticamente cualquier lenguaje de programación para desarrollar tu aplicación antes de contenerizarla. La elección del lenguaje dependerá de preferencias personales, requisitos del proyecto y el ecosistema del lenguaje. Algunos de los lenguajes de programación más comunes utilizados para desarrollar aplicaciones en contenedores incluyen:

Python: Gracias a su simplicidad y legibilidad, junto con una vasta biblioteca de módulos de terceros, Python es un favorito para el desarrollo de aplicaciones web, automatización, análisis de datos, aprendizaje automático, y más.

JavaScript (Node.js): Permite ejecutar JavaScript en el lado del servidor, lo que lo hace ideal para construir aplicaciones web escalables y en tiempo real. La popularidad de JavaScript y el ecosistema NPM ofrecen una gran flexibilidad para el desarrollo de aplicaciones modernas.

Go (Golang): Conocido por su simplicidad, eficiencia y soporte nativo para la concurrencia. Es ampliamente utilizado en el ecosistema de contenedores y microservicios, especialmente porque herramientas como Docker y Kubernetes están escritas en Go.

Java: Sigue siendo popular en entornos empresariales debido a su robustez, escalabilidad y vasto ecosistema. Las aplicaciones Java pueden ser fácilmente contenerizadas y desplegadas en cualquier entorno.

Ruby: En particular el framework Ruby on Rails, es una excelente opción para el desarrollo rápido de aplicaciones web. Aunque ha disminuido en popularidad frente a otros lenguajes más nuevos, sigue siendo una opción sólida para muchos proyectos.

.NET (C#): Con la evolución de .NET Core, las aplicaciones .NET pueden ejecutarse en Linux y contenerizarse fácilmente. Esto hace que C# sea una opción atractiva para el desarrollo de aplicaciones web, servicios, y aplicaciones de escritorio.

Rust: Está ganando popularidad debido a su enfoque en la seguridad y el rendimiento. Es una buena opción para sistemas y aplicaciones donde la eficiencia y la seguridad son críticas.

¿Cuáles son los pasos a seguir para armar un laboratorio casero para aprender a programar y probar contenedores?

1. Definamos Objetivos
Antes de comenzar, es importante saber qué se quiere lograr. Esto puede incluir aprender un lenguaje de programación específico, entender cómo funcionan los contenedores o desarrollar una aplicación concreta.

2. Eligir y Preparar el Hardware
Casi cualquier computadora moderna puede ser adecuada para trabajar con contenedores. Sin embargo, asegurémonos de tener suficiente memoria RAM (8 GB es un buen punto de partida, aunque 16 GB es ideal) y espacio en disco para las imágenes de los contenedores y los contenedores mismos.

3. Instalar un Sistema Operativo Compatible
Los sistemas operativos basados en Linux son ampliamente considerados como los más adecuados para el trabajo con contenedores, aunque Windows y macOS también soportan herramientas de contenedorización como Docker. Si está instalado Linux como Sistema Operativo por defecto, podemos instalarlo en una máquina virtual o usar una dual boot setup.

4. Instalar Docker o una Plataforma de Contenedores Similar
Docker es la plataforma de contenedorización más popular. Su instalación es sencilla y está bien documentada en su sitio web oficial. Otras opciones incluyen Podman, que es un daemon-less y se presenta como una alternativa a Docker.
  • Para Linux: Encontraremos instrucciones específicas para la distribución en la documentación oficial de Docker.
  • Para Windows y macOS: Docker Desktop es la opción recomendada. Hay que asegurarse de cumplir con los requisitos del sistema.
5. Aprender los Fundamentos de Docker y la Contenedorización
Antes de empezar a programar, es crucial entender los conceptos básicos de Docker y cómo funcionan los contenedores. Esto incluye imágenes de contenedores, contenedores, Dockerfiles, volúmenes, redes y el registro de Docker. Hay muchos cursos y tutoriales gratuitos disponibles en línea.

6. Eligir un Editor de Código o IDE
Es mejor utilizar un editor de código o un entorno de desarrollo integrado (IDE) que sea cómodo. Visual Studio Code, por ejemplo, es una opción popular y gratuita que soporta una amplia gama de lenguajes de programación y tiene extensiones para trabajar con Docker.

7. Comenzar con Proyectos Simples
Practicar creando imágenes de contenedores para aplicaciones sencillas en el lenguaje de programación de nuestra elección. Un proyecto típico de iniciación puede ser contenerizar una aplicación web básica o una API.

8. Experimentar con Orquestación de Contenedores
Una vez que estemos cómodo trabajando con contenedores individuales, consideremos aprender sobre orquestación de contenedores usando herramientas como Docker Compose en un inicio, seguido de Kubernetes para escenarios más complejos.

9. Participa en la Comunidad
Unirse a comunidades en línea, como foros de Docker, GitHub, o Stack Overflow, puede proporcionar soporte, nuevos conocimientos y oportunidades para resolver problemas reales de otros usuarios.

10. Mantén la Curiosidad y Continúa Aprendiendo
El campo de la contenedorización y la infraestructura como código está en constante evolución. Hay que mantenerse actualizado con las últimas tendencias, herramientas y mejores prácticas.

Si buscamos soluciones más enfocadas en ambientes de producción o en simulación de ambientes de producción, herramientas como Minikube (para Kubernetes) o Rancher Desktop pueden ser alternativas interesantes. Estas herramientas permiten gestionar clústeres de Kubernetes en una máquina local y están más orientadas hacia pruebas de orquestación y manejo a escala de contenedores.

Hablando concretamente de Minikube, es una herramienta que facilita la ejecución de Kubernetes localmente en la computadora de escritorio o la laptop. Está diseñada para desarrolladores o entusiastas de Kubernetes que desean experimentar o desarrollar con Kubernetes sin necesidad de desplegar un clúster de Kubernetes completo en la nube o en un entorno de servidor dedicado.

Características Principales de Minikube:
  • Sencillez: Minikube inicia un clúster de Kubernetes de un solo nodo dentro de una máquina virtual (VM) en la máquina de escritorio o la laptop, lo que hace que sea fácil de instalar y ejecutar.
  • Compatibilidad: Funciona en sistemas operativos Linux, Windows y macOS.
  • Flexibilidad: Soporta diversas herramientas de virtualización, incluyendo VirtualBox, KVM, HyperKit, y más. También puede ejecutarse directamente en contenedores Docker si preferimos evitar usar una VM.
  • Desarrollo Local: Proporciona un entorno ideal para aprender Kubernetes y experimentar con contenedores sin incurrir en costos de infraestructura de nube.
  • Herramientas de Desarrollo: Minikube incluye características útiles para el desarrollo, como un Dashboard de Kubernetes, soporte para carga de configuración y volúmenes persistentes, y la capacidad de emular redes y condiciones de entorno específicas.
Cómo Funciona Minikube:
Al ejecutar Minikube, este crea y configura una máquina virtual que corre una distribución ligera de Linux. Dentro de esta VM, se inicia un clúster de Kubernetes de un solo nodo, permitiéndote desplegar y gestionar contenedores usando Kubernetes en tu máquina local.

Usos de Minikube:
  • Aprendizaje de Kubernetes: Por ser un clúster de Kubernetes real, aunque sea de un solo nodo, Minikube es una excelente herramienta para aprender cómo funciona Kubernetes y cómo se despliegan y gestionan las aplicaciones en él.
  • Desarrollo de Aplicaciones: Los desarrolladores pueden usar Minikube para desarrollar y probar aplicaciones en un entorno de Kubernetes local antes de desplegarlas en un entorno de producción o en la nube.
  • Pruebas de Integración y Funcionalidad: Permite a los equipos de desarrollo probar nuevas características, configuraciones, y más, en un entorno controlado y fácilmente reproducible.
Inicio con Minikube:
Para empezar con Minikube, necesitamos instalarlo en nuestra máquina. La documentación oficial de Minikube proporciona instrucciones detalladas de instalación y uso para diferentes sistemas operativos. Una vez instalado, podemos iniciar tu clúster de Kubernetes con el comando minikube start y comenzar a experimentar con Kubernetes de manera local.

Conclusión

Aún queda mucho material que podríamos compartir en esta entrada, pero recomendamos más bien comenzar con todo lo que hemos incluido aquí y que sea su experiencia en particular la que dicte cuáles serían los siguientes pasos.

¿Está Usted listo para comenzar con los contenedores?

miércoles, 8 de septiembre de 2021

¿Qué es Edge Computing?

 A modo de antecedente y haciendo referencia a una entrada algo antigua de este mismo Blog intitulada "Motivadores de la Transformación Digital en el 2018", la mejor manera de entender la Transformación Digital y sus inmensos alcances, es entender y poner foco en tecnologías y desarrollos relacionados que son las que la pueden hacer realidad.

Existen pues ya identificadas dieciséis tecnologías que apuntalan la Transformación Digital. Doce de ellas ya están impactando nuestras vidas a corto y mediano plazo, mientras que las restantes doce lo harán en un largo plazo no mayor a doce años.

Las primeras doce tecnologías con impacto a corto plazo son:

  • Cómputo en La Nube (de la Tercera Plataforma)
  • Big Data (de la Tercera Plataforma)
  • Blockchain (de la Cuarta Revolución Industrial)
  • Realidad Virtual (de la Cuarta Revolución Industrial)
  • Realidad Aumentada (de la Cuarta Revolución Industrial)
  • Internet de las Cosas (de la Cuarta Revolución Industrial)
  • Inteligencia Artificial (de la Cuarta Revolución Industrial)
  • Vehículos Autónomos (de la Cuarta Revolución Industrial)
  • Robots (desde la Tercera Revolución Industrial)
  • Fábricas Oscuras  (de la Cuarta Revolución Industrial)
  • Impresión 3D (de la Cuarta Revolución Industrial)
  • Biología Sintética (de la Cuarta Revolución Industrial)

Las otras cuatro tecnologías con impacto a largo plazo son:

  • Auto Ensamble Molecular 
  • Cómputo Cuántico
  • Cómputo Orgánico
  • Interfaces Cibernéticas

Es en el rubro de la Internet de las Cosas, parte de la Cuarta Revolución Industrial, de donde se desprende este concepto llamado Edge Computing. Pero ¿qué es el Edge Computing? Podemos definirlo como -"...un tipo de informática que ocurre en la ubicación física del usuario, de la fuente de datos o cerca de ellas."-

Hoy más que nunca sabemos que toda solución que ofrezca el área de Tecnologías de la Información a los Usuarios, debe propiciar que estos los obtengan más rápidos y de manera cada vez más confiables. Con esto también las empresas pueden aprovechar la flexibilidad del cloud computing híbrido. Con el edge computing, las empresas pueden usar y distribuir un conjunto común de recursos en una gran cantidad de ubicaciones.

¿Cómo utilizan las empresas el edge computing con los centros de datos y la nube pública?

El edge computing debe de verse como una estrategia que permita extender un entorno uniforme desde el centro de datos principal, hasta las ubicaciones físicas cercanas a los usuarios y a los datos. Así como una estrategia de nube híbrida permite que las empresas ejecuten las mismas cargas de trabajo tanto en sus propios centros de datos como en una infraestructura de nube pública (por ejemplo: Amazon Web Services, Microsoft Azure o Google Cloud), una estrategia de edge computing amplía el entorno de nube a muchas más ubicaciones.

En la actualidad, el edge computing se utiliza en muchos sectores, como las telecomunicaciones, la producción, el transporte y los servicios públicos, entre otros. Las razones por las que se implementa esta tecnología son tan variadas como las empresas que la utilizan.

Algunos casos prácticos comunes de edge computing

Muchos casos prácticos de edge computing surgen de la necesidad de procesar datos de manera local e inmediata, porque si se transmiten a un centro para procesarlos, se generan niveles de latencia inaceptables.

Un claro ejemplo de esto puede ser una planta de fabricación moderna. En las fábricas, los sensores del Internet de las cosas (IoT) generan un flujo constante de datos que pueden utilizarse para prevenir averías y mejorar las operaciones. Según una estimación, una planta moderna con 2000 equipos puede generar 2200 terabytes de datos al mes. Es más rápido, y más rentable, procesar ese cúmulo de datos cerca de los equipos, en lugar de transmitirlos primero a un centro de datos remoto. Sin embargo, es mejor si los equipos están conectados a través de una plataforma de datos centralizada. De esa manera, por ejemplo, los equipos pueden recibir actualizaciones de software estandarizadas y compartir los datos filtrados que pueden ayudar a mejorar las operaciones en otras ubicaciones de la fábrica.

Los vehículos conectados son otro ejemplo común de edge computing. Los autobuses y los trenes cuentan con computadoras para realizar un seguimiento del flujo de los pasajeros y de la prestación del servicio. Los transportistas pueden aprovechar la tecnología integrada a sus vehículos para encontrar las rutas más eficientes. Cuando se implementa mediante una estrategia de edge computing, cada vehículo ejecuta la misma plataforma estandarizada que el resto de la flota, lo cual vuelve más confiables los servicios y garantiza la protección uniforme de los datos.

Los vehículos autónomos son otro claro ejemplo de edge computing, ya que implican el procesamiento inmediato de una gran cantidad de información en contextos donde la conectividad puede ser poco estable. Como la cantidad de datos que reciben los vehículos autónomos de los sensores es enorme, estos se encargan de procesarlos a bordo del vehículo, lo cual ayuda a reducir la latencia. Sin embargo, también pueden conectarse a una ubicación central para recibir actualizaciones de software inalámbricas.

El edge computing también ayuda a que los servicios populares de Internet funcionen con rapidez. Las redes de distribución de contenido (Content Distribution Networks o CDN) implementan servidores de datos cerca de los usuarios, lo cual permite que los sitios web más concurridos se carguen rápidamente y que se agilicen los servicios de transmisión de video.

Otro ejemplo de edge computing es lo que sucede en las antenas de telefonía móvil 5G cercanas. Cada vez es más común que los proveedores de telecomunicaciones ejecuten sus redes con la virtualización de las funciones de red (Networking Function Virtualization o NFV), para lo cual utilizan máquinas virtuales que se ejecutan en sistemas de hardware estándar en el extremo de la red. Estas máquinas virtuales pueden reemplazar a los costosos equipos propietarios. Una estrategia de edge computing permite que los proveedores ejecuten el sistema de software en decenas de miles de ubicaciones remotas, sin sacrificar la uniformidad ni el cumplimiento con los estándares de seguridad. Las aplicaciones que se ejecutan cerca del usuario final en una red móvil también reducen la latencia y permiten que los proveedores ofrezcan servicios nuevos.

¿Cuáles son las ventajas del edge computing?

Con el edge computing, se pueden obtener servicios más rápidos y estables a menor costo. Para los usuarios, significa una experiencia más rápida y uniforme. Para las empresas y los proveedores de servicios, se traduce en aplicaciones de baja latencia y alta disponibilidad con supervisión permanente.

El edge computing puede disminuir los costos de red, evitar las restricciones de ancho de banda, reducir las demoras en la transmisión, limitar la cantidad de errores del servicio y controlar mejor la transferencia de los datos confidenciales. Los tiempos de carga se reducen. Además, los servicios en línea que se implementan más cerca de los usuarios habilitan las funciones de almacenamiento en caché tanto dinámico como estático.

Esta estrategia también beneficia a las aplicaciones que necesitan menores tiempos de respuesta, como las de realidad aumentada y virtual.

Otras ventajas del edge computing incluyen la capacidad para agregar y analizar el big data en las instalaciones, lo cual permite tomar decisiones casi inmediatas. El edge computing reduce aún más el riesgo de permitir el acceso a los datos confidenciales, ya que mantiene toda esa potencia informática en un lugar cercano. Gracias a ello, las empresas pueden aplicar las prácticas de seguridad o cumplir con las políticas normativas.

Los clientes empresariales aprovechan la flexibilidad y los costos relacionados con el edge computing. Al mantener la potencia informática en un lugar cercano, las ubicaciones regionales pueden seguir funcionando independientemente del sitio central, incluso si este último deja de funcionar. Además, al mantener la potencia de procesamiento informático más cerca de su fuente, se reduce considerablemente el costo que debe pagar por el ancho de banda para trasladar los datos de un lado a otro entre los sitios regionales y centrales.

Una plataforma de edge computing aporta uniformidad a las operaciones y al desarrollo de las aplicaciones. A diferencia de los centros de datos, debe admitir la interoperabilidad entre una mayor cantidad de entornos de hardware y software. Una estrategia de edge computing eficaz también permite que los productos de varios proveedores funcionen juntos en un ecosistema abierto.

  • Sistema principal de la empresa o del proveedor: se trata de los niveles tradicionales "que no se encuentran en el extremo de la red", los cuales pertenecen a los proveedores de nube pública, los proveedores de servicios de telecomunicaciones o las grandes empresas, y que son operados por ellos.

  • Extremo del proveedor de servicios: estos niveles se encuentran entre los centros de datos principales o regionales y el último tramo de la red. Por lo general, pertenecen a empresas de telecomunicaciones o proveedores de servicios de Internet, quienes también suelen gestionarlos. Además, desde aquí el proveedor presta sus servicios a varios clientes.

  • Extremo de las instalaciones del usuario final: estos niveles de edge computing de último tramo de la red pueden incluir el edge computing de las empresas (por ejemplo, una tienda minorista, una fábrica, un tren) o de los consumidores (por ejemplo, una vivienda, un automóvil).

  • Extremo del dispositivo: sistemas independientes (no agrupados en clústeres) que conectan directamente los sensores o activadores a través de protocolos que no son de Internet. Esto representa el extremo más alejado de la red.

Edge computing, análisis de datos, inteligencia artificial y aprendizaje automático

El edge computing puede contribuir al éxito de las aplicaciones inteligentes que utilizan muchos datos, en especial por su énfasis en la recopilación de datos y la informática en tiempo real. Por ejemplo, las tareas de inteligencia artificial y aprendizaje automático (IA/ML), como los algoritmos de reconocimiento de imágenes, pueden ejecutarse de forma más eficiente cerca de la fuente, lo cual elimina la necesidad de trasladar grandes cantidades de datos a un entorno centralizado.

Lo que hacen estas aplicaciones es utilizar muchas combinaciones de datos para inferir información relevante que ayude a las empresas a tomar mejores decisiones. Esta función puede mejorar muchas de las interacciones empresariales, como las experiencias de los clientes, el mantenimiento preventivo, la prevención de fraudes y la toma de decisiones clínicas, entre muchas otras.

Las empresas que tratan los datos de entrada como eventos pueden aplicar las técnicas de inferencia de IA/ML y de gestión de decisiones para filtrar, procesar, clasificar y combinar los eventos y, así, deducir información más relevante.

Las aplicaciones que utilizan muchos datos se pueden dividir en una serie de etapas, cada una de las cuales se lleva a cabo en diferentes partes del entorno informático. El edge computing interviene en la etapa de incorporación de los datos, es decir, el momento de su recopilación, análisis preliminar y traslado. Los datos pasan por las etapas de ingeniería y análisis, por lo general en un entorno de nube pública o privada, para almacenarse, transformarse y, posteriormente, utilizarse en el entrenamiento de modelos de aprendizaje automático. Luego, regresan nuevamente al extremo de la red para la etapa de inferencia del tiempo de ejecución, donde se lleva a cabo la implementación y supervisión de los modelos de aprendizaje automático.

Para satisfacer las diferentes necesidades y ofrecer una conexión entre las diversas etapas, se requiere una plataforma de desarrollo de aplicaciones e infraestructura flexible y adaptable.

Un enfoque de nube híbrida, que proporciona una experiencia uniforme en las nubes públicas y privadas, ofrece la flexibilidad necesaria para implementar de forma óptima las cargas de trabajo de captura de datos e inferencia inteligente en el extremo de un entorno; además, brinda las cargas de trabajo de capacitación y procesamiento de datos que utilizan muchos recursos en los entornos de nube; y también proporciona los sistemas de gestión de la información y eventos empresariales cerca de las personas que utilizan los sistemas en la empresa.

El edge computing es una parte fundamental del concepto de nube híbrida que ofrece una experiencia uniforme en torno a las operaciones y las aplicaciones.

El edge computing y las telecomunicaciones

Para muchos de los proveedores de servicios de telecomunicaciones, la adopción del edge computing se vuelve una prioridad, a medida que trasladan las cargas de trabajo y los servicios hacia el extremo de la red.

Cuando se trabaja con aplicaciones con mucha demanda de la red, como las llamadas de voz y video, cada milisegundo cuenta. Dado que el edge computing permite reducir considerablemente los efectos de la latencia, los proveedores de servicios pueden ofrecer nuevas aplicaciones y servicios que mejoran las experiencias actuales, sobre todo tras los avances en la tecnología 5G.

Sin embargo, no se trata solo de ofrecer nuevos servicios. Los proveedores recurren a las estrategias de edge computing para simplificar las operaciones de red y aumentar la flexibilidad, la disponibilidad, la eficiencia, la fiabilidad y la capacidad de ajuste.

¿Qué es la NFV?

La virtualización de las funciones de red (NFV) consiste en aplicar la virtualización de la TI al caso práctico de las funciones de red. Además, permite utilizar servidores estándar para funciones que antes requerían un hardware propietario costoso. 

¿Qué es la vRAN?

Las redes de acceso por radio (RAN) son puntos de conexión entre los dispositivos de los usuarios finales y el resto de la red de algún operador. Tanto las funciones de red como las RAN se pueden virtualizar, lo que da lugar a la red de acceso por radio virtual, o vRAN.

La implementación continua de las redes 5G suele depender de las vRAN, como una forma de simplificar las operaciones, prestar servicios a más dispositivos y satisfacer las necesidades de las aplicaciones más exigentes.

¿Qué es la MEC?

MEC significa "edge computing multiacceso" y es la manera que tienen los proveedores de servicios para ofrecer a los clientes un entorno de servicios de aplicaciones en el extremo de la red, muy cerca de los dispositivos móviles de los usuarios.

Entre las ventajas de esta arquitectura se incluyen el aumento del rendimiento y la reducción de la latencia. La MEC pone ciertos puntos de conexión a disposición de los desarrolladores de aplicaciones y los proveedores de contenido, lo cual les permite acceder también a las funciones de red inferiores y al procesamiento de la información.

La relación entre el edge computing y el cloud computing

El cloud computing es la ejecución de las cargas de trabajo en las nubes, las cuales son entornos de TI que extraen, agrupan y comparten recursos flexibles en una red. 

Tradicionalmente, el cloud computing se ha enfocado en centralizar los servicios de nube en un grupo de centros de datos grandes. Este proceso permitió que se pudieran ampliar y compartir los recursos con mayor eficiencia, sin perder el control ni la seguridad empresarial.

El edge computing se encarga de los casos prácticos que no se pueden abordar de forma adecuada con el enfoque de centralización del cloud computing, generalmente debido a los requisitos de red u otras restricciones.

Además, el modelo de edge computing se complementa con una estrategia de nube que consiste en ejecutar los sistemas de software en contenedores, los cuales ofrecen portabilidad a las aplicaciones, es decir, permiten que las empresas las ejecuten donde les resulte más conveniente. Con una estrategia de organización en contenedores, las empresas pueden trasladar las aplicaciones del centro de datos al extremo de la red, o viceversa, sin que esto afecte el rendimiento operativo.

¿Qué son los dispositivos de edge computing y en qué consiste el IoT?

El Internet de las cosas (IoT) es el proceso que permite conectar elementos físicos cotidianos al Internet: desde objetos domésticos comunes, como las bombillas, hasta recursos para la atención de la salud, como los dispositivos médicos; también incluye prendas y artículos personales, como los relojes inteligentes, e incluso los semáforos en ciudades inteligentes.

Los dispositivos del IoT no son necesariamente dispositivos de edge computing, pero conectados forman parte de las estrategias de edge computing de muchas empresas. El edge computing puede proporcionar mayor potencia informática en los extremos de una red de IoT, para reducir la latencia de comunicación entre los dispositivos de IoT y las redes de TI centrales a las que se conectan.

El simple hecho de enviar o recibir datos es lo que marcó la llegada del IoT. Sin embargo, el edge computing dio lugar a un enfoque más moderno que consiste en el envío, la recepción y el análisis de datos junto con las aplicaciones de IoT.

¿Qué es el Internet de las cosas industrial?

El Internet de las cosas Industrial (Industrial Internet of Things o IIoT) es un concepto utilizado para describir los equipos industriales que se conectan al Internet, como la maquinaria de las plantas de producción, las instalaciones agrícolas o las cadenas de suministro.

¿Qué es el fog computing y cómo se relaciona con el edge computing?

El término Fog computing se utiliza para la informática que tiene lugar en las ubicaciones físicas distribuidas, más cerca de los usuarios y las fuentes de datos. 

Es un sinónimo de edge computing. La única diferencia entre estos dos términos es la terminología.

¿Cuáles son los desafíos del edge computing?

El edge computing puede simplificar un entorno de TI distribuido, pero su infraestructura no siempre es fácil de implementar y gestionar.

  • Incorporar servidores de edge computing a varias ubicaciones pequeñas puede ser más complejo que aumentar la capacidad equivalente en un solo centro de datos principal. Las empresas de menor envergadura pueden tener dificultades a la hora de gestionar el aumento de los costos de las ubicaciones físicas.

  • Por lo general, los sitios de edge computing se encuentran en lugares remotos y no cuentan con la experiencia técnica suficiente en el lugar. Si se produce algún error en las instalaciones, debe tener una infraestructura que los empleados locales sin experiencia técnica puedan reparar con facilidad. Además, un pequeño grupo de especialistas ubicados en otro lugar debe poder gestionarla de manera centralizada.

  • Es necesario que las operaciones de gestión del sitio se puedan replicar en todos los sitios de edge computing, para simplificar la gestión y facilitar la resolución de problemas. Los desafíos surgen cuando el software se implementa de distintas formas en cada sitio.

  • La seguridad física de los sitios de edge computing suele ser mucho menor que la de los entornos centrales. Al implementar una estrategia de edge computing es necesario considerar un mayor riesgo de situaciones maliciosas o accidentales.

A medida que las fuentes y el almacenamiento de datos se distribuyen en muchas ubicaciones, las empresas necesitan una infraestructura horizontal común que abarque toda su infraestructura de TI, lo cual incluye los sitios en el extremo de la red. El edge computing presenta desafíos de infraestructura únicos, incluso para las empresas que suelen operar en varias ubicaciones geográficas. Las empresas necesitan soluciones de edge computing que:
  • Se puedan gestionar con las mismas herramientas y procesos que su infraestructura centralizada. Esto incluye la automatización de la preparación, la gestión y la organización de cientos y a veces decenas de miles de sitios con muy poco personal de TI, si es que lo hay. 

  • Satisfagan las necesidades de los distintos niveles del edge computing que tienen diferentes requisitos, como el tamaño del espacio del hardware, los entornos complejos y el costo.

  • Ofrezcan la flexibilidad necesaria para utilizar las cargas de trabajo híbridas que consisten en máquinas virtuales, contenedores y nodos sin sistema operativo, los cuales ejecutan las funciones de red, la transmisión de video, los juegos, la inteligencia artificial y el aprendizaje automático (IA/ML) y las aplicaciones importantes para la empresa.

  • Garanticen que los sitios de edge computing sigan funcionando si se producen errores en la red. 

  • Puedan funcionar sin inconvenientes con elementos de distintos proveedores. Ningún proveedor puede ofrecer una solución completamente integral.

¿Cómo puodemos abordarel edge computing?

Debemos de pensar en varios rubros como son conectividad, integración e infraestructura como base para los servicios de los desarrolladores, las aplicaciones y las plataformas. Estos elementos fundamentales permiten que los clientes resuelvan los casos prácticos más desafiantes.

Una base que funciona

Todo comienza utilizando un Sistema Operativo confiable, seguro, escalable. Una plataforma que ofrezca un gran ecosistema de herramientas, aplicaciones, marcos y bibliotecas para poder diseñar y ejecute aplicaciones heredadas y aplicaciones contenerizadas.

Cargas de trabajo en contenedores

Si lo que busca es diseñar, implementar y gestionar aplicaciones en contenedores en cualquier infraestructura o nube (lo cual incluye centros de datos públicos y privados y ubicaciones en el extremo de la red), elija Red Hat OpenShift: un entorno de Kubernetes empresarial de alto rendimiento y centrado en los contenedores.

Cargas de trabajo informáticas de alto rendimiento y de máquinas virtuales

Es necesario contar con una Plataforma que incluya nodos informáticos distribuidos, admita las cargas de trabajo informáticas de alto rendimiento (HPC) y las de las máquinas virtuales más exigentes que cuenten con funciones como la virtualización de las funciones de red (NFV). Se trata de una solución confiable y escalable de Infraestructura como servicio (IaaS), que incluye las API estándar del sector y una arquitectura multiempresa sólida. Dicha solución deberá permitir pues gestionar de forma centralizada y uniforme, desde sus centros de datos principales hasta el extremo de la red, para trasladar fácilmente la potencia informática más cerca de la fuente de datos.

Almacenamiento

Tanto el almacenamiento como los servicios de datos cumplen una función importante en el edge computing, ya que este requiere que los datos se conserven cerca de la fuente. Es imperativo entonces que dicho almacenamiento sea permanente, convergente (para las implementaciones con un espacio más reducido) a través de una conexión con clústeres externos y centralizados. También se debe contar con  almacenamiento basado en bloques, archivos y objetos con capacidad de autorregeneración y gran capacidad de ajuste para las cargas de trabajo modernas, como el almacenamiento como servicio, el análisis de datos, la inteligencia artificial y el aprendizaje automático, y los sistemas de respaldo y restauración. Estamos hablando de una configuración hiperconvergente distribuidos en el extremo aplicable a la NFV de las telecomunicaciones, al sector de los servicios financieros y a las grandes implementaciones de tecnología para empresas minoristas.

Mensajería y comunicación

Tanto los Servidores de Aplicaciones como las Herramientas de los Desarrolladores deberán ofrecen funciones originales de la nube que permitan diseñar aplicaciones de edge computing rápidas, ligeras y flexibles con la conectividad, la transformación y la recopilación de datos necesarias para admitir este tipo de arquitecturas. En los entornos altamente distribuidos, es fundamental tener en cuenta la comunicación entre los servicios que se ejecutan en la nube y en los sitios del extremo. Las funciones de mensajería y transmisión de datos de sistemas de Messaging Queue deberá admitir diferentes patrones de comunicación que son necesarios para los casos prácticos de edge computing. Cuando la mensajería se combina con distintos tiempos de ejecución de aplicaciones creadas en la nube y la conectividad de las aplicaciones, ofrece una base sólida que permite diseñar servicios integrados de aplicaciones de edge computing, y de recopilación y transporte de datos originados en el extremo.

Conclusión

La Cuarta Plataforma, la Transformación Digital y más concretamente el Internet de las Cosas a la par del Edge Computing representan una valiosa Tecnología que su Empresa, Organización y/o Institución debe considerar a corto o mediano plazo.

miércoles, 14 de octubre de 2020

Acceso a Minikube

En esta entrada, revisaremos diferentes métodos para acceder a un Clúster de Kubernetes. Existe una variedad de clientes externos o scripts personalizados que brindan acceso al Clúster con fines administrativos. Usaremos kubectl como una herramienta de Interfaz de Línea de Comando (Command Line Interface CLI) para acceder al Clúster de Minikube Kubernetes, el panel de Kubernetes como una interfaz de usuario basada en web para interactuar con el Clúster y el comando curl con las credenciales adecuadas, para acceder al Clúster a través de una Application Programmable Interface (API).


¿Qué vamos a ver en este capítulo?
  • Revisar los métodos para acceder a Cualquier clúster de Kubernetes.
  • Configurar kubectl para Linux, macOS y Windows.
  • Acceder al Clúster de Minikube desde el Tablero o Dashboard.
  • Acceder a Minikube a través de la API.
Accediendo a Minikube

Se puede acceder a cualquier Clúster de Kubernetes que funcione correctamente a través de cualquiera de los siguientes métodos:

  • Herramientas y scripts de la Interfaz de Línea de Comandos (CLI)
  • Interfaz de usuario basada en navegador (IU web)
  • API de CLI o mediante programación
Estos métodos son aplicables a todos los clústeres de Kubernetes.

Acceso a Minikube: Interfaz de línea de comandos (CLI)

kubectl es el cliente de la Interfaz de Línea de Comandos (CLI) de Kubernetes para administrar los recursos y las aplicaciones del Clúster. Se puede utilizar de forma independiente o como parte de scripts y herramientas de automatización. Una vez que se han configurado todas las credenciales y los puntos de acceso al Clúster necesarios para kubectl, se puede utilizar de forma remota desde cualquier lugar para acceder a un Clúster.

Posteriormente usaremos kubectl para implementar aplicaciones, administrar y configurar recursos de Kubernetes.

Acceso a Minikube: interfaz de usuario basada en navegador

El panel de Kubernetes proporciona una interfaz de usuario basada en navegador para interactuar con un Clúster de Kubernetes para administrar recursos y aplicaciones en Contenedores. Posteriormente lo usaremos para implementar una aplicación en Contenedores.

Acceso a Minikube: API

Como sabemos, Kubernetes tiene el servidor API, y los operadores/usuarios se conectan a él desde el mundo externo para interactuar con el Clúster. Usando CLI y Web UI, podemos conectarnos al servidor API que se ejecuta en el Nodo Maestro para realizar diferentes operaciones. Podemos conectarnos directamente al servidor API usando sus puntos finales API y enviarle comandos, siempre que podamos acceder al nodo maestro y tener las credenciales correctas.

A continuación, podemos ver una parte del espacio de la API HTTP de Kubernetes:

Espacio de API HTTP de Kubernetes

El espacio de la API HTTP de Kubernetes se puede dividir en tres grupos independientes:

Grupo principal (/api/v1)
Este grupo incluye objetos como Pods, Servicios, nodos, espacios de nombres, mapas de configuración, secretos, etc.

Grupo nombrado
Este grupo incluye objetos en formato /apis/$NAME/$VERSION. Estas diferentes versiones de API implican diferentes niveles de estabilidad y soporte:

Nivel alfa: se puede eliminar en cualquier momento, sin previo aviso. Por ejemplo, / apis / batch / v2alpha1.

Nivel beta: está bien probado, pero la semántica de los objetos puede cambiar de formas incompatibles en una versión beta o estable posterior. Por ejemplo, /apis/certificates.k8s.io/v1beta1.Nivel estable: aparece en el software publicado para muchas versiones posteriores. Por ejemplo, /apis/networking.k8s.io/v1.

Todo el sistema: Este grupo consta de puntos finales de API de todo el sistema, como /healthz, /logs, /metrics, /ui, etc.

Podemos conectarnos a un servidor de API directamente llamando a los respectivos puntos finales de API o mediante la CLI / UI web.

A continuación, veremos cómo podemos acceder al entorno de Minikube que configuramos en el capítulo anterior.


kubectl

kubectl generalmente se instala antes de instalar Minikube, pero también podemos instalarlo después. Una vez instalado, kubectl recibe su configuración automáticamente para el acceso al Clúster de Minikube Kubernetes. Sin embargo, en otras configuraciones de Clúster de Kubernetes, es posible que debamos configurar los puntos de acceso del Clúster y los certificados que kubectl requiere para acceder al Clúster.

Existen diferentes métodos que se pueden usar para instalar kubectl, que se mencionan en la documentación de Kubernetes. Para obtener los mejores resultados, se recomienda mantener kubectl en la misma versión que Kubernetes ejecutado por Minikube; en el momento en que se escriben estas líneas, la última versión estable era la v1.14.1. A continuación, veremos algunos pasos para instalarlo en sistemas Linux, macOS y Windows.


Instalación de kubectl en Linux

Para instalar kubectl en Linux, siga las instrucciones que están a continuación:

Descargue el binario kubectl estable más reciente, hágalo ejecut'able y muévalo al PATH o RUTA:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/NOTA: Para descargar y configurar una versión específica de kubectl (como v1.14.1), ejecute el siguiente comando:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/


Installing kubectl on macOS

Hay dos formas de instalar kubectl en macOS: manualmente y usando el administrador de paquetes Homebrew. A continuación, proporcionaremos instrucciones para ambos métodos.

Para instalar kubectl manualmente, descargue el último binario estable de kubectl, hágalo ejecutable y muévalo a la RUTA con el siguiente comando:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/NOTE: To download and setup a specific version of kubectl (such as v1.14.1), issue the following command:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/To install kubectl with Homebrew package manager, issue the following command:

$ brew install kubernetes-cli


Instalación de kubectl en Windows

Para instalar kubectl, podemos descargar el binario directamente o usar curl desde la CLI. Una vez descargado, el binario debe agregarse a la RUTA.

Enlace de descarga directa para binario v1.14.1 (simplemente haga clic a continuación):https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/windows/amd64/kubectl.exeNOTA: Obtenga el último número de versión de la versión estable de kubectl en el enlace a continuación y, si es necesario, edite el enlace de descarga para el binario desde arriba:

https://storage.googleapis.com/kubernetes-release/release/stable.txtUtilice el comando curl (si está instalado) de la CLI:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/windows/amd64/kubectl.exeUna vez descargado, mueva el binario kubectl al PATH o RUTA.

Archivo de configuración de kubectl

Para acceder al Clúster de Kubernetes, el cliente de kubectl necesita el endpoint del Nodo Maestro o Principal y las credenciales adecuadas para poder interactuar con el Servidor API que se ejecuta en el Nodo Maestro o Principal. Al iniciar Minikube, el proceso de inicio crea, de forma predeterminada, un archivo de configuración "config", dentro del directorio .kube (a menudo denominado archivo dot-kube-config), que reside en el directorio de inicio del usuario.

El archivo de configuración tiene todos los detalles de conexión requeridos por kubectl. De forma predeterminada, el binario kubectl analiza este archivo para encontrar el punto final de conexión del nodo principal, junto con las credenciales. Para ver los detalles de la conexión, podemos ver el contenido del archivo ~/.kube/config (en Linux) o ejecutar el siguiente comando:

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/student/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/student/.minikube/client.crt
client-key: /home/student/.minikube/client.key

Una vez que kubectl está instalado, podemos obtener información sobre el Clúster de Minikube con el comando kubectl cluster-info:

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443//api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Puede encontrar más detalles sobre las opciones de la línea de comandos de kubectl aquí.

Aunque para el Clúster de Kubernetes instalado por Minikube el archivo ~/.kube/config se crea automáticamente, este no es el caso de los Clústeres de Kubernetes instalados por otras herramientas. En otros casos, el archivo de configuración debe crearse manualmente y, a veces, volver a configurarse para adaptarse a varias configuraciones de red y cliente/servidor.


Instalación del cliente CLI de kubectl (demostración)


Panel o Dashboard de Kubernetes

Como se mencionó anteriormente, el Panel o Dashboard de Kubernetes proporciona una interfaz de usuario basada en navedador para la administración de Clústeres de Kubernetes. Para acceder al panel desde Minikube, podemos usar el comando del Panel de Minikube, que abre una nueva pestaña en nuestro navegador web, mostrando el Panel de Kubernetes:

$ minikube dashboard

Panel de Kubernetes

NOTA: En caso de que el navegador no abra otra pestaña y no muestre el Panel de Control como se esperaba, verifique el resultado en su terminal, ya que puede mostrar un enlace para el Panel de Control (junto con algunos mensajes de error). Copie y pegue ese enlace en una nueva pestaña de su navegador. Dependiendo de las características de su terminal, es posible que pueda simplemente hacer clic o hacer clic con el botón derecho en el enlace para abrirlo directamente en el navegador. El enlace puede parecer similar a:

http://127.0.0.1:37751/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/

Lo más probable es que la única diferencia sea el número de PUERTO, que arriba es 37751. Su número de puerto puede ser diferente.

Después de cerrar sesión/iniciar sesión o reiniciar su estación de trabajo, se debería esperar el comportamiento normal (donde el comando del tablero de Minikube abre directamente una nueva pestaña en su navegador que muestra el Tablero).

El comando 'kubectl proxy'

Al emitir el comando kubectl proxy, kubectl se autentica con el servidor API en el Nodo Maestro o Principal y hace que el panel esté disponible en una URL ligeramente diferente a la anterior, esta vez en nuestro ejemplo, a través del puerto proxy 8001.

Primero, emitimos el comando kubectl proxy:

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

Bloquea el terminal mientras se ejecuta el proxy. Con el proxy en ejecución, podemos acceder al Panel de Control a través de la nueva URL (simplemente haga clic en él a continuación; debería funcionar en su estación de trabajo). Una vez que detengamos el proxy (con CTRL + C), el Panel de Control ya no será accesible.

http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard:/proxy/#!/overview?namespace=default

Panel de Kubernetes a través del proxy


API con 'kubectl proxy'

Cuando se está ejecutando el proxy kubectl, podemos enviar solicitudes a la API a través del host local en el puerto proxy 8001 (desde otro terminal, ya que el proxy bloquea el primer terminal):

$ curl http://localhost:8001/
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
......
......
"/logs",
"/metrics",
"/openapi/v2",
"/version"
]
}

Con la solicitud curl anterior, solicitamos todos los puntos finales de API del servidor de API. Al hacer clic en el enlace de arriba (en el comando curl), se abrirá la misma salida de listado en una pestaña del navegador.

Podemos explorar todas las combinaciones de rutas con curl o en un navegador, como:

http://localhost:8001/api/v1http://localhost:8001/apis/apps/v1http://localhost:8001/healthzhttp://localhost:8001/metrics

API sin 'proxy kubectl'

Cuando no usamos el proxy kubectl, necesitamos autenticarnos en el servidor API cuando enviamos solicitudes API. Podemos autenticarnos proporcionando un token de portador al emitir un curl, o proporcionando un conjunto de claves y certificados.

Un token de portador es un token de acceso que es generado por el servidor de autenticación (el servidor API en el Nodo Maestro o Principal) y devuelto al cliente. Con ese token, el cliente puede volver a conectarse al servidor de la API de Kubernetes sin proporcionar más detalles de autenticación y, luego, acceder a los recursos.

Para obtener el token:

$ TOKEN=$(kubectl describe secret -n kube-system $(kubectl get secrets -n kube-system | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t' | tr -d " ")

Para obtener el API server endpoint:

$ APISERVER=$(kubectl config view | grep https | cut -f 2- -d ":" | tr -d " ")

Confirme que APISERVER almacenó la misma IP que la IP maestra de Kubernetes emitiendo los siguientes 2 comandos y comparando sus resultados:

$ echo $APISERVER
https://192.168.99.100:8443

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443 ...

Acceda al servidor API usando el comando curl, como se muestra a continuación:

$ curl $APISERVER --header "Authorization: Bearer $TOKEN" --insecure
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
......
......
"/logs",
"/metrics",
"/openapi/v2",
"/version"
]
}

En lugar del token de acceso, podemos extraer el certificado de cliente, la clave del cliente y los datos de la autoridad de certificación del archivo .kube/config. Una vez extraídos, se codifican y luego se pasan con un comando curl para la autenticación. El nuevo comando curl es similar a:

$ curl $APISERVER --cert encoded-cert --key encoded-key --cacert encoded-ca


Acceso al clúster con el panel y las API de consulta con CLI (demostración)