Mostrando entradas con la etiqueta Contenedor. Mostrar todas las entradas
Mostrando entradas con la etiqueta Contenedor. 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?

viernes, 11 de septiembre de 2020

De los Monolitos a los Microservicios

La mayoría de las empresas nuevas ejecutan sus procesos comerciales en La Nube. Las nuevas empresas emergentes y las empresas que se dieron cuenta lo suficientemente temprano de la dirección en la que se dirigía la tecnología desarrollaron sus aplicaciones para La Nube. 

No todas las empresas tuvieron tanta suerte. Algunos construyeron su éxito hace décadas sobre tecnologías heredadas: aplicaciones monolíticas con todos los componentes estrechamente acoplados y casi imposibles de separar, una pesadilla de administrar e implementar en hardware súper costoso.

Si trabaja para una organización que se refiere a su aplicación comercial principal "la caja negra", donde nadie sabe lo que sucede dentro y la mayor parte de la lógica nunca se documentó, dejando a todos sin idea de qué y cómo suceden las cosas desde el momento en que una solicitud ingresa a la aplicación hasta aparece una respuesta y se le asigna la tarea de convertir esta aplicación empresarial en un conjunto de aplicaciones listas para La Nube, entonces puede que se encuentre en un viaje muy largo y lleno de baches.

Los Monolitos Heredados

Aunque la mayoría de las empresas creen que La Nube será el nuevo hogar de las aplicaciones heredadas, no todas las aplicaciones heredadas son aptas para La Nube, o al menos no todavía.

Mover una aplicación a La Nube debería ser tan fácil como caminar por la playa y recoger guijarros en un balde y llevarlos fácilmente donde sea necesario. Una roca de 1,000 toneladas, por otro lado, no es nada fácil de transportar. Este bloque representa la aplicación monolítica: capas sedimentadas de características y lógica redundante, traducida en miles de líneas de código, escritas en un lenguaje de programación único, no tan moderno, basado en patrones y principios de arquitectura de software obsoletos.

Con el tiempo, las nuevas características y mejoras se sumaron a la complejidad del código, haciendo que el desarrollo sea más desafiante: los tiempos de carga, compilación y construcción aumentan con cada nueva actualización. Sin embargo, hay cierta facilidad en la administración ya que la aplicación se ejecuta en un solo servidor, idealmente una máquina virtual o un mainframe.

Lo Monolítico tiene un gusto bastante caro en hardware. Al ser una pieza de software grande y única que crece continuamente, debe ejecutarse en un solo sistema que debe satisfacer sus requisitos de cómputo, memoria, almacenamiento y redes. El hardware de tal capacidad suele ser complejo y caro.

Dado que toda la aplicación Monolítica se ejecuta como un solo proceso, la escalabilidad de las características individuales de este monolito es casi imposible. Admite internamente una cantidad codificada de conexiones y operaciones. Sin embargo, escalar toda la aplicación significa implementar manualmente una nueva instancia del monolito en otro servidor, generalmente detrás de un dispositivo para equilibrio de carga. Otra solución costosa.

Durante las actualizaciones, parches o migraciones de la aplicación Monolítica, se producen tiempos de inactividad y se deben planificar los períodos de mantenimiento, ya que se espera que las interrupciones en el servicio afecten a los clientes o usuarios. Si bien existen soluciones para minimizar los tiempos de inactividad hacia los clientes mediante la configuración de aplicaciones Monolíticas en una configuración activa/pasiva de alta disponibilidad, aún puede ser un desafío para los ingenieros de sistemas mantener todos los sistemas en el mismo nivel de actualización-versión-parche.

Los Microservicios Modernos

Los guijarros, a diferencia del canto rodado de 1,000 toneladas, son mucho más fáciles de manejar. Están tallados en el monolito, separados unos de otros, convirtiéndose en componentes distribuidos, cada uno descrito por un conjunto de características específicas. Una vez pesados ​​todos juntos, los guijarros constituyen el peso de toda la roca. Estos guijarros representan microservicios débilmente acoplados, en donde cada uno de los cuales realiza una función comercial específica. Todas las funciones agrupadas forman la funcionalidad general de la aplicación monolítica original. Los guijarros son fáciles de seleccionar y agrupar según el color, el tamaño y la forma, requiriendo un esfuerzo mínimo para reubicarlos cuando sea necesario. Intente reubicar la roca de 1000 toneladas sin un gran esfuerzo.

Los microservicios se pueden implementar individualmente en servidores separados y aprovisionados con menos recursos, con solo lo que requiere cada servicio y el propio sistema anfitrión (host).

La Arquitectura Basada en Microservicios (Microservices-Based Architecture) está alineada con los principios de Arquitectura Orientada a Eventos (AOE) y Arquitectura Orientada a Servicios (SOA), donde las aplicaciones complejas están compuestas por pequeños procesos independientes que se comunican entre sí a través de Application Programmable Interfaces (APIs), vía una red. Las APIs permiten el acceso de otros servicios internos de la misma aplicación o servicios y aplicaciones externos de terceros.

Cada microservicio se desarrolla y escribe en un lenguaje de programación moderno, seleccionado para ser el más adecuado para el tipo de servicio y su función comercial. Esto ofrece una gran flexibilidad al hacer coincidir microservicios con hardware específico cuando sea necesario, lo que permite implementaciones en hardware básico de bajo costo.

Aunque la naturaleza distribuida de los microservicios agrega complejidad a la arquitectura, uno de los mayores beneficios de los microservicios es la Escalabilidad. Con la aplicación general volviéndose modular, cada microservicio se puede escalar individualmente, ya sea de forma manual o automatizada a través del autoescalado bajo demanda.

Las actualizaciones y los procesos de aplicaciones de parcheo fluidos, son otros beneficios de la Arquitectura de Microservicios. Prácticamente no hay tiempo de inactividad ni interrupción del servicio para los clientes o usuarios porque las actualizaciones se implementan sin problemas, un servicio a la vez, en lugar de tener que volver a compilar, reconstruir y reiniciar una aplicación monolítica completa. Como resultado, las empresas pueden desarrollar e implementar nuevas funciones y actualizaciones mucho más rápido, con un enfoque ágil, en equipos separados que se centran en funciones independientes, lo que resulta más productivo y rentable.

Refactorización

Las empresas más nuevas y modernas poseen el conocimiento y la tecnología para crear aplicaciones nativas de La Nube que impulsan su negocio.

Desafortunadamente, ese no es el caso de las empresas ya establecidas, que ejecutan aplicaciones monolíticas heredadas. Algunos han intentado ejecutar monolitos como microservicios y, como era de esperar, no funcionó muy bien. Las lecciones aprendidas fueron que una aplicación multiproceso de tamaño monolítico no puede ejecutarse como un microservicio y que había que explorar otras opciones. El siguiente paso natural en el camino de la transición de monolito a microservicios fue la refactorización. Sin embargo, la migración de una aplicación de hace décadas hacia La Nube a través de la refactorización, plantea serios desafíos y la empresa enfrenta el dilema del enfoque de refactorización: un enfoque de "Big-bang" o una refactorización incremental.

Un enfoque llamado "Big-bang" centra todos los esfuerzos en la refactorización del monolito, posponiendo el desarrollo y la implementación de cualquier característica nueva, lo que esencialmente retrasa el progreso y posiblemente, en el proceso, incluso rompe el núcleo de la aplicación monolítica de negocio.

Un enfoque de refactorización incremental garantiza que se desarrollen e implementen nuevas características como microservicios modernos, las cuales pueden comunicarse con el monolito a través de APIs, sin agregar nada al código del monolito. Mientras tanto, las características se refactorizan fuera del monolito que se desvanece lentamente, mientras todas o la mayor parte de su funcionalidad se moderniza en microservicios. Este enfoque incremental ofrece una transición gradual de una Arquitecura Monolítica Heredada a una Arquitectura de Microservicios moderna, que permite la migración por fases de las características de la aplicación a La Nube.

Una vez que una empresa elige el camino de la refactorización, hay otras consideraciones en el proceso:
  • ¿Qué componentes comerciales separar del monolito para convertirse en microservicios distribuidos?
  • ¿Cómo desacoplar las bases de datos de la aplicación para separar la complejidad de los datos de la lógica de la aplicación?
  • ¿Cómo probar los nuevos microservicios y sus dependencias?
Estas son solo algunas de las decisiones que debe tomar una empresa que emprende una refactorización.

La fase de refactorización transforma lentamente el monolito en una aplicación nativa de La Nube, que aprovecha al máximo las características de ésta al estar codificanda en nuevos lenguajes de programación y aplicando patrones arquitectónicos modernos. A través de la refactorización, una aplicación monolítica heredada recibe una segunda oportunidad en la vida: vivir como un sistema modular adaptado para integrarse completamente con las herramientas y servicios de automatización de nube, que exige el ritmo rápido y cambiante de hoy.

Desafíos

El camino de refactorización de un monolito a los microservicios no es sencillo y presenta múltiples desafíos. Sólo para comenzar, no todos los monolitos son candidatos perfectos para la refactorización, mientras que algunos ni siquiera "sobreviven" a una fase de modernización de este tipo. Al decidir si un monolito es un posible candidato para la refactorización, hay muchas cuestiones posibles a tomar en cuenta.

Al considerar un sistema heredado basado en Mainframe, escrito en lenguajes de programación más antiguos como Cobol, RPG o Assembler, puede ser más económico simplemente reconstruirlo desde cero como una aplicación nativa de La Nube. Una aplicación heredada mal diseñada debe rediseñarse y reconstruirse desde cero siguiendo patrones arquitectónicos modernos para microservicios, e incluso Contenedores. Las aplicaciones estrechamente acopladas con almacenes de datos también son malos candidatos para la refactorización.

Una vez que el monolito sobrevivió a la fase de refactorización, el siguiente desafío es diseñar mecanismos o encontrar herramientas adecuadas para mantener vivos todos los módulos desacoplados, para garantizar la resiliencia de la aplicación en su conjunto.

Elegir tiempos de ejecución puede ser otro desafío. Si implementa muchos módulos en un solo servidor físico o virtual, es probable que diferentes bibliotecas y entornos de tiempo de ejecución entren en conflicto entre sí y causen errores y/o fallas. Esto obliga a la implementación de módulos individuales por servidor para separar sus dependencias, lo que no es una forma económica de administración de recursos ni una segregación real de bibliotecas y tiempos de ejecución, ya que cada servidor también tiene un sistema operativo subyacente que se ejecuta con sus bibliotecas, lo que consume recursos del servidor. En ocasiones, el sistema operativo consume más recursos que el módulo de aplicación en sí.

Una luz al final del túnel

Finalmente llegaron Los Contenedores de Aplicaciones (o Contenedores para abreviar), que proporcionan entornos de tiempo de ejecución ligeros y encapsulados para los módulos de aplicaciones. Los contenedores, desde su concepción original, prometían entornos de software consistentes para desarrolladores y evaluadores, desde el desarrollo hasta la producción. El amplio soporte de contenedores aseguró la portabilidad de las aplicaciones desde el hardware físico hasta las máquinas virtuales, pero esta vez con múltiples aplicaciones implementadas en el mismo servidor, cada una ejecutándose en sus propios entornos de ejecución aislados entre sí, evitando así conflictos, errores y fallas. Otras características de los entornos de aplicaciones en Contenedores son:
  • Mayor utilización del servidor
  • Escalabilidad de módulos individuales
  • Flexibilidad
  • Interoperabilidad
  • Fácil integración con herramientas de automatización
Casos de éxito

Aunque es un proceso desafiante, pasar de los monolitos a los microservicios es un viaje que tiene resultados gratificantes, especialmente una vez que una empresa comienza a ver crecimiento y éxito gracias a un sistema de aplicaciones refactorizado. A continuación, enumeramos solo algunas de las historias de éxito de empresas que aceptaron el desafío de modernizar sus aplicaciones comerciales monolíticas.

AppDirect: un proveedor de plataforma de comercio de un extremo a otro, que comenzó a partir de una aplicación monolítica compleja y, a través de la refactorización, pudo retener monolitos de funcionalidad limitada que recibieron muy pocos "commits", pero todas las características nuevas implementadas como microservicios en contenedores.

box: un proveedor de soluciones de almacenamiento en La Nube, comenzó a partir de una arquitectura monolítica compleja y, a través de la refactorización, pudo descomponerlo en microservicios.

Crowdfire: un proveedor de soluciones de gestión de contenido, dividió con éxito su monolito inicial en microservicios.

GolfNow: un proveedor de tecnología y servicios, decidió dividir sus monolitos en microservicios en contenedores.

Pinterest: un proveedor de servicios de redes sociales, inició el proceso de refactorización migrando primero su API monolítica.

Otras empresas, organizaciones e instituciones que han realizado de manera exitosa este viaje son: Adidas, Amadeus, AppDirect, Bode, Capital One, el CERN, IBM, Huawei, ING, Nokia, Nordsrom, Pintrest, Spotify, Yahoo, Wikimedia.

¿Su empresa, institución u organización aún cuenta con Aplicaciones Monolíticas?

jueves, 21 de mayo de 2020

VMware vSphere 7 con Kubernetes

En el VMworld del año 2019 Pat Gelsinger (CEO de VMware), nos adelantaba cuál sería la tendencia para la nueva versión de VMware (la versión 7), que incluyó lo que en la empresa denominaron como el "Proyecto Pacífico". ¿En qué consiste Proyecto Pacífico? En la inclusión de Contenedores dentro de el ambiente de ejecución de VMware vSphere.

Para comenzar a entender mejor todo esto, comencemos respondiendo a la pregunta:

¿Qué son los Contenedores?

Si buscamos en Google, inmediatamente veremos que un contenedor es "...un recipiente de carga para el transporte marítimo o fluvial, transporte terrestre y transporte multimodal". Cierto. Esas enormes cajas de acero perfilado que utilizan la industria naviera, ferroviaria y de transporte de carga por carretera, para distribuir productos a nivel mundial.

Mas sin embargo en el ámbito de las Tecnologías de la Información, los Contenedores son una solución al problema de cómo hacer que el software se ejecute confiablemente cuando se traslada de un entorno informático a otro. En esencia es el empaquetar código de manera en la que pueda ejecutarse de manera independiente, siendo sólo necesario el contar un el Kernel de un Sistema Operativo.

Antes de los contenedores, era muy poco probable que pudiésemos ejecutar varias aplicaciones sobre el mismo ambiente de ejecución (hardware físico al que ya se le había instalado un Sistema Operativo), pues los recursos que requería una aplicación podrían estar siendo utilizados por otra (u otras) dentro del mismo ambiente. Una manera de resolver esto fue con la Virtualización, pues gracias a las propiedad de Particionamiento, Encapsulamiento y Aislamiento, ahora en el mismo Servidor podíamos tener a varios aplicativos corriendo sin problema alguno.

Todo muy bien hasta aquí, pero para que puedan ejecutarse las Máquinas Virtuales, es necesario contar con un Hipervisor (sustituyendo al Sistema Operativo que otrora se instalaba directamente sobre el Hardware del equipo Servidor). Si la aplicación a ejecutar era pequeña o para cumplir con las nuevas metodologías y tendencias del Desarrollo de Software requerías de Microservicios, una Máquina Virtual para cada Microservicio resultaba en un desperdicio de recursos de Procesador y Memoria (principalmente).

Es entonces cuando en el mundo Linux y Código Abierto, nace el concepto de los Contenedores. Estos últimos NO son máquinas virtuales, sino mas bien la aplicacion o el Microservicio en cuestión, que se ha encapsulado junto con las bibliotecas y recursos informáticos indispensables (y nada más) para su ejecución. Como mencionamos líneas arriba, NO es necesario un Hipervisor, sino el Kernel del Sistema Operativo en el que se ejecuta comúnmente el Microservicio. ¿Resultado? Elementos de ejecución que gozaban también de las propiedades de Particionamiento, Encapsulamiento y Aislamiento, pero que no requieren todo un Hipervisor, tanta Memoria y tanto Procesador.

Ahora bien. Así como en el mundo físico, para que nuestros Contenedores de carga puedan viajar con seguridad y eficiencia por vía marítima se requiere de inmensos buques portacontenedores, los desarrolladores del mundo del Código Abierto crearon software exprofeso. El más famoso y más utilizado se llama "Docker".

¿Qué es Docker?

Per se, la palabra anglosajona "docker" se refiere a un estibador o persona que trabaja en un muelle (dock en inglés), cargando y descargando mercancías en hacia o desde los buques cargueros. Pero en el tema que nos ocupa, Docker es -"...un software que nació como parte del proyecto de código abierto, que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos."- Este texto viene de Wikipedia.

Si quiere Usted profundizar más en el tema, recomendamos ingresar a la página oficial: https://www.docker.com/

Fue tal el éxito de Docker y los Contenedores, que pronto las áreas de Desarrollo de empresas y organizaciones de toda índole y todo tamaño, se volcaron a adoptar esta plataforma para "contenerizar" sus aplicaciones. Esto dio por resultado que fuese necesario algo que permitiera poner orden en un caos cada vez mayor. Nace entonces Kubernetes

¿Qué es Kubernetes?

Wikipedia lo define como: -"...un sistema de Código Abierto para la automatización del despliegue, ajuste, escalabilidad y administración de aplicaciones en contenedores. Fue originalmente diseñado por Google y donado a la Cloud Native Computing Foundation (parte de la Linux Foundation). Soporta diferentes entornos para la ejecución de contenedores, incluido Docker.

De la último enunciado del párrafo inmediato anterior, se infiere que Kubernetes y Docker NO SON RIVALES, sino más bien complementos.

Cabe mencionar que dentro de la comunidad Docker, ya se tiene una opción que puede ser vista como "competencia" o más bien otra alternativa para Docker. Esta se llama Swarm. Pero por su robustez, por sus excelentes resultados y ser una herramienta que permite la automatización del despliegue, ajuste, escalabilidad y administración de aplicaciones en contenedores en ambientes de todo tamaño y de toda índole, se ha tomado a Kubernetes como el estándar "de facto". ¿Más información? Recomendamos ingresar al portal oficial: https://kubernetes.io/

Contenedores en VMware

Algo que debe quedar perfectamente claro y no causar confusión alguna, es el hecho de que los Contenedores NO SON MÁQUINAS VIRTUALES, mientras que las Máquinas Virtuales NO SON CONTENEDORES. vale la pena mencionar que dentro de una Máquina Virtual (con Sistema Operativo Linux principalmente) SÍ puede ejecutar Dockers, Kubernetes y por ende Contenedores. Pero dentro de un contenedor no podemos tener una Máquina Virtual.

vSphere 7 con Kubernetes permite a los operadores y desarrolladores de Tecnologías de la Información acelerar la innovación mediante la convergencia de contenedores y máquinas virtuales, ejecutándose sobre la plataforma vSphere de VMware con Kubernetes nativo. VMware ha aprovechado Kubernetes para volver a diseñar vSphere y extender sus capacidades a todas las aplicaciones modernas y tradicionales.

vSphere 7 con Kubernetes transforma vSphere en la plataforma de aplicaciones del futuro.

Las empresas ahora pueden acelerar el desarrollo y la operación de aplicaciones modernas en VMware vSphere mientras continúan aprovechando las inversiones existentes en tecnología, herramientas y conjuntos de habilidades. Al aprovechar Kubernetes para volver a diseñar vSphere, vSphere 7 con Kubernetes permitirá a los desarrolladores y operadores de TI crear y administrar aplicaciones compuestas de contenedores y/o máquinas virtuales. Este enfoque brinda a las empresas una plataforma única para operar aplicaciones existentes y modernas en paralelo.

vSphere 7 con Kubernetes expone un nuevo conjunto de servicios que los desarrolladores pueden consumir a través de la Application Programming Interface de Kubernetes. El servicio VMware Tanzu Kubernetes Grid para vSphere permite a los desarrolladores administrar el ciclo de vida de los clústeres de Kubernetes bajo demanda. El servicio de red habilita el equilibrio de carga integrado, el ingreso y la política de red para los clústeres de Kubernetes del desarrollador.

El servicio de almacenamiento, integra vSphere Cloud Native Storage en Kubernetes para proporcionar soporte de aplicaciones con estado con volúmenes persistentes gracias a vSphere Virtual Volumes.

El servicio vSphere Pod aprovecha los otros servicios para entregar "Pods" nativos sobre el hipervisor Esxi. El lugar principal donde los clientes ejecutarán los "Pods" es en los clústeres alineados en sentido ascendente, totalmente conformados e implementados a través del servicio de Tanzu Kubernetes Grid. El Pod Service complementa el servicio Tanzu Kubernetes Grid para casos de uso específicos, donde los componentes de la aplicación necesitan el aislamiento de seguridad y rendimiento de una Máquina Virtual, en un factor de formato Pod.

vSphere 7 con Kubernetes tiene un servicio de registro nativo que se puede usar para implementar imágenes de contenedor como Pods de Kubernetes.

La administración enfocada en la aplicación, significa que la política se ha adjuntado a los "Name Spaces" que contienen las aplicaciones del desarrollador. Los equipos de operaciones ahora tienen una vista holística de una aplicación al administrar el "Name Space" que contiene todos los objetos de la aplicación.



Entonces, ¿se trata de la creación de una Máquina Virtual, con Sistema Operativo Linux super básico, al que se le instala la plataforma para Contenedores Dockers, y ahí mismo o en otra Máquina Virtual se instala Kubernets para la administración de esa instancia de Dockers? La respuesta es NO. Lo que se tiene es, dentro de el código del hipervisor ESXi, Pods disponibles para ejecutar los Contenedores creados por el área de Desarrollo, que son administrados por una entidad de Kubernetes que se ejecuta a nivel de Cluster sobre vSphere.

De esta manera, DevOps, Microservicios, Contenedores, etc. se vuelven en una alternativa más, dentro de la plataforma vSphere que, si se nos permite agregar un poco más, ya de por sí ofrece una muy amplia plataforma de Virtualización para la Nube Privada (en Infraestructura como un Servicio), que se incorpora de manera fácil, escalable y segura con Nubes Públicas (también en Infraestructura como un Servicio) para crear un ambiente robusto, seguro y escalable de Nube Híbrida.

viernes, 11 de octubre de 2019

VMware vSphere + Kubernetes = Proyecto Pacific

El pasado 26 de agosto de 2019, VMware anunció el "Proyecto Pacific", lo que creemos que es la mayor evolución de vSphere en la última década. En pocas palabras, se está rediseñando vSphere para integrar profundamente a Kubernetes. Dentro de la presentación de "Proyecto Pacific", también se anunció VMware Tanzu, una cartera de productos y servicios que transforman la forma en que la empresa construye software en Kubernetes.

"Proyecto Pacific" desarrolla vSphere para ser una plataforma nativa de Kubernetes. ¿Qué motiva esta evolución de vSphere? Fundamentalmente todo lo que constituye una aplicación moderna. Las aplicaciones modernas a menudo son combinaciones complejas de muchas tecnologías diferentes: aplicaciones internas tradicionales, bases de datos, aplicaciones modernas en contenedores y potencialmente incluso aplicaciones modernas en funciones. Administrar estas aplicaciones dentro de esa heterogeneidad, es una tarea compleja tanto para desarrolladores como para operadores. De hecho, permitir que los desarrolladores y las operaciones funcionen mejor juntos es un problema clave que aún enfrentan muchas empresas.

Cuando miramos este espacio y nos preguntamos cómo podemos ayudar a nuestros clientes aquí, estaba claro que vSphere desempeñaría un papel central. Pero nos dimos cuenta de que las nuevas tecnologías, como Kubernetes, también eran críticas para la solución. Entonces pensamos: ¿por qué no combinarlos y obtener lo mejor de ambos mundos?

Esto es exactamente lo que logra Project Pacific. Project Pacific fusiona vSphere con Kubernetes para permitir a nuestros clientes acelerar el desarrollo y la operación de aplicaciones modernas en vSphere. Esto permitirá a nuestros clientes aprovechar todas las inversiones que han realizado en vSphere y en el ecosistema vSphere en términos de tecnología, herramientas y capacitación, al tiempo que admiten aplicaciones modernas.

Cuando ponemos atención a este reto y nos preguntamos cómo podemos ayudar a nuestros clientes, estaba claro que vSphere desempeñará un papel central. Pero nos hemos percatado de que las nuevas tecnologías, como Kubernetes, también son críticas para la solución. Entonces pensamos: ¿por qué no combinarlos y obtener lo mejor de ambos mundos?

Esto es exactamente lo que logra "Proyecto Pacific": la fusión de vSphere con Kubernetes para permitir a nuestros clientes acelerar el desarrollo y la operación de aplicaciones modernas en vSphere. Esto permitirá a nuestros clientes aprovechar todas las inversiones que han realizado en vSphere y en su ecosistema en términos de tecnología, herramientas y capacitación, al tiempo que se añaden aplicaciones modernas.


Específicamente, Project Pacific ofrecerá las siguientes capacidades:

vSphere con Kubernetes

"Project Pacific" integra Kubernetes en el plano de control de vSphere, para un acceso unificado a los recursos de cómputo, almacenamiento y redes, convergiendo máquinas virtuales y contenedores utilizando los nuevos "Native Pods" que son de alto rendimiento, seguros y fáciles de consumir. Concretamente, esto significará que el área operativa de las Tecnologías de la Información puede ver y administrar objetos Kubernetes (los pods por ejemplo) desde vSphere Client. También significará que todos los scripts de vSphere, herramientas de terceros y más funcionarán en conjunto con Kubernetes.

Gestión central en aplicaciones

En lugar de administrar máquinas virtuales individuales (¡y ahora contenedores!), "Proyecto Pacific" permitirá el control a nivel de aplicación para aplicar políticas, cuotas y acceso basado en roles a los desarrolladores. Con "Proyecto Pacific", las áreas de Tecnologías de la Información tendrán visibilidad unificada vía vCenter Server para clústeres de Kubernetes, contenedores y máquinas virtuales existentes, aplicando capacidades de vSphere de nivel empresarial como Alta disponibilidad (HA), Programador de Recursos Distribuidos (DRS) y vMotion (migración de Máquinas Virtuales) a nivel de aplicación.

Colaboración entre Dsarrollo y Operaciones en Tecnolgías de la Información

El área de operaciones de Tecnologías de la Información usarán las herramientas de vSphere para entregar clústeres de Kubernetes a los desarrolladores, para luego utilizar las API de Kubernetes para acceder a la infraestructura Software Define Data Center (Centro de Datos Definido por Software). Con "Proyecto Pacific", tanto los desarrolladores como los operadores de Tecnologías de la Información, obtendrán una visión consistente a través de las construcciones de Kubernetes en vSphere.

El extenso ecosistema de socios de VMware también se beneficiará de "Proyecto Pacific", que permitirá que sus herramientas trabajen con aplicaciones basadas en contenedores sin problemas y sin modificaciones. En última instancia, "Proyecto Pacific" ayudará a las empresas a acelerar la implementación de aplicaciones modernas, al tiempo que reduce la complejidad involucrada para administrarlas en la nube híbrida. "Proyecto Pacific" se encuentra actualmente en avance tecnológico.

Esta es una innovación verdaderamente radical para vSphere. Estamos realmente entusiasmados con esta visión más amplia de ayudar a los clientes a desarrollar software en Kubernetes. Pronto hablaremos también sobre VMware Tanzu.

miércoles, 16 de enero de 2019

No todo es Contenedores

La tecnología de contenedores, como Docker, se ha vuelto cada vez más popular entre los proveedores de nube y las empresas. ¿Pero son los contenedores adecuados para su organización?

La tecnología de contenedores ha tomado el mercado de La Nube casi por la fuerza, a medida que los proveedores siguen adoptando Docker, CoreOS y otros que entran en la mezcla. Pero antes de incluir los contenedores en su estrategia de Nube, es esencial entender cómo funciona la tecnología y si se ajusta a las necesidades de su organización.

Los contenedores ofrecen un enfoque alternativo a la virtualización de servidores. Para implementar contenedores, primero es necesario instalar un sistema operativo (OS) huésped (Linux de preferencia), en vez de un hipervisor. A continuación, se debe instalar una capa de abstracción como una aplicación, que se ejecuta en el sistema operativo subyacente. Esta maquinaria o capa de abstracción crea las condiciones que aceptará los espacios para la ejecución de las aplicaciones, que no son otra cosa que los contenedores. Cada contenedor puede ejecutar su propia aplicación o copias de la misma aplicación, pero todos los contenedores comparten el mismo núcleo único o kernel de sistema operativo.

La dependencia hacia un solo sistema operativo puede hacer que los contenedores sean menos versátiles que las máquinas virtuales que se ejecutan sobre un hipervisor. Por ejemplo, como los contenedores deben moverse a los servidores con los núcleos del sistema operativo compatibles, migrar contenedores requiere más estrategia y planificación. Por otro lado, las máquinas virtuales tradicionales pueden migrar a casi cualquier lugar con un hipervisor adecuado, independientemente del sistema operativo.

Sin embargo, debido a que los contenedores comparten un solo kernel del sistema operativo, pueden reducir los costos de licencias del sistema operativo, aumentar el rendimiento y eliminar los recursos de memoria y procesador necesarios, para ejecutar múltiples versiones del sistema operativo.

La tecnología de contenedores puede beneficiar a los entornos de nube en una variedad de maneras. En comparación con las pesadas máquinas virtuales, los contenedores son ambientes de componentes ligeros que permiten a las aplicaciones moverse entre las ya distintas nubes, sin necesidad de un gran trabajo por rehacerlas. Los contenedores acomodan diferencias de plataformas, en lugar de las aplicaciones que se ejecutan en ellas. Esto ha creado un diferenciador y es lo que beneficia a DevOps y a los desarrolladores de software.

Además, los contenedores reducen los recursos redundantes que cada instancia virtual necesita, permitiendo al mismo servidor alojar más contenedores que VMs comparables, lo que mejora significativamente la escalabilidad y el rendimiento de la nube.

Por lo tanto, ¿son los contenedores adecuados para su organización y estrategia de nube? Los contenedores son ideales para entornos que exigen escala y comparten componentes clave. Por ejemplo, si tiene que girar y desplegar 100 copias de la misma carga de trabajo y sistema operativo, es mucho más eficiente y rentable utilizar contenedores que las máquinas virtuales tradicionales basadas en hipervisor.

Los centros de datos que exigen versatilidad e independencia óptima de las cargas de trabajo  permanecerán con Máquinas Virtuales basadas en hipervisor. Sin embargo, los dos enfoques no son mutuamente excluyentes. Ambos enfoques pueden coexistir para satisfacer las necesidades de computación de negocios específicas. La tecnología de contenedores, sin duda, vale la pena ser considerada por la empresa.

¿Cuál estrategia le parece mejor para su Organización?