Post

Testando o kubevirt no minikube

Testando o kubevirt no minikube

A virtualização de servidores é uma tecnologia que permite criar múltiplas máquinas virtuais (VMs) independentes dentro de um único servidor físico. Porém, é necessário ter um software que faça a orquestração de todas essas múltiplas máquinas virtuais.

Em um ambiente enterprise, existem soluções bem maduras e estremamente robustas, é claro que tudo tem o seu preço. Com a evolução e do aumento da maturidade da soluções opensource, uma solução que vem ganhado espaço no mundo corporativo é a solução kubevirt que é baseada no kubernetes.

Para testar essa solução, fiz um laboratório em meu próprio notebook, usando o minikube.

Minikube - permiter subir rapidamente um cluster Kubernetes local no macOS, Linux e Windows. Compatível com a versão mais recente do kubernetes, Suporta GPU, vários runtimes de contêiner e inúmeras outras funcionalidades.

Kubevirt - é uma tecnologia que atende às necessidades de equipes de desenvolvimento que adotaram ou desejam adotar o Kubernetes , mas possuem cargas de trabalho existentes baseadas em máquinas virtuais que não podem ser facilmente conteinerizadas. Mais especificamente, a tecnologia fornece uma plataforma de desenvolvimento unificada onde os desenvolvedores podem criar, modificar e implantar aplicativos que residem tanto em contêineres de aplicativos quanto em máquinas virtuais em um ambiente comum e compartilhado.

Roteiro usado para teste

O passo a passo que usei para preparar o ambiente e subir uma máquina virtual está descrito abaixo:

  1. O Minikube precisa estar instalado.
  2. A inicialização do minikube foi realizada com o seguinte parâmetro.
1
minikube start --driver=docker --cpus=4 --memory=8192 --cni=flannel
  1. Habilitei o addon de storage e habilitei, com o comando:
1
2
3
minikube addons enable storage-provisioner

minikube addons enable default-storageclass
  1. Habilitei o kubevirt, com o comando:
1
minikube addons enable kubevirt
  1. Habilitei alguns itens específicos, pois o objetivo era subir um servidor com Fedora Linux, e para isso foi necessário fazer o upload da imagem etc
1
2
3
4
export TAG=$(curl -s https://api.github.com/repos/kubevirt/containerized-data-importer/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$TAG/cdi-operator.yaml
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$TAG/cdi-cr.yaml
kubectl port-forward -n cdi svc/cdi-uploadproxy 8443:443
  1. A imagem do fedora que usei para o laboratório foi
1
2
cd /tmp 
wget https://br.mirrors.cicku.me/fedora/linux/releases/43/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2
  1. Agora que as dependências foram sanadas, o próximo passo é fazer o upload da imagem para o cluster com o comando
1
2
3
4
5
6
7
8
./virtctl image-upload pvc fedora-pvc \
  --size=10Gi \
  --image-path=/tmp/Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2 \
  --default-instancetype=n1.medium \
  --default-preference=fedora \
  --access-mode=ReadWriteOnce \
  --uploadproxy-url=https://127.0.0.1:8443 \
  --insecure
  1. O próximo passo é criar um arquivo com o conteúdo abaixo, salvei ele com o nome de vm.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: fedora
spec:
  runStrategy: Always
  template:
    spec:
      domain:
        resources:
          requests:
            memory: 2048M # 2GB de RAM para o Fedora
        devices:
          disks:
          # O disco principal com o sistema que fizemos upload
          - name: os-disk
            disk:
              bus: virtio
          # O disco virtual temporário que injeta a senha
          - name: cloudinitdisk
            disk:
              bus: virtio
      volumes:
      # Apontando para o seu PVC recém-criado
      - name: os-disk
        persistentVolumeClaim:
          claimName: fedora-pvc
      # Configuração do usuário e senha
      - name: cloudinitdisk
        cloudInitNoCloud:
          userData: |-
            #cloud-config
            user: fedora
            password: fedorapassword
            chpasswd: { expire: False }
            ssh_pwauth: True
  1. O próximo passo é criar a VM, com o comando
1
kubectl apply -f vm.yaml
  1. Como o parâmetro runStrategy está definido com o valor Always a máquina virtual será inicializada automaticamente. Para visualizar, instalei o dashboard com o comando
1
minikube dashboard
  1. Uma outra forma de visualizar é através do comando
1
kubectl get vmis
  1. Para acessar a console gráfica do ambiente, usa-se o comando
1
virtctl vnc fedora
  1. Para acessar a console texto, usa-se o comando
1
virtctl console fedora

Considerações sobre o laboratório

A execução deste laboratório surpreendeu pela agilidade e simplicidade.

Configurar o KubeVirt, que em um passado recente poderia parecer uma tarefa complexa, tornou-se quase trivial graças aos addons do Minikube e operadores como o CDI. Além disso, o ambiente se mostrou extremamente leve, permitindo rodar uma VM Fedora completa encapsulada em um cluster local sem exigir um hardware robusto.

Isso comprova o quão acessível está se tornando testar arquiteturas modernas, permitindo que engenheiros validem a união do mundo de contêineres com máquinas virtuais em um único painel de controle, diretamente de seus notebooks.

Conclusão

Em resumo, testar o KubeVirt via Minikube provou que explorar tecnologias avançadas de orquestração está ao alcance de qualquer notebook. O futuro da infraestrutura aponta para plataformas cada vez mais unificadas, onde a barreira entre o tradicional e o cloud-native se torna invisível para as esteiras de deploy. Dominar essas ferramentas é um passo fundamental para quem atua na linha de frente da tecnologia.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.