Provisioning di Fedora CoreOS su Alibaba Cloud (Aliyun)

This guide shows how to provision new Fedora CoreOS (FCOS) nodes on Vultr. Vultr publishes FCOS images, but they are outdated, so we do not recommend using the standard Vultr images. Instead, a current FCOS release can be uploaded as a custom image.

Prerequisiti

Fedora CoreOS supports configuring access via SSH keys using Afterburn on this platform. Once you have configured your SSH Key in the platform configuration, you can provision and access Fedora CoreOS instances with the default user core, without using an Ignition config.

We recommend using an Ignition config once you are more familiar with Fedora CoreOS and want to automate the deployment of systems.

You need to have access to an Alibaba Cloud account and activated Object Storage Service (OSS). The examples below use the Alibaba Cloud CLI and jq as a command-line JSON processor.

Scaricamento di un’immagine Alibaba Cloud

Fedora CoreOS è progettato per aggiornarsi automaticamente, con programmi differenti a seconda dello stream. Una volta scelto lo stream rilevante, scarica, verifica e decomprimi l’ultima immagine per Oracle Cloud Infrastructure:

STREAM="stable"
coreos-installer download --decompress -s $STREAM -p aliyun -f qcow2.xz

In alternativa, puoi scaricare manualmente un’immagine di Azure dalla [pagina di download](https://fedoraproject.org/coreos/download/?stream=stable#cloud_images). Verifica il download seguendo le istruzioni su quella pagina e decomprimilo.

Caricamento dell’immagine su Alibaba Cloud

  1. Crea un bucket con un nome globalmente unico che non esiste già nel tuo account Alibaba Cloud, oppure riutilizza un bucket esistente:

    Esempio di creazione di un bucket OSS (Object Storage Service) di Alibaba Cloud
    REGION="ap-southeast-1"
    BUCKET_NAME="my-bucket"
    BUCKET_URL="oss://${BUCKET_NAME}"
    aliyun oss mb "${BUCKET_URL}" --region="${REGION}" --acl=private
  2. Caricamento di un’immagine FCOS:

    Esempio di caricamento di FCOS in un bucket OSS di Alibaba Cloud
    DOWNLOADED_IMAGE="./image.qcow2"
    IMAGE_NAME="my-fcos-image"
    IMAGE_BLOB="${IMAGE_NAME}.qcow2"
    aliyun oss cp "${DOWNLOADED_IMAGE}" "${BUCKET_URL}/${IMAGE_BLOB}" \
        --region="${REGION}" --acl=private
  3. Importazione dell’immagine FCOS caricata:

    Esempio di importazione di FCOS in Alibaba Cloud ECS
    TASK_ID=$(aliyun ecs ImportImage \
        --region="${REGION}" \
        --DiskDeviceMapping.1.OSSBucket="${BUCKET_NAME}" \
        --DiskDeviceMapping.1.OSSObject="${IMAGE_BLOB}" \
        --ImageName="${IMAGE_NAME}" \
        | jq --raw-output .TaskId)
  4. Attendi fino a quando l’immagine non è stata importata con successo

    Esempio di attesa con un timeout pari a un’ora
    aliyun ecs DescribeTasks --region="${REGION}" --TaskIds="${TASK_ID}" \
        --waiter expr='TaskSet.Task[0].TaskStatus' to=Finished timeout=3600
  5. Determinazione dell’ID dell’immagine FCOS importata:

    Esempio di determinazione dell’ID dell’immagine FCOS importata
    IMAGE_ID=$(aliyun ecs DescribeImages --region="${REGION}" --ImageName="${IMAGE_NAME}" \
        | jq --raw-output .Images.Image[0].ImageId)
  6. Cancellazione del blob caricato

    Esempio di cancellazione del blob caricato
    aliyun oss rm "${BUCKET_URL}/${IMAGE_BLOB}" --region "${REGION}"

Creazione di un VSwitch

Non esistono VPC o VSwitch predefiniti in Alibaba Cloud. Di conseguenza, per creare qualsiasi istanza deve esistere un VSwitch. Scegline uno esistente o creane uno con i seguenti passaggi.

  1. Creazione di un nuovo VPC:

    Esempio di creazione di un nuovo VPC
    VPC_CIDR="172.16.0.0/12"
    VPC_NAME="fcos-test"
    VPC_ID=$(aliyun vpc CreateVpc --region="${REGION}" \
        --CidrBlock="${VPC_CIDR}" --VpcName="${VPC_NAME}" \
        | jq --raw-output .VpcId)
  2. Selezione di una zona di disponibilità (Availability Zone) per la creazione di un VSwitch:

    Esempio di selezione di una zona di disponibilità (Availability Zone)
    ZONE_ID=$(aliyun ecs DescribeZones --region="${REGION}" \
        | jq --raw-output .Zones.Zone[0].ZoneId)
  3. Creazione di un nuovo VSwitch:

    Esempio di creazione di un nuovo VSwitch
    VSWITCH_CIDR="172.16.0.0/16"
    VSWITCH_NAME="${VPC_NAME}"
    VSWITCH_ID=$(aliyun vpc CreateVSwitch \
        --region="${REGION}" \
        --CidrBlock="${VSWITCH_CIDR}" \
        --VpcId="${VPC_ID}" \
        --VSwitchName="${VSWITCH_NAME}" \
        --ZoneId="${ZONE_ID}" \
        | jq --raw-output .VSwitchId)

Avvio di un’istanza

  1. Caricamento di una chiave pubblica SSH su Alibaba Cloud ECS

    Esempio di caricamento di una chiave pubblica SSH
    KEY_PAIR_NAME="fcos-key"
    PUBLIC_KEY_PATH="<Please fill the path to your public key>"
    PUBLIC_KEY_BODY=$(cat "${PUBLIC_KEY_PATH}")
    aliyun ecs ImportKeyPair --region="${REGION}" \
        --KeyPairName="${KEY_PAIR_NAME}" --PublicKeyBody="${PUBLIC_KEY_BODY}"
  2. Creazione di un’istanza ECS

    Esempio di creazione di un’istanza ECS
    INSTANCE_NAME="my-fcos-vm"
    INSTANCE_TYPE="ecs.t6-c1m1.large"
    INSTANCE_ID=$(aliyun ecs CreateInstance \
        --region="${REGION}" \
        --KeyPairName="${KEY_PAIR_NAME}" \
        --ImageId="${IMAGE_ID}" \
        --InstanceName="${INSTANCE_NAME}" \
        --InstanceType="${INSTANCE_TYPE}" \
        --InternetChargeType=PayByTraffic \
        --InternetMaxBandwidthIn=5 \
        --InternetMaxBandwidthOut=5 \
        --VSwitchId="${VSWITCH_ID}" \
        | jq --raw-output .InstanceId)
Se il comando fallisce con il messaggio di errore "The specified parameter SystemDisk.Category is not valid.", risolvi questo problema aggiungendo il parametro --SystemDisk.Category=cloud_essd al comando.
  1. Allocazione di un indirizzo IPv4 pubblico per l’istanza creata in precedenza

    Esempio di allocazione di un indirizzo IP pubblico
    PUBLIC_IP=$(aliyun ecs AllocatePublicIpAddress \
        --region="${REGION}" --InstanceId="${INSTANCE_ID}" \
        | jq --raw-output .IpAddress)
  2. Avvio dell’istanza

    Esempio di avvio di un’istanza
    aliyun ecs StartInstance --region="${REGION}" --InstanceId="${INSTANCE_ID}"
  3. Attendere che l’istanza sia in esecuzione

    Esempio di attesa e determinazione dell’indirizzo IP pubblico
    aliyun ecs DescribeInstanceStatus --InstanceId.1="$INSTANCE_ID" --region="${REGION}" \
        --waiter expr='InstanceStatuses.InstanceStatus[0].Status' to=Running timeout=600
  4. Connessione alla nuova istanza tramite SSH

    Esempio di connessione
    ssh core@"${PUBLIC_IP}"

È possibile avviare un’istanza personalizzata con il proprio file di configurazione Ignition aggiungendo il parametro --UserData=$(cat <Path to your Ignition config> | base64 -w0) al comando aliyun ecs CreateInstance che crea una nuova istanza.