Appliances do Apstra

A Juniper não distribui appliances propriamente ditos para implantações em KVM, e sim imagens de disco do sistema operacional em formato QCOW2:

aos_server_4.2.0-236.qcow2

Appliance principal do servidor Apstra, também usado para os workers opcionais da configuração scale-out: você usa a mesma imagem para os nós worker (não encontrei isso mencionado na documentação, mas foi dito por um cara da Juniper).

apstra-ztp-4.2.0-34.qcow2

Appliance opcional de Zero Touch Provisioning (ZTP) rodando PXE+TFTP. Pode ser usado como TFTP puro com um servidor DHCP já existente.

Instalação

Visão geral

Para o dimensionamento das VMs, o fabricante tem uma tabela de dimensionamento recomendado:

Resource Value
vCPU 8
RAM 64GB + 500MB per installed offbox agent
Disk 160GB

Na minha experiência, não são necessários tantos recursos, principalmente de RAM. Para o meu ambiente de testes, vou cortar a RAM para 32GB e muito provavelmente isso não é suportado, eu vivo com isso, o seu caso pode variar.

Vamos criar as máquinas virtuais vazias no Proxmox VE 7.4-15, importando depois os discos QCOW2 conforme necessário. O procedimento pressupõe que você baixou todos os arquivos para um diretório de trabalho (curl/wget são seus amigos) em um nó PVE.

Apstra OS

Criação da VM

Vamos criar uma máquina virtual pela CLI, com 4 vCPUs e 32GB de RAM.

A rede é atendida pelo bridge padrão e o armazenamento pelo repositório ZFS local. As opções são autoexplicativas, ajuste conforme necessário.

VMNAME=apstra-os-03.ipa.<my TLD>
VMID=$(pvesh get /cluster/nextid)
STORAGE=local-zfs
VCPU=4
VRAM=32768
VLANLAB=<my vlan>
BRIDGE=vmbr0

# OS doesn't support UEFI
qm create ${VMID} --name ${VMNAME} \
--bios seabios --machine q35 \
--ostype l26 --agent 1 \
--sockets 1 --cores ${VCPU} --cpu cputype=kvm64 \
--scsihw virtio-scsi-single \
--memory ${VRAM} \
--net0 model=virtio,bridge=${BRIDGE},firewall=0,tag=${VLANLAB}

Importando o disco

Agora vamos importar o arquivo QCOW2 fornecido pela Juniper.

VMNAME=apstra-os-03.ipa.<my TLD>
VMID=$(qm list|grep ${VMNAME}|awk '{ print $1 }')
STORAGE=local-zfs

qm disk import ${VMID} aos_server_4.2.0-236.qcow2  ${STORAGE}
qm set ${VMID} -scsi0 ${STORAGE}:vm-${VMID}-disk-1
qm set ${VMID} --boot order=scsi0

Disco adicional

Segundo a documentação, o disco do sistema operacional tem apenas 80GB e opcionalmente você pode adicionar um segundo disco de 80GB. Como não é caro e não vou usar nós worker adicionais, vou adicionar o segundo disco.

VMNAME=apstra-os-03.ipa.<my TLD>
VMID=$(qm list|grep ${VMNAME}|awk '{ print $1 }')
STORAGE=local-zfs

qm set ${VMID} --scsi1 ${STORAGE}:80
# we start the VM
qm start ${VMID}

Appliance ZTP

DHCP e TFTP não são tão exigentes, você pode usar 2 vCPUs e 4GB de RAM.

A rede é atendida pelo bridge padrão e o armazenamento pelo repositório ZFS local. As opções são autoexplicativas, ajuste conforme necessário.

VMNAME=apstra-ztp-03.ipa.<my TLD>
VMID=$(pvesh get /cluster/nextid)
STORAGE=local-zfs
VCPU=2
VRAM=4096
VLANLAB=<my vlan>
BRIDGE=vmbr0

# OS doesn't support UEFI
qm create ${VMID} --name ${VMNAME} \
--bios seabios --machine q35 \
--ostype l26 --agent 1 \
--sockets 1 --cores ${VCPU} --cpu cputype=kvm64 \
--scsihw virtio-scsi-single \
--memory ${VRAM} \
--net0 model=virtio,bridge=${BRIDGE},firewall=0,tag=${VLANLAB}

Importando o disco

Agora vamos importar o arquivo QCOW2 fornecido pela Juniper.

VMNAME=apstra-ztp-03.ipa.<my TLD>
VMID=$(qm list|grep ${VMNAME}|awk '{ print $1 }')
STORAGE=local-zfs

qm disk import ${VMID} apstra-ztp-4.2.0-34.qcow2  ${STORAGE}
qm set ${VMID} -scsi0 ${STORAGE}:vm-${VMID}-disk-1
qm set ${VMID} --boot order=scsi0
qm start ${VMID}

Configuração inicial

Configuração do AOS

  1. Procure o IP do appliance nos leases do seu DHCP e conecte-se via SSH com admin/admin.
  2. No primeiro login, defina uma nova senha, conforme solicitado.
  3. No assistente forçado, defina também a senha da UI do Apstra como proposto. Cancele no menu principal depois de definir a senha.
  4. Altere o hostname para algo que faça sentido no seu ambiente. Com o usuário admin execute:
sudo aos_hostname apstra-os-03.ipa.<my TLD>
  1. Ajuste o fuso horário para corresponder ao seu ambiente.
sudo timedatectl set-timezone <my TZ>
  1. Como admin, atualize o sistema operacional. Muito provavelmente a Juniper vai dizer que isso não é suportado. O único problema que tive no passado foi a 4.1.0 quebrando porque havia uma biblioteca da Juniper em todo o sistema que quebrou uma aplicação em contêiner (vai entender) e foi preciso uma atualização manual de dependências para consertar. Tem sido perfeito na 4.1.2 e agora na 4.2.0; arquivos do pam.d serão mencionados, mantenha os arquivos modificados localmente.
sudo apt update
sudo apt upgrade -y
  1. Instale o agente convidado do QEMU
sudo apt install -y qemu-guest-agent
  1. Reinicie após a atualização completa do sistema sudo shutdown -r now

Configuração do appliance ZTP

  1. Procure o IP do appliance nos leases do seu DHCP e conecte-se via SSH com admin/admin.
  2. Defina o hostname
sudo hostnamectl set-hostname apstra-ztp-03.ipa.<my TLD>
sudo sh -c 'echo "127.0.0.1 apstra-ztp-03.ipa.<my TLD>" >> /etc/hosts'
  1. Ajuste o fuso horário para corresponder ao seu ambiente.
sudo timedatectl set-timezone <my TZ>
  1. Limpe a estrutura de configuração bagunçada: por algum motivo, o pessoal da Juniper achou boa ideia criar um diretório onde deveria haver um arquivo, e isso quebra o processo de atualização do Ubuntu. Limpamos isso (qual é, Juniper?!)
sudo rmdir /etc/udev/rules.d/70-persistent-net.rules
  1. Atualize o sistema operacional. De novo, provavelmente a Juniper vai dizer que não é suportado.
sudo apt update
sudo apt upgrade -y
  1. Na Web UI do Apstra, crie um usuário com o papel device_ztp. Vamos usá-lo no próximo passo.
  2. De volta ao appliance ZTP, configure a aplicação para reportar ao servidor AOS. Por algum motivo, não funciona com FQDN, só com IP.
cat > /containers_data/status/app/aos.conf <<EOF
{
   "ip": "<your-aos-ip>",
   "user": "<your ztp user>",
   "password": "<the super secure password>"
}
EOF
  1. Instale o agente convidado do QEMU
sudo apt install -y qemu-guest-agent
  1. Reinicie a máquina virtual
sudo shutdown -r now

Migração a partir da 4.1.2

Se você já tem um ambiente funcionando, provavelmente vai querer migrar toda a configuração para a sua nova instalação; existe um script que você deve executar no novo servidor Apstra.

Leve em conta que o script falhará se houver alterações não commitadas ou se os dispositivos não estiverem acessíveis. Garanta que o estado em execução do ambiente de origem esteja limpo (sem erros).

aos_import_state --ip-address apstra-os-02.ipa.<my TLD> --username admin

Nota:

  • A migração da configuração também substituiria a senha da web UI pela configuração do servidor original.