O Multipass é uma ferramenta de virtualização leve desenvolvida pela Canonical, a mesma empresa por trás do Ubuntu. Embora as imagens padrão sejam baseadas em Ubuntu, esta ferramenta oferece uma experiência eficiente para desenvolvimento e testes.
Diferente de máquinas virtuais tradicionais, o Multipass oferece uma abordagem mais ágil, comparável ao Docker em termos de leveza. Quando combinado com o k3s (uma versão simplificada do Kubernetes), você obtém um ambiente de Kubernetes funcional de forma rápida e descomplicada.
Este guia apresetna o processo completo de configuração de um cluster Kubernetes utilizando o Multipass.
Primeiros Passos com o Multipass
Instalação
O Multipass está disponível para download no endereço oficial: multipass.run/
Utilização Básica
Verificar versão instalada:
multipass version
Listar imagens disponíveis:
multipass find
Image Aliases Version Description
snapcraft:core18 20201111 Snapcraft builder for Core 18
snapcraft:core20 20201111 Snapcraft builder for Core 20
snapcraft:core 20210430 Snapcraft builder for Core 16
18.04 bionic 20210817 Ubuntu 18.04 LTS
20.04 focal,lts 20210825 Ubuntu 20.04 LTS
anbox-cloud-appliance latest Anbox Cloud Appliance
minikube latest minikube is local Kubernetes
Criar uma nova máquina virtual:
- Sintaxe: multipass launch -n [nome]
- Parâmetros principais:
- -n, --name: nome da VM
- -c, --cpus: número de CPUs (padrão: 1)
- -m, --mem: memória RAM (padrão: 1G)
- -d, --disk: espaço em disco (padrão: 5G)
multipass launch -n ubuntu-lts -c 4 -m 4G -d 40G
Acessar o shell da máquina virtual:
multipass shell [nome-da-vm]
Executar comandos sem acessar o shell:
multipass exec [nome-da-vm] -- [comando]
Listar máquinas virtuais:
multipass ls
multipass list
Obter informações de uma VM específica:
multipass info [nome-da-vm]
Reiniciar uma máquina virtual:
multipass restart [nome-da-vm]
Remover uma VM:
# Remoção simples (pode ser recuperada)
multipass delete [nome-da-vm]
# Remoção permanente
multipass delete --purge [nome-da-vm]
Recuperar uma VM removida:
multipass recover [nome-da-vm]
Iniciar uma VM:
multipass start [nome-da-vm]
Parar uma VM:
multipass stop [nome-da-vm]
Montar diretório do host na VM:
multipass mount [diretorio-host] [nome-da-vm]:[diretorio-vm]
Desmontar diretório:
multipass unmount [nome-da-vm]:[diretorio-vm]
Configurando o Cluster Kubernetes
Criando as Máquinas Virtuais
Vamos criar três VMs para nosso cluster: um nó master e dois nós workers:
multipass launch --name master --mem 1G --disk 3G 18.04
multipass launch --name worker1 --mem 1G --disk 3G 18.04
multipass launch --name worker2 --mem 1G --disk 3G 18.04
Após a criação, verifique o status:
multipass ls
Configurando o Nó Master
Para o nó master, utliizaremos o k3s (uma distribuição leve do Kubenretes):
multipass exec master -- /bin/bash -c "curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -"
Após a instalação, recupere o token do nó master para configurar os workers:
multipass exec master -- /bin/bash -c "sudo cat /var/lib/rancher/k3s/server/node-token"
O token terá um formato semelhante a:
K10f1a18fb4cc78db2ef656ac22bf6881f600ac1b19024a2b00f5cc51b92c108eee::server:be939c868d27bbebf0e42cb2d856432f
Configurando os Nós Workers
# Configurar variáveis de ambiente
K3S_URL="https://192.168.64.2:6443"
K3S_TOKEN="K10f1a18fb4cc78db2ef656ac22bf6881f600ac1b19024a2b00f5cc51b92c108eee::server:be939c868d27bbebf0e42cb2d856432f"
# Instalar no worker1
multipass exec worker1 -- /bin/bash -c "curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=${K3S_URL} K3S_TOKEN=${K3S_TOKEN} sh -"
# Instalar no worker2
multipass exec worker2 -- /bin/bash -c "curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=${K3S_URL} K3S_TOKEN=${K3S_TOKEN} sh -"
Verificar se o agente está em execução:
systemctl status k3s-agent
Testando o Cluster
Acesse o nó master e verifique os nós:
kubectl get nodes
Deployments de Exemplo
Vamos criar um deployment do Nginx para testar o cluster:
- deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginxdemo
spec:
replicas: 1
selector:
matchLabels:
name: nginxdemo
template:
metadata:
labels:
name: nginxdemo
spec:
containers:
- name: nginxdemo
image: nginx
ports:
- containerPort: 80
Aplicar o deployment:
kubectl apply -f deployment.yaml
Para expor o serviço, crie um Service do tipo NodePort:
- service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginxsvc
spec:
type: NodePort
ports:
- port: 82
protocol: TCP
targetPort: 80
name: http
nodePort: 30055
selector:
name: nginxdemo
Aplicar o serviço:
kubectl apply -f service.yaml
O serviço estará disponível em:
- Dentro do cluster: http://[CLUSTER-IP]:82
- Externamente: http://[IP-DO-NO]:30055
Solucionando Problemas
Erro ImagePullBackOff ao Baixar Imagens
Por padrão, o k3s utiliza o registry docker.io. Para usar um mirror brasileiro, edite o arquivo /var/lib/rancher/k3s/agent/etc/containerd/config.toml:
# Configurar mirror
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://docker.mirrors.ustc.edu.cn"]
Verificar configurações do registry:
crictl info |grep registry
Reinicie o k3s para aplicar as alterações:
sudo systemctl restart k3s