Configurando Kubernetes com Multipass

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:

  1. Dentro do cluster: http://[CLUSTER-IP]:82
  2. 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

Tags: multipass kubernetes k3s Virtualization Ubuntu

Publicado em 7-7 04:27