Provisionando Fedora CoreOS no Azure

Este guia mostra como provisionar novos nós Fedora CoreOS (FCOS) no Azure. O Fedora atualmente não publica imagens do Fedora CoreOS no Azure, então você deve baixar uma imagem do Azure do Fedora e carregá-la em sua assinatura do Azure.

O FCOS não dá suporte a máquinas virtuais herdadas Service Manager da Azure.

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.

Fedora CoreOS tem um usuário padrão core que pode ser usado para explorar o sistema operacional. Se você quiser usá-lo, finalize sua configuração fornecendo, por exemplo, uma chave SSH.

Se você não quiser usar o Ignition para começar, você pode usar o suporte ao Afterburn.

Você também precisa ter acesso a uma assinatura do Azure. Os exemplos abaixo usam o Azure CLI.

Baixando uma imagem do Azure

O Fedora CoreOS é projetado para ser atualizado automaticamente, com horários diferentes por fluxo. Depois de escolher o fluxo relevante, baixe, verifique e descompacte a imagem mais recente do Azure:

STREAM="stable"
coreos-installer download --decompress -s $STREAM -p azure -f vhd.xz

Como alternativa, você pode baixar manualmente uma imagem do Azure na página de download. Verifique o download, seguindo as instruções dessa página, e descompacte-o.

Fazendo upload da imagem para o Azure

  1. Crie quaisquer recursos que ainda não existam em sua conta do Azure:

    Exemplo de criação de recursos do Azure
    az_region="westus2"
    az_resource_group="my-group"
    az_storage_account="mystorageacct"
    az_container="my-container"
    # Cria grupo de recursos
    az group create -l "${az_region}" -n "${az_resource_group}"
    # Cria uma conta de armazenamento para enviar a imagem FCOS
    az storage account create -g "${az_resource_group}" -n "${az_storage_account}"
    # Recupera string de conexão para conta de armazenamento
    cs=$(az storage account show-connection-string -n "${az_storage_account}" -g "${az_resource_group}" | jq -r .connectionString)
    # Cria um contêiner de armazenamento para fazer o upload da imagem FCOS
    az storage container create --connection-string "${cs}" -n "${az_container}"
  2. Crie uma imagem do FCOS:

    Exemplo de criação de imagem do Azure
    downloaded_image_file="./image.vhd"
    az_image_name="my-fcos-image"
    az_image_blob="${az_image_name}.vhd"
    # Upload do blob de imagem
    az storage blob upload --connection-string "${cs}" -c "${az_container}" -f "${downloaded_image_file}" -n "${az_image_blob}"
    # Cria a imagem
    az image create -n "${az_image_name}" -g "${az_resource_group}" --source "https://${az_storage_account}.blob.core.windows.net/${az_container}/${az_image_blob}" --location "${az_region}" --os-type Linux
    # Excluir o blob enviado
    az storage blob delete --connection-string "$cs" -c "${az_container}" -n "${az_image_blob}"

Launching a VM instance using custom-data

  1. Inicie uma VM. A configuração do Ignition pode ser passada para a VM como dados personalizados ou você pode pular a passagem de dados personalizados se quiser apenas acesso SSH. Sua chave pública SSH de ~/.ssh será adicionada automaticamente à VM. Isso fornece uma maneira fácil de testar o FCOS sem primeiro criar uma configuração de Ignition.

    Exemplo de inicialização de imagem do Azure
    az_vm_name="my-fcos-vm"
    ignition_path="./config.ign"
    az vm create -n "${az_vm_name}" -g "${az_resource_group}" --image "${az_image_name}" --admin-username core --custom-data "$(cat ${ignition_path})"
  2. Agora você deve conseguir fazer SSH na instância usando o endereço IP associado.

    Exemplo de conexão
    ssh core@<endereço ip>

Launching a VM instance using custom-data and a private azure blob

  1. Define your variables.

az_vm_name=my-fcos-vm
ignition_path="./config.ign"
az_blob_ignition_path=./privateConfig.ign
az_blob_ignition_file_name=privateConfig.ign
  1. Upload your ign file to azure blob storage.

az storage blob upload --connection-string "${cs}" -c "${az_blob_ignition_file_name}" -f  "${az_blob_ignition_path}" -n "${ignition_file_name}"
  1. Create your remote ignition config to reference this new blob. Read about that here Using a remote Ignition config

  2. Note: The source field should have a value similar to "https://${az_storage_account}.blob.core.windows.net/${az_image_blob}/${az_blob_ignition_file_name}

  3. Create an identity and give it proper access to your storage account.

az identity create --name "${az_vm_name}-identity" --resource-group "${az_resource_group}"
identity_principal_id=$(az identity show --name "${az_vm_name}-identity" --resource-group "${az_resource_group}" --query principalId -o tsv)
identity_id=$(az identity show --name "${az_vm_name}-identity" --resource-group "${az_resource_group}" --query id -o tsv)
az role assignment create --assignee "${identity_principal_id}" --role "Storage Blob Data Contributor" --scope /subscriptions/${subscription_id}/resourceGroups/${az_resource_group}/providers/Microsoft.Storage/storageAccounts/${az_storage_account}
  1. Create the VM passing the new identity.

az vm create -n "${az_vm_name}" -g "${az_resource_group}" --image "${az_image_name}" --admin-username core --custom-data "$(cat ${ignition_path})" --assign-identity "${identity_id}"