¿Qué es CaaS: Contenedores como Servicio?
En este artículo, hablaremos sobre los contenedores como servicio (CaaS). Uno de los modelos de nube más nuevos pero potentes. Aprenderá sobre sus funcionalidades principales, pros y contras, cómo se compara con otros modelos de nube y cómo implementar una aplicación simple usando contenedores.
Contents
- 1 Aspectos clave
- 2 ¿Qué son los Contenedores como Servicio?
- 3 ¿Cuáles son las funcionalidades principales de los Contenedores como Servicio?
- 4 ¿Cuáles son las ventajas de los Contenedores como Servicio?
- 5 ¿Cuáles son las limitaciones de los contenedores como servicio?
- 6 ¿Qué papel juegan Docker y Kubernetes en una plataforma CaaS?
- 7 ¿Cómo se compara Containers as a Service con otros modelos?
- 8 ¿Cuáles son los mejores proveedores de contenedores como servicio?
- 9 ¿Cómo alojar una aplicación simple usando contenedores?
- 10 Conclusión
- 11 Preguntas frecuentes
- 12 ¿Qué son los Contenedores como Servicio?
- 13 ¿Cuáles son las ventajas de los Contenedores como Servicio?
- 14 ¿Cuáles son las desventajas de los contenedores como servicio?
- 15 ¿Cuáles son los mejores proveedores de contenedores como servicio?
- 16 ¿Cómo implementar una aplicación usando contenedores?
Aspectos clave
- CaaS facilita el desarrollo y la implementación sin problemas con funcionalidades integradas.
- CaaS ofrece alta escalabilidad y portabilidad, mitigando el bloqueo de proveedores.
- Las limitaciones de CaaS incluyen posibles riesgos de seguridad y una pronunciada curva de aprendizaje.
¿Qué son los Contenedores como Servicio?
La definición de CaaS es Containers as a Service, es un modelo de computación en la nube que permite a los desarrolladores cargar, construir, escalar y administrar contenedores.
Los contenedores DevOps son paquetes ejecutables independientes y ligeros que incluyen todo lo necesario para ejecutar una aplicación. Eso consiste en el tiempo de ejecución, el código, las bibliotecas, los archivos de configuración y más. Los contenedores son altamente portátiles, de tamaño pequeño y eficientes.
Al utilizar CaaS, los desarrolladores y los equipos de operaciones de TI no tienen que preocuparse por la infraestructura subyacente. En cambio, pueden pensar en un nivel mucho más alto.
Solo necesitan codificar la aplicación, dockerizarla y enviarla a la nube. El proveedor de la nube se encargará de todo lo demás, como escalar, equilibrar la carga y monitorear.
Además de eso, CaaS es excelente ya que promueve el desarrollo ágil, es compatible con la arquitectura de microservicios y es extremadamente útil para crear aplicaciones altamente escalables rápidamente.
¿Cuáles son las funcionalidades principales de los Contenedores como Servicio?
No existe una especificación oficial que defina qué características debe incluir un CaaS. Difieren de un proveedor a otro. No obstante, las funcionalidades más básicas de Containers as a Service son:
- Tiempo de ejecución del contenedor (responsable de ejecutar sus aplicaciones en contenedores)
- Registro de contenedores (le permite almacenar y distribuir imágenes de Docker ya creadas)
- Escalado automático (aumenta o disminuye el número de contenedores en función del tráfico)
- Sistema CI/CD incorporado (extrae su código de un sistema VCS como GitHub o GitLab)
- Equilibrio de carga (divide el tráfico entre múltiples contenedores para un mejor rendimiento)
- Monitoreo y registro (proporciona capacidades avanzadas de monitoreo de contenedores)
¿Cuáles son las ventajas de los Contenedores como Servicio?
Desarrollo e implementación más rápidos
Al usar CaaS, puede acelerar significativamente su proceso de desarrollo e implementación de software. Los contenedores facilitan a los desarrolladores incorporados la configuración de sus entornos de desarrollo locales.
Todo lo que tienen que hacer es ejecutar uno o dos comandos en lugar de instalar un montón de dependencias o jugar con la configuración del sistema operativo.
Además, una vez que su proyecto esté en contenedores, se puede implementar fácilmente en cualquier proveedor de CaaS.
Eficiencia de recursos
Los contenedores tienen una naturaleza amigable con los recursos. Están diseñados para utilizar de manera eficiente los recursos del sistema, como la CPU, la memoria y el almacenamiento.
Con los contenedores, generalmente puede ejecutar más aplicaciones con menos recursos del sistema. En comparación con las máquinas virtuales, los contenedores están más optimizados en cuanto a recursos.
Portabilidad
Las aplicaciones en contenedores son muy portátiles, ya que no dependen del sistema operativo ni del hardware subyacente. Usando CaaS, nunca más tendrá el problema de “se ejecuta en mi máquina”.
Además de eso, los contenedores eliminan el riesgo de dependencia del proveedor. Si no está satisfecho con su proveedor actual, puede cambiar fácilmente de un proveedor a otro sin modificar mucho su código.
Escalabilidad
Los contenedores en combinación con software de orquestación como Kubernetes son altamente escalables. La mayoría de los proveedores de CaaS tienen capacidades integradas de escalado automático, equilibrio de carga y más. Eso les permite adaptarse a cualquier tráfico y reducir rápidamente una vez que finaliza el pico de tráfico.
Operación simplificada
CaaS cierra la brecha entre el entorno de desarrollo y el de producción. Además de eso, simplifica el proceso DevOps al ofrecer un sistema CI/CD incorporado, que se integra con su sistema VCS.
Lo mejor de todo es que CaaS le permitirá reducir costos significativos ya que no necesitará ingenieros de SysAdmins o DevOps.
¿Cuáles son las limitaciones de los contenedores como servicio?
Problemas de seguridad
Los contenedores ofrecen menor aislamiento y seguridad que las máquinas virtuales, ya que comparten el mismo kernel del sistema. Eso podría ser un riesgo potencial de seguridad. Si está ejecutando los procesos de su contenedor Docker como root, un pirata informático podría salir del contenedor y tomar el control del sistema host.
Falta de control
Las plataformas CaaS suelen ofrecer un nivel de control más bajo en comparación con otros modelos de nube. Los clientes no pueden ajustar las máquinas en las que se ejecutan sus contenedores o configurar cómo deben escalar sus aplicaciones.
Curva de aprendizaje
El modelo de contenedores como servicio es más desafiante que PaaS o BaaS. Requiere muchos conocimientos técnicos sobre programación, tecnología de contenedores, Docker, etc. Tiene una curva de aprendizaje más pronunciada, pero dominarlo puede ayudarlo a ahorrar mucho tiempo y dinero.
Persistencia de datos
Los contenedores están diseñados para ser sin estado. No deben usarse para almacenar archivos, bases de datos o cualquier otra cosa que requiera persistencia de datos.
Al usar CaaS, deberá utilizar un servicio de terceros para alojar archivos, como AWS S3, Google Cloud Storage, etc. Con respecto a la base de datos, puede optar por una solución de base de datos administrada.
¿Qué papel juegan Docker y Kubernetes en una plataforma CaaS?
Docker y Kubernetes juegan un papel crucial en la mayoría de las plataformas CaaS.
Docker es una plataforma gratuita y de código abierto para crear, implementar, ejecutar y administrar contenedores. Fue lanzado en 2013 y se ha convertido en el estándar de facto para empaquetar software en contenedores.
Kubernetes (a veces también denominado K8) es un software de orquestación. Funciona en un nivel más alto que Docker. El propósito de Kubernetes es garantizar que los clústeres de contenedores funcionen bien juntos. Se encarga de escalar, equilibrar la carga, reemplazar contenedores rotos, etcétera.
¿Cómo se compara Containers as a Service con otros modelos?
En esta sección, compararemos CaaS con otros servicios de computación en la nube, incluidos IaaS, PaaS y BaaS. Todos tienen sus ventajas y desventajas que deben tenerse en cuenta al implementar su proyecto.
Según las capas de abstracción, CaaS se encuentra en algún lugar entre IaaS y PaaS (como se muestra en la imagen a continuación).
CaaS vs IaaS
La infraestructura como servicio (IaaS) es un modelo flexible de computación en la nube en el que un proveedor de la nube ofrece la infraestructura básica en un entorno virtualizado.
Eso incluye servidores, almacenamiento, sistemas operativos y redes. IaaS es la opción menos abstracta y brinda a los clientes un control total sobre su infraestructura.
CaaS es menos flexible y ofrece un nivel de control más bajo que IaaS. Pero, por otro lado, es mucho más fácil de administrar y permite una mayor escalabilidad y portabilidad.
Como regla general, use IaaS si necesita un control de alto nivel y CaaS si necesita una forma rápida de implementar aplicaciones escalables en contenedores.
CaaS vs PaaS
Platform as a Service (PaaS) es un servicio de computación en la nube que brinda a los desarrolladores las herramientas para crear e implementar sus aplicaciones.
PaaS permite a los usuarios concentrarse en su aplicación en lugar de preocuparse por la infraestructura subyacente. ¡La mayoría de los proveedores de PaaS le permiten ejecutar su aplicación con uno o dos clics!
CaaS es más flexible y escalable en comparación con PaaS. CaaS le permite implementar prácticamente cualquier cosa, mientras que los proveedores de PaaS generalmente se limitan a unos pocos lenguajes de programación.
En términos de herramientas y características de desarrollo de software, PaaS es más avanzado. PaaS es más adecuado para aplicaciones monolíticas, mientras que CaaS supera en arquitectura de microservicios.
Para obtener más información sobre la plataforma como servicio, consulte ¿Qué es Paas?
CaaS vs BaaS
Backend as a Service (BaaS) es un modelo de computación en la nube que abstrae completamente el lado del backend de un proyecto. Viene con una base de datos, almacenamiento de archivos, administración de usuarios, API, SDK, notificaciones automáticas y autenticación, por nombrar algunos. BaaS le permite concentrarse en la interfaz de usuario y la lógica comercial en lugar de perder tiempo y dinero en tareas de programación repetitivas.
CaaS se puede usar para implementar backends y frontends, mientras que BaaS es principalmente para implementar backends. BaaS es extremadamente fácil de usar y, a veces, no requiere ningún código. CaaS, por otro lado, requiere una cantidad decente de conocimientos técnicos de programación, dockerización y DevOps.
Para obtener más información sobre Backend como Servicio, consulte ¿Qué es BaaS?
¿Cuáles son los mejores proveedores de contenedores como servicio?
Back4app Containers
Back4app Containers es un poderoso servicio en la nube que ofrece una plataforma CaaS para implementar y escalar aplicaciones en contenedores distribuidos globalmente.
Permite a los desarrolladores concentrarse en su software y en el proceso de dockerización sin preocuparse por DevOps. La plataforma tiene un sistema CI/CD incorporado, integración con GitHub y admite implementaciones sin tiempo de inactividad.
¡Lo mejor de todo es que ofrece un plan gratuito y le permite ejecutar su aplicación en cuestión de minutos!
Amazon Elastic Container Service
Amazon Elastic Container Service (ECS) es un servicio de orquestación de contenedores completamente administrado que simplifica la administración y la implementación de software en contenedores. Todo lo que tiene que hacer es describir su aplicación y los recursos necesarios, y luego AWS se encargará del resto.
No hay un cargo exclusivo por ECS, ya que ECS utiliza otros servicios de AWS en segundo plano. Para usar ECS de manera efectiva, debe estar familiarizado con el ecosistema de AWS. AWS también ofrece un nivel gratuito para nuevos clientes.
Google Cloud Kubernetes
Google Cloud Kubernetes (GKE) es la plataforma de orquestación basada en Kubernetes de Google. Le permite poner sus contenedores en piloto automático, eliminando la necesidad de administrar nodos. ¡Viene con aplicaciones y plantillas de Kubernetes preconstruidas, capacidades de escalado automático, administración de múltiples clústeres y más!
GKE tiene un rendimiento excepcional y es flexible, pero requiere mucha configuración inicial. Eso hace que no sea apropiado para principiantes. Al igual que las otras dos opciones, Google también ofrece créditos gratuitos para nuevos usuarios.
¿Cómo alojar una aplicación simple usando contenedores?
En esta sección, veremos cómo compilar, dockerizar e implementar una aplicación web de Python simple. Esta guía se diseñó específicamente para Back4app Containers, pero se pueden aplicar pasos similares a cualquier otro proveedor de CaaS.
Objetivos
- Codificar la aplicación.
- Dockerizar la aplicación y probarla.
- Subir el código fuente a GitHub.
- Implementar la aplicación en CaaS.
Codificación de la aplicación
Para demostrar el proceso de implementación, crearemos una API RESTful simple con FastAPI, un marco Python moderno y de alto rendimiento para crear API listas para producción.
Configuración del proyecto
Comience creando una carpeta dedicada para el proyecto y un entorno virtual:
$ mkdir fastapi-example && cd fastapi-example
$ python3.9 -m venv env && source env/bin/activate
A continuación, instale FastAPI con todas sus dependencias:
$ pip install "fastapi[all]"
El uso del especificador adicional instala algunas dependencias opcionales, como el servidor Uvicorn, el motor de plantillas Jinja2, etc. Si quiere lo mínimo, no incluya el extra.
Cree un archivo main.py con el siguiente contenido:
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Back4app Containers rocks!"}
Esta es la aplicación FastAPI más básica que puede escribir. Tuvimos que importar FastAPI, inicializarla y registrar el extremo raíz. ¡Visitar / debería devolver el mensaje ¡Back4app Containers es genial!.
Ejecutar y probar
Para ejecutar la aplicación web, puede usar el servidor Uvicorn ASGI integrado:
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [9528] using WatchFiles
INFO: Started server process [26308]
INFO: Waiting for application startup.
INFO: Application startup complete.
Agregamos el indicador –reload porque queremos que el servidor se vuelva a cargar si hacemos algún cambio en el código fuente.
Use cURL para enviar una solicitud GET a la raíz de la API:
$ curl http://localhost:8000/
{
"message": "Back4app Containers rocks!"
}
requirements.txt
Otra cosa que debemos hacer es congelar todos los requisitos en un archivo requirements.txt. Hacerlo permite que otros instalen rápidamente todas las dependencias necesarias para nuestro proyecto.
$ pip freeze > requirements.txt
fastapi==0.97.0
pydantic==1.10.9
python-dotenv==1.0.0
...
Usaremos este archivo para instalar las dependencias de Python en el proceso de creación de imágenes de Docker.
Dockerización de la aplicación
Antes de continuar, asegúrese de tener Docker en su máquina local. La mejor manera de verificar eso es ejecutar docker –version en su terminal.
Dockerfile
Para dockerizar nuestro proyecto, usaremos un Dockerfile. Un Dockerfile es un archivo de texto que contiene todos los comandos que un usuario puede ejecutar para ensamblar una imagen.
Cree un Dockerfile en la raíz del proyecto así:
# Dockerfile
# Use Alpine Linux as the base image
# we're using it since it's tiny in size (~5 MB)
FROM python:3.9.6-alpine
# Set the working directory
WORKDIR /app
# Set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1 # Prevents Python from writing out .pyc files
ENV PYTHONUNBUFFERED 1 # Keeps Python from buffering stdin/stdout
# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt
# Copy over the source code
COPY . .
# Expose the port
EXPOSE 80
# Run the server
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Consulte los comentarios para descubrir cómo funcionan las diferentes instrucciones.
No se preocupe; no tiene que memorizar todas las instrucciones. Si alguna vez se queda atascado, siempre puede consultar la documentación de Docker.
Además, los Dockerfiles para la mayoría de los lenguajes y marcos se pueden encontrar en línea. Solo necesita copiarlos y adaptarlos a sus necesidades.
.dockerignore
Nuestro proyecto contiene archivos y directorios que no queremos incluir en la imagen de Docker. Para ignorarlos, podemos usar un archivo .dockerignore.
Cree un archivo .dockerignore en la raíz del proyecto:
# .dockerignore
.git/
.idea/
venv/
Siéntase libre de agregar archivos y directorios adicionales.
Cree, ejecute y pruebe
Antes de implementar su código en CaaS, asegúrese de que su proyecto se compile y ejecute correctamente en su máquina.
Comience por construir la imagen de Docker:
$ docker build -t fastapi-example:1.0 .
Resumen de argumentos:
-t fastapi-example:1.0
etiqueta/nombra la imagen..
define el contexto de compilación.
Después de eso, use la imagen recién creada para generar un nuevo contenedor:
$ docker images
REPOSITORY TAG ID CREATED AT SIZE
fastapi-example 1.0 33feac11707d 4 seconds ago 72.8MB
After that use the newly created image to spin up a new container:
$ docker run -p 80:80 --name fastapi-example -d fastapi-example:1.0
Resumen de argumentos:
-p 80:80
expone el puerto80
.--name fastapi-example
nombra el contenedor.-d
rejecuta el contenedor en modo separado (sin ocupar la terminal).fastapi-example:1.0
especifica qué imagen usar.
Compruebe los contenedores en ejecución:
$ docker ps
ID IMAGE COMMAND CREATED PORTS
e67fdeg fastapi-example:1.0 "uvicorn main:app.." 9s ago 0.0.0.0:80->80/tcp
Por último, envíe una solicitud GET al índice API para ver si recibe el mensaje:
$ curl http://localhost/
{
"message": "Back4app Containers rocks!"
}
Para detener el contenedor, puede usar el siguiente comando:
$ docker kill fastapi-example
Subir a GitHub
Los siguientes pasos requerirán que tenga una cuenta de GitHub. Si no tiene una, regístrese. Además, asegúrese de tener Git instalado y configurado en su máquina.
Crear repositorio
Se le redirigirá a su tablero cuando inicie sesión en su cuenta de GitHub. Use el botón Agregar en la parte superior derecha de la pantalla para ver el formulario de creación del repositorio.
A continuación, asigne un nombre descriptivo a su repositorio y haga clic en el botón “Crear repositorio”.
GitHub tardará unos minutos en crear el repositorio. Una vez que se crea el repositorio, será redirigido a él. Tome nota de la “URL del repositorio remoto”.
Insertar código fuente
Avanzando, navegue de regreso a su proyecto local.
Antes de controlar la versión de su código, es aconsejable crear un archivo .gitignore. Un archivo .gitignore le permite definir qué archivos y directorios no deben agregarse al sistema de control de versiones. Este archivo funciona de la misma manera que un archivo .dockerignore .
Cree un archivo .gitignore en la raíz del proyecto con los siguientes contenidos:
# .gitignore
.idea/
venv/
.env
build/
Siéntase libre de modificar el archivo de acuerdo a sus necesidades.
A continuación, abra la terminal y ejecute el siguiente comando para inicializar el repositorio Git local:
$ git init
Luego agregue todos los archivos a VCS y cree la confirmación inicial:
$ git add .
$ git commit -m "my initial commit"
Por último, agregue el origen remoto de GitHub y envíele el código fuente:
$ git remote add origin <remote_url>
$ git push origin master
Asegúrese de reemplazar <remote_url> con la URL remota del paso anterior.
Eso debería ser todo. Si revisa la página del repositorio de GitHub ahora, debería ver que todos los archivos se agregaron correctamente.
Implementar aplicación
Para implementar una aplicación en Back4app Containers, necesitará una cuenta de Back4app. Si aún no tiene una, no dude en registrarse.
Al iniciar sesión, verá la lista de sus aplicaciones. Haga clic en el botón “Crear nueva aplicación” para iniciar el proceso de creación de la aplicación.
Back4app le permite implementar dos tipos de aplicaciones: backend como servicio (BaaS) o contenedores como servicio (CaaS). Dado que estamos implementando una aplicación en contenedores, elija la opción “Contenedores como servicio”.
Si aún necesita vincular su perfil de GitHub e importar el repositorio que hemos creado en el paso anterior. Selecciónelo a continuación.
Back4app Containers le permite personalizar en gran medida la implementación. Puede configurar la rama de implementación, el directorio raíz, alternar la implementación automática y configurar las variables ambientales.
Dado que estamos implementando una aplicación simple, no necesitamos ninguna de estas opciones. Solo necesita configurar el “Nombre de la aplicación” y luego hacer clic en el botón “Crear aplicación”.
Back4app Containers tardará unos minutos en extraer el código fuente de GitHub, crear la imagen y crear un nuevo contenedor. Una vez que su solicitud esté lista, el estado cambiará a “Listo”.
Cuando eso suceda, puede hacer clic en el enlace verde en el lado izquierdo de la pantalla para abrir su aplicación en el navegador. También puede notar que Back4app Containers emitió un certificado SSL gratuito para su aplicación.
¡Buen trabajo, eso es todo!
Conclusión
En conclusión, aprendió sobre CaaS, uno de los mejores modelos nativos de la nube para la arquitectura de microservicios. Ahora conoce sus características principales, beneficios, limitaciones y los mejores proveedores de CaaS. Además de eso, aprendió a implementar una aplicación dockerizada simple en Back4app Containers.
El código fuente del proyecto está disponible en el repositorio back4app-containers-fastapi.
Pasos adicionales
- Busque compilaciones de varias etapas para mejorar sus Dockerfiles y hacerlos más fáciles de mantener.
- Es una buena práctica de seguridad ejecutar los procesos de Docker Container con un usuario que no sea root.
- Consulte los documentos de Back4app Containers para aprender a implementar otros lenguajes y marcos de programación.
Preguntas frecuentes
¿Qué son los Contenedores como Servicio?
Containers as a Service (CaaS) es un modelo de computación en la nube que permite a los desarrolladores cargar, construir, escalar y administrar contenedores. Los contenedores son pequeños paquetes de aplicaciones ejecutables que se pueden implementar fácilmente en cualquier lugar. Con CaaS, los equipos de desarrollo y operaciones de TI no tienen que preocuparse por la infraestructura subyacente. En cambio, pueden pensar en un nivel mucho más alto.
¿Cuáles son las ventajas de los Contenedores como Servicio?
– Desarrollo e implementación más rápidos
– Eficiencia de recursos
– Portabilidad
– Escalabilidad
– Operación simplificada
¿Cuáles son las desventajas de los contenedores como servicio?
– Problemas de seguridad
– Falta de control
– Curva de aprendizaje
– Persistencia de datos
¿Cuáles son los mejores proveedores de contenedores como servicio?
– Back4app Containers
– Amazon Elastic Container Service (ECS)
– Google Cloud Kubernetes (GKE)
¿Cómo implementar una aplicación usando contenedores?
1. Codifique la aplicación.
2. Dockerice la aplicación y pruébela en su máquina local.
3. Suba el código fuente a GitHub.
4. Implemente la aplicación en Back4app Containers.