Usar contêineres com o SQL Server em Linux

Concluído

Os contêineres ajudam as organizações a criar instalações flexíveis e escalonáveis do SQL Server.

A Wide World Importers dá suporte a cargas de trabalho de banco de dados em grande escala que exigem uma arquitetura de hospedagem flexível e escalonável. Você deseja avaliar a possibilidade de hospedar o SQL Server em ambientes virtuais, como VMs (máquinas virtuais) e contêineres.

Aqui, você aprenderá a escolher entre contêineres e VMs para um banco de dados.

Comparação de VMs e contêineres

A virtualização é uma técnica que os administradores usam para hospedar vários servidores virtuais em um único servidor físico. Quando usa a virtualização, você pode implantar facilmente instâncias extras, por exemplo, do SQL Server sem precisar comprar e instalar hardware extra. Há duas abordagens comuns para a virtualização:

  • VMs: quando você usa VMs, cada instância é um servidor virtual completo, com sistema operacional e hardware próprios.
  • Contêineres: quando você usa contêineres, cada instância compartilha o sistema operacional e os recursos de hardware com o computador host.

Tanto as VMs quanto os contêineres fornecem um ambiente isolado no qual os aplicativos, como o SQL Server, são executados como se estivessem em um computador físico separado.

As VMs são maiores e demoram mais para serem criadas, mas, como têm o próprio sistema operacional, elas usam uma configuração e um hardware diferentes do computador host. Você também pode misturar VMs com sistemas operacionais diferentes no mesmo host. Por exemplo, em um host Linux, você pode instalar uma VM que executa o Linux e o Apache para hospedar um site. Também pode haver outra VM executando o Windows e SQL Server para hospedar um banco de dados.

Os contêineres são menores, portanto, eles são carregados muito mais rapidamente que as VMs. No entanto, se o host executar o Linux Ubuntu, por exemplo, todos os contêineres desse computador precisarão executar a mesma versão do Ubuntu. Em um host Linux, você poderá instalar um contêiner que executa o Linux e o Apache, mas o contêiner do banco de dados também deverá executar Linux. Isso é possível, desde que você execute o SQL Server 2017 (ou versão posterior).

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

No computador host, você precisará instalar um software como o Hyper-V ou o Virtual Box para hospedar VMs. Para contêineres, você poderá usar o sistema do Docker, o CRI-O, o RKT e outros hosts de contêiner.

Motivos para usar Máquinas Virtuais

Ainda há situações em que os contêineres não são a melhor solução. Como os contêineres são executados em um só sistema operacional e compartilham recursos do sistema, a segurança é uma preocupação. Se um invasor obtiver privilégios de superusuário, alguns vetores poderão levar à obtenção de acesso aos aplicativos. Nos contêineres, os aplicativos precisam ser executados no mesmo sistema operacional que o computador host. Você não pode executar aplicativos baseados em Linux em contêineres do Windows. Com as VMs, você hospeda um computador Linux no Windows ou um computador Windows no macOS, proporcionando maior flexibilidade. As VMs permitem hospedar vários aplicativos, com integração total, em uma só VM. Tradicionalmente, os contêineres só hospedam aplicativos individuais.

As VMs são menos eficientes do que os contêineres. Em um determinado conjunto de hardware, você poderá executar pelo menos o dobro do número de aplicativos em contêineres do que será possível com as VMs. Uma VM usa mais recursos porque precisa de uma cópia completa do sistema operacional e de versões virtualizadas de todo o hardware para dar suporte ao sistema operacional convidado.

Motivos para usar contêineres

Os contêineres são comparativamente mais leves e permitem que você empacote aplicativos em um volume menor. Como um único sistema operacional hospeda todos os contêineres, isso exige menos administração. Você só precisa aplicar patch e atualizar um único sistema operacional, em vez de todos os SO convidados de cada VM. Os contêineres são menores e mais diretos, portanto, podem ser iniciados em segundos, em comparação com os diversos minutos necessários para iniciar uma VM.

Orquestração

Você pode usar o Docker Swarm, o Kubernetes e outras soluções para orquestrar contêineres. Os orquestradores monitoram e possibilitam dimensionar aplicativos usando contêineres e fornecem um nível de recuperação de desastres. A Microsoft fornece ferramentas e exemplos de como usar o Kubernetes, portanto, ele é uma boa opção para a colocação em contêineres do SQL Server em Linux. Há uma imagem de contêiner do SQL Server em Linux disponível para uso com o Kubernetes.

SQL Server em Linux em contêineres

Um problema da execução de bancos de dados em contêineres é o armazenamento persistente. Você deve fornecer um local de armazenamento fora do contêiner em que o banco de dados possa manter os arquivos de banco de dados. Então, as alterações ficarão disponíveis para todos os contêineres de um cluster. Se usar o Kubernetes, você poderá usar um volume persistente para esse local.

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

Primeiro, crie um volume persistente, depois adicione e uma PVC (declaração de volume persistente). Crie um manifesto de implantação para o SQL Server em Linux que use a imagem de contêiner mssql-server-linux criada pela Microsoft. O manifesto também contém definições de PVC e um balanceador de carga para o serviço, a fim de garantir um endereço IP consistente. Crie a implantação e verifique se o SQL Server está em execução dentro de um pod. Com essa configuração concluída, o Kubernetes inicializará uma nova instância se o nó falhar. Um teste simples é excluir esse pod e verificar se um novo pod é iniciado automaticamente.

Verificar seus conhecimentos

1.

Quando uma VM seria a melhor opção para hospedar um aplicativo?