Sim, você pode executar VMs no Kubernetes com KubeVirt
KubeVirt permite que você execute suas máquinas virtuais junto com seus contêineres em uma plataforma Kubernetes.
Contêineres e Kubernetes são tecnologias incríveis que permitem que aplicativos sejam executados sem um sistema operacional (SO) pesado, como seria necessário para usar uma máquina virtual (VM). Os aplicativos nativos da nuvem que priorizam o contêiner são o futuro, mas nem todos os aplicativos são adequados para serem nativos da nuvem.
Os aplicativos nativos da nuvem se baseiam em quatro pilares: contêineres, DevOps, integração/entrega contínua (CI/CD) e microsserviços. A migração de um aplicativo legado e monolítico para se tornar nativo da nuvem geralmente exige um esforço significativo de refatoração. Às vezes, uma VM é melhor que um contêiner, por exemplo, com aplicativos LDAP/Active Directory, aplicativos de tokenização e aplicativos que exigem cargas de trabalho intensivas de GPU.
Mas pode ficar complicado quando você tem alguns aplicativos nativos da nuvem em execução em uma plataforma Kubernetes e outros aplicativos em execução em plataformas não Kubernetes. E se você pudesse executar contêineres e VMs em uma plataforma Kubernetes? O mundo não seria lindo?
Digite KubeVirt, um projeto de código aberto distribuído sob uma licença Apache 2.0. Ele foi criado pelos engenheiros da Red Hat para permitir que o Kubernetes provisione, gerencie e controle VMs juntamente com recursos de contêiner. O KubeVirt pode tornar mais fácil para uma empresa migrar de uma infraestrutura baseada em VM para um Kubernetes e uma pilha baseada em contêiner, um aplicativo por vez.
(Bryant Son, CC BY-SA 4.0)
Neste artigo, mostrarei como usar o KubeVirt por meio de uma plataforma Kubernetes de código aberto e executável localmente, chamada Minikube. Se preferir, você pode assistir a este vídeo que explica os casos de uso do KubeVirt, como instalar o Minikube e o restante do tutorial.
Pré-requisitos
Antes de começar, você precisa de uma plataforma Kubernetes implantada em um ambiente de nuvem, uma instância bare-metal ou um computador local. Em um ambiente de produção, é melhor implantar o Kubernetes em uma instância bare-metal. No entanto, nesta demonstração, usarei o Minikube, uma plataforma de código aberto, para executar o Kubernetes em um computador local. Se ainda não o possui, baixe e instale o Minikube.
Antes de inicializar o Minikube, é uma boa ideia aumentar sua memória para 4 GB:
minikube config -p kubevirt set memory 4096
Então inicie o Minikube:
minikube start
Etapa 1: Baixe e instale o Operador KubeVirt
Anote a versão mais recente do KubeVirt em seu repositório GitHub. Você não precisa baixar nada ainda, apenas obtenha o número e defina a variável de ambiente em sua interface de linha de comando (CLI):
export KUBEVIRT_VERSION="v0.32.0"
Substitua v0.32.0
acima pela versão mais recente (encontrada no link acima).
KubeVirt usa um Operador para gerenciar o ciclo de vida do aplicativo para que qualquer configuração ou alteração de serviço atualize esse componente específico sem exigir uma nova implantação. Você pode baixar a definição do operador KubeVirt com wget
:
wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
Ao baixar um arquivo, é uma boa ideia explorar sua estrutura de arquivo para entender o que ele faz, então fique à vontade para fazer isso agora.
Em seguida, aplique o operador KubeVirt ao Minikube em execução:
kubectl apply -f kubevirt-operator.yaml
Etapa 2: ativar a emulação de software
Esta etapa não é necessária se você estiver usando uma instância bare-metal, mas você desejará ativar a emulação de software para este tutorial. Isso é muito fácil de fazer criando um ConfigMap que tenha a propriedade debug.useEmulation
definida como true
:
kubectl create configmap kubevirt-config -n kubevirt --from-literal debug-useEmulation=true
Etapa 3: Baixe e instale o KubeVirt
A próxima etapa é instalar o KubeVirt com seu arquivo de definição de recurso personalizado (CRD). Baixe o arquivo:
wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
Após abrir o arquivo e explorar seu conteúdo, aplique o arquivo de definição:
kubectl apply -f kubevirt-cr.yaml
Isso instala o KubeVirt em um projeto/namespace chamado kubevirt
.
Depois de um tempo, verifique se todos os pods estão funcionando:
kubectl get pods -n kubevirt
Etapa 4: Baixe e configure virtctl
Antes de testar sua VM, você precisa ter virtctl, uma CLI para interagir com VMs. Para baixar o virtctl, vá para o repositório KubeVirt e clique em Versões no lado direito da página.
(Bryant Son, CC BY-SA 4.0)
Isso abre uma página com todos os lançamentos do KubeVirt. Clique em Ativos na parte inferior da versão mais recente; isso se expandirá para revelar os arquivos que você pode baixar. Encontre a versão apropriada do virtctl para o seu sistema operacional e faça o download.
(Bryant Son, CC BY-SA 4.0)
A maneira como você instala o virtctl varia de acordo com seu sistema operacional. Para um ambiente Linux ou macOS, adicione o caminho ao arquivo .bashrc
. Edite o arquivo .bashrc
no Vim com:
vim ~/.bashrc
E adicione as seguintes linhas:
export VIRTCTL_PATH=DOWNLOADED-PATH-TO-YOUR-VIRTCTL
Onde DOWNLOADED-PATH-TO-YOUR-VIRTCTL
é o caminho do diretório onde você baixou o virtctl.
Exportar PATH
:
export PATH="$PATH:$VIRTCTL_PATH"
Salve o arquivo e saia dele. Então digite:
source ~/.bashrc
Isso torna o caminho virtctl parte do seu ambiente. Digite virtctl
na linha de comando para verificar se a instalação funcionou.
Etapa 5: faça download de uma definição de VM de exemplo e explore o arquivo YAML
Em seguida, baixe uma definição de VM de exemplo e tente executá-la. A VM que usarei neste tutorial é uma distribuição Linux leve chamada Cirros. Baixe-o com wget
:
wget https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml
Mais uma vez, abra o arquivo e explore como ele está estruturado.
Etapa 6: implantar uma VM e testá-la
Por fim, provisione uma VM com o arquivo que você acabou de baixar. Insira o seguinte comando para implantar uma VM:
kubectl apply -f vm.yaml
A seguir, veja o recurso VM implantado:
kubectl get vm
Esta VM que você vê ainda não está em execução. Para iniciá-lo, aproveite o virtctl:
virtctl start NAME-VM
Onde NAME-VM
é o nome da VM mostrada digitando o comando kubectl get vm
. Veja a instância da VM em execução:
kubectl get vmi
Conecte-se à VM com:
virtctl console NAME-VM
Quando estiver conectado, faça login e faça um test drive com sua VM implantada.
É isso! Espero que isso ajude você a entender como usar o KubeVirt para executar uma VM junto com seus contêineres em uma plataforma Kubernetes. Não deixe de conferir outros artigos sobre Kubernetes, containers e outros assuntos interessantes no Opensource.com. E fique à vontade para compartilhar seus pensamentos e opiniões, deixando um comentário abaixo.