Uso de contenedores con SQL Server en Linux

Completado

Los contenedores ayudan a las organizaciones a crear instalaciones flexibles y escalables de SQL Server.

Wide World Importers admite algunas cargas de trabajo de base de datos a gran escala que requieren una arquitectura de hospedaje flexible y escalable. Quiere evaluar la posibilidad de hospedar SQL Server en entornos virtuales como máquinas virtuales (VM) y contenedores de Docker.

Aquí, obtendrá información sobre cómo elegir entre contenedores y máquinas virtuales para una base de datos.

Comparación entre máquinas virtuales y contenedores

La virtualización es una técnica que los administradores usan para hospedar varios servidores virtuales en un solo servidor físico. Al usar la virtualización, se pueden implementar con facilidad instancias adicionales de, por ejemplo, SQL Server sin necesidad de comprar e instalar hardware adicional. Hay dos enfoques comunes para la virtualización:

  • Máquinas virtuales: cuando se usan máquinas virtuales, cada instancia es un servidor virtual completo, con su propio sistema operativo y hardware.
  • Contenedores: cuando se usan contenedores, cada instancia comparte un sistema operativo y los recursos de hardware con el equipo host.

Tanto las máquinas virtuales como los contenedores proporcionan un entorno aislado en el que las aplicaciones, como SQL Server, se ejecutan como si estuvieran en un equipo físico independiente.

Las máquinas virtuales son más grandes y tardan más tiempo en crearse, pero como tienen su propio sistema operativo, usan una configuración y hardware diferentes a los del equipo host. También puede combinar máquinas virtuales con otros sistemas operativos en el mismo host. Por ejemplo, en un host de Linux, puede instalar una máquina virtual que ejecute Linux y Apache para hospedar un sitio web. También podría haber otra máquina virtual que ejecute Windows y SQL Server para hospedar una base de datos.

Los contenedores son más pequeños, por lo que se cargan mucho más rápidamente que las máquinas virtuales. Pero si el host ejecuta Linux Ubuntu, por ejemplo, todos los contenedores del equipo deben ejecutar la misma versión de Ubuntu. En un host de Linux, puede instalar un contenedor que ejecute Linux y Apache, pero el contenedor de la base de datos también debe ejecutar Linux. Esto es posible siempre que se ejecute SQL Server 2017 o una versión posterior.

Diagram comparing the layers of software required to run VMs versus Containers.

En el equipo host, debe instalar software como Hyper-V o VirtualBox para hospedar las máquinas virtuales. En el caso de los contenedores, puede usar el sistema Docker, CRI-O, rkt y otros hosts de contenedor.

Motivos para usar máquinas virtuales

Todavía hay situaciones en las que los contenedores no son la mejor solución. Como los contenedores se ejecutan en un único sistema operativo y comparten recursos del sistema, la seguridad es un problema. Si un atacante obtiene privilegios de superusuario, algunos vectores podrían provocar la obtención de acceso a las aplicaciones. En los contenedores, las aplicaciones se tienen que ejecutar en el mismo sistema operativo que el del equipo host. No puede ejecutar aplicaciones basadas en Linux en contenedores de Windows. Con las máquinas virtuales, se hospeda una máquina Linux en Windows, o bien una máquina Windows en macOS, lo que proporciona mayor flexibilidad. Las máquinas virtuales permiten hospedar varias aplicaciones con una estrecha integración en una sola máquina virtual. Tradicionalmente, los contenedores solo hospedan una única aplicación.

Las máquinas virtuales son menos eficientes que los contenedores. En un conjunto de hardware determinado, puede ejecutar al menos el doble de aplicaciones en los contenedores que en las máquinas virtuales. Una máquina virtual usa más recursos porque necesita una copia completa del sistema operativo y versiones virtualizadas de todo el hardware para admitir el sistema operativo invitado.

Motivos para usar contenedores

En comparación, los contenedores son más ligeros y permiten empaquetar aplicaciones en una superficie menor. Como los contenedores se hospedan en un solo sistema operativo, hay menos administración. Solo tiene que revisar y actualizar un sistema operativo único, en lugar de todos los sistemas operativos invitados en cada máquina virtual. Los contenedores son más pequeños y sencillos, por lo que se pueden iniciar en cuestión segundos, en lugar de los minutos que se tarda en iniciar una máquina virtual.

Orquestación

Puede usar Docker, Swarm, Kubernetes y otras soluciones para orquestar contenedores. Los orquestadores supervisan y permiten escalar aplicaciones mediante contenedores y proporcionan un nivel de recuperación ante desastres. Microsoft proporciona herramientas y ejemplos de cómo usar Kubernetes, por lo que es una buena elección para la inclusión en contenedores de SQL Server en Linux. Hay una imagen de contenedor de SQL Server en Linux disponible para usar con Kubernetes.

SQL Server en Linux en contenedores

Un problema con las bases de datos que se ejecutan en contenedores es el almacenamiento persistente. Debe proporcionar una ubicación de almacenamiento fuera del contenedor donde la base de datos pueda mantener archivos de base de datos. Después, los cambios estarán disponibles para todos los contenedores de un clúster. Si usa Kubernetes, puede usar un volumen persistente para esta ubicación.

Diagram of the a Kubernetes cluster running SQL Server and the relationship between nodes, pods, storage, replica sets, and the service.

En primer lugar, cree un volumen persistente y, después, agregue una notificación de volumen persistente (PVC). Cree un manifiesto de implementación para SQL Server en Linux en el que se use la imagen de contenedor mssql-server-linux creada por Microsoft. El manifiesto también contiene definiciones para la PVC y un equilibrador de carga para el servicio, a fin de garantizar una dirección IP coherente. Cree la implementación y compruebe que SQL Server se ejecute dentro de un pod. Una vez que ha finalizado esta instalación, Kubernetes iniciará una instancia nueva si se produce un error en el nodo. Una prueba sencilla consiste en eliminar el pod y comprobar que se inicia uno nuevo de forma automática.

Comprobación de conocimientos

1.

¿Cuándo sería una máquina virtual la mejor opción para hospedar una aplicación?