Desplegando Apstra 4.2.0 en Proxmox VE
Appliances de Apstra
Juniper no distribuye appliances propiamente dichos para despliegues en KVM, sino imágenes de disco del sistema operativo en formato QCOW2:
aos_server_4.2.0-236.qcow2
Appliance principal del servidor Apstra, que también se usa para los workers opcionales de la configuración scale-out: se usa la misma imagen para los nodos worker (no encontré esto mencionado en la documentación, pero lo mencionó un tipo de Juniper).
apstra-ztp-4.2.0-34.qcow2
Appliance opcional de Zero Touch Provisioning (ZTP) que ejecuta PXE+TFTP. Se puede usar como TFTP puro con un servidor DHCP preexistente.
Instalación
Resumen
Para el dimensionamiento de las VMs, el fabricante tiene una tabla de dimensionamiento recomendado:
| Resource | Value |
| vCPU | 8 |
| RAM | 64GB + 500MB per installed offbox agent |
| Disk | 160GB |
En mi experiencia no hacen falta tantos recursos, especialmente de RAM. Para mi entorno de pruebas voy a recortar la RAM a 32GB y lo más probable es que eso no esté soportado, puedo vivir con eso, tu caso puede variar.
Vamos a crear las máquinas virtuales vacías en Proxmox VE 7.4-15 e importar después los discos QCOW2 según corresponda. El procedimiento asume que descargaste todos los archivos a un directorio de trabajo (curl/wget son tus amigos) en un nodo PVE.
Apstra OS
Creación de la VM
Vamos a crear una máquina virtual por CLI, con 4 vCPUs y 32GB de RAM.
La red se sirve mediante el bridge por defecto y el almacenamiento mediante el repositorio ZFS local. Las opciones se explican solas, ajústalas según necesites.
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 el disco
Ahora vamos a importar el archivo QCOW2 provisto por 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=scsi0Disco adicional
Según la documentación, el disco del sistema operativo es de solo 80GB y opcionalmente se puede agregar un segundo disco de 80GB. Dado que no es costoso y que no voy a usar nodos worker adicionales, voy a agregar el 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 y TFTP no son tan exigentes, alcanza con 2 vCPUs y 4GB de RAM.
La red se sirve mediante el bridge por defecto y el almacenamiento mediante el repositorio ZFS local. Las opciones se explican solas, ajústalas según necesites.
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 el disco
Ahora vamos a importar el archivo QCOW2 provisto por 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}Configuración inicial
Configuración de AOS
- Busca la IP del appliance en los leases de tu DHCP y conéctate por SSH con admin/admin.
- En el primer login define una nueva contraseña, como se te pide.
- En el asistente forzado, define también la contraseña de la UI de Apstra como se propone. Cancela en el menú principal después de configurar la contraseña.
- Cambia el hostname por algo que tenga sentido en tu entorno. Con el usuario admin ejecuta:
sudo aos_hostname apstra-os-03.ipa.<my TLD>- Ajusta la zona horaria para que coincida con tu entorno.
sudo timedatectl set-timezone <my TZ>- Como admin, actualiza el sistema operativo. Lo más probable es que Juniper te diga que esto no está soportado. El único problema que tuve en el pasado fue que 4.1.0 se rompió porque había una librería de Juniper a nivel de sistema que rompió una aplicación en contenedor (a ver si se entiende) y hubo que arreglarlo con una actualización manual de dependencias. Ha sido impecable con 4.1.2 y ahora con 4.2.0; se mencionarán archivos de pam.d, conserva los archivos modificados localmente.
sudo apt update
sudo apt upgrade -y- Instala el agente invitado de QEMU
sudo apt install -y qemu-guest-agent- Reinicia después de la actualización completa del sistema sudo shutdown -r now
Configuración del appliance ZTP
- Busca la IP del appliance en los leases de tu DHCP y conéctate por SSH con admin/admin.
- Define el 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'- Ajusta la zona horaria para que coincida con tu entorno.
sudo timedatectl set-timezone <my TZ>- Limpia la estructura de configuración desordenada: por alguna razón, a los de Juniper les pareció buena idea crear un directorio donde debería haber un archivo y eso rompe el proceso de actualización de Ubuntu. Lo limpiamos (¿qué pasa, Juniper?!)
sudo rmdir /etc/udev/rules.d/70-persistent-net.rules- Actualiza el sistema operativo. Otra vez, probablemente Juniper te diga que no está soportado.
sudo apt update
sudo apt upgrade -y- En la Web UI de Apstra, crea un usuario con el rol device_ztp. Lo usaremos en el siguiente paso.
- De vuelta en el appliance ZTP, configura la aplicación para que reporte al servidor AOS. Por alguna razón no funciona con FQDN sino solo con IP.
cat > /containers_data/status/app/aos.conf <<EOF
{
"ip": "<your-aos-ip>",
"user": "<your ztp user>",
"password": "<the super secure password>"
}
EOF- Instala el agente invitado de QEMU
sudo apt install -y qemu-guest-agent- Reinicia la máquina virtual
sudo shutdown -r nowMigración desde 4.1.2
Si ya tienes un entorno funcionando, lo más probable es que quieras migrar toda la configuración a tu nueva instalación; hay un script que debes ejecutar en el nuevo servidor Apstra.
Ten en cuenta que el script fallará si hay cambios sin confirmar (commit) o si los dispositivos no son alcanzables. Asegúrate de que el estado en ejecución del entorno de origen esté limpio (sin errores).
aos_import_state --ip-address apstra-os-02.ipa.<my TLD> --username adminNota:
- La migración de la configuración también reemplazaría la contraseña de la web UI con la configuración del servidor original.
Editar este artículo en GitHub · ¿encontraste un error? Los pull requests son bienvenidos.