Provisionando Fedora CoreOS no VMware

Este guia mostra como provisionar novos nós de Fedora CoreOS (FCOS) no hipervisor VMware.

Pré-requisitos

Antes de provisionar uma máquina FCOS, você deve ter um arquivo de configuração do Ignition contendo suas personalizações. Se você não tiver um, consulte Produzindo um arquivo de Ignition.

Você também precisa ter acesso a uma infraestrutura VMware funcional, com suporte para VMs com pelo menos a versão de hardware 13. Os exemplos abaixo usam a ferramenta de linha de comando govc.

Baixando o OVA

O Fedora CoreOS é projetado para ser atualizado automaticamente, com horários diferentes por fluxo. Depois de escolher o fluxo relevante, você pode baixar o OVA mais recente:

STREAM="stable"
mkdir ova-templates
coreos-installer download -s "${STREAM}" -p vmware -f ova -C ./ova-templates/

Alternativamente, as imagens OVA podem ser baixadas manualmente da página de download.

Codificando a configuração do Ignition

Para o provedor vmware, o Ignition requer que dois campos "guestinfo" estejam presentes quando a VM for inicializada pela primeira vez:

  • guestinfo.ignition.config.data.encoding: a codificação da configuração do Ignition.

  • guestinfo.ignition.config.data: o conteúdo da configuração do Ignition, codificado de acordo com o formato acima.

Para compatibilidade máxima, é recomendado usar a codificação base64 e preparar a configuração do Ignition da seguinte forma:

CONFIG_B64=`cat example.ign | base64 -w0 -`

Inicializando uma nova VM no vSphere

Esta seção mostra como usar os recursos do vSphere para configurar e executar VMs a partir da linha de comando. Etapas semelhantes também podem ser realizadas por meio da IU gráfica.

Importando o OVA

O OVA baixado deve primeiro ser importado para a biblioteca do vSphere:

FCOS_OVA='./ova-templates/fedora-coreos-31.20200210.3.0-vmware.x86_64.ova'
LIBRARY='fcos-images'
TEMPLATE_NAME='fcos-31.20200210.3.0'
govc session.login -u 'user:password@host'
govc library.create "${LIBRARY}"
govc library.import -n "${TEMPLATE_NAME}" "${LIBRARY}" "${FCOS_OVA}"

Configurando uma nova VM

Agora você pode implantar uma nova VM, começando com o modelo na biblioteca e a configuração codificada do Ignition:

VM_NAME='fcos-node01'
govc library.deploy "${LIBRARY}/${TEMPLATE_NAME}" "${VM_NAME}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=base64"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data=${CONFIG_B64}"

Uma nova VM fcos-node01 agora está disponível para inicialização. Sua configuração de hardware pode ser ainda mais personalizada neste ponto e, em seguida, ligada:

govc vm.info -e "${VM_NAME}"
govc vm.power -on "${VM_NAME}"

Rede da primeira inicialização e Ignition

O Ignition oferece suporte para referenciar conteúdo remoto na configuração e buscá-lo no momento do provisionamento. Por esse motivo, na primeira inicialização, as instâncias do FCOS tentam realizar a configuração automática da rede via DHCP.

Se sua configuração do VMware emprega configuração de rede estática, você pode substituir essa configuração DHCP automática com sua própria configuração personalizada. O parâmetro ip= de linha de comando de rede personalizado pode ser configurado por meio das propriedades guestinfo conforme mostrado abaixo, antes de inicializar uma VM pela primeira vez.

O fluxo de provisionamento segue as etapas normais, além de uma entrada adicional guestinfo.afterburn.initrd.network-kargs.

VM_NAME='fcos-node02'
IFACE='ens9'
IPCFG="ip=192.0.2.42::192.0.2.1:255.255.255.0:${VM_NAME}:${IFACE}:off"

govc library.deploy "${LIBRARY}/${TEMPLATE_NAME}" "${VM_NAME}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=base64"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data=${CONFIG_B64}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.afterburn.initrd.network-kargs=${IPCFG}"
govc vm.info -e "${VM_NAME}"
govc vm.power -on "${VM_NAME}"

A sintaxe completa do parâmetro ip = está documentada nas páginas man do Dracut.

Para mais informações sobre a rede na primeira inicialização, consulte a documentação do Afterburn.