Provisionando Fedora CoreOS Na Cloud Alibaba (Aliyun)

Esse guia mostra como provisionar novos nós Fedora CoreOS (FCOS) na Cloud Alibaba. Fedora atualmente não publica imagens do Fedora CoreOS com a Cloud Alibaba, então você deve baixar uma imagem Cloud Alibaba do Fedora e realizar o upload da imagem para um de seus baldes Serviços de Armazenamento de Objeto (OSS).

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 conta Cloud Alibaba e Serviço de Armazenamento de Objeto (OSS) Ativado. Os exemplos abaixo usam a CLI da Cloud Alibaba e jq como um processador JSON de linha de comando.

Baixando uma imagem de Cloud Alibaba

Fedora CoreOS é designado para ser atualizado automaticamente, com diferentes rotinas por stream. Uma vez que vocẽ tenha escolhido a stream relevante. baixe, verifique, e descomprima a última imagem Cloud Alibaba:

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

Alternativamente, você pode manualmente baixar uma imagem Cloud Alibaba da página de Downloads. Verifique o download, seguindo as instruções nessa página, e descomprima-o.

Atualizando a imagem para Cloud Alibaba

  1. Crie qualquer balde que ainda não exista na sua conta Cloud Alibaba com um nome único ou reuse um balde existente:

    Exemplo criando um balde OSS Cloud Alibaba (Serviço de Armazenamento de Objeto)
    REGION="ap-southeast-1"
    BUCKET_NAME="meu-balde"
    BUCKET_URL="oss://${NOME_BALDE}"
    aliyun oss mb "${BUCKET_URL}" --region="${REGION}" --acl=private
  2. Realizando o Upload de uma imagem FCOS:

    Exemplo realizando o upload do FCOS para um balde OSS Cloud Alibaba
    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. Importe a imagem FCOS que sofreu upload:

    Exemplo importando FCOS para ECS Cloud Alibaba
    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. Espere até que imagem seja importada com sucesso

    Exemplo esperando um limite de tempo igual a uma hora
    aliyun ecs DescribeTasks --region="${REGION}" --TaskIds="${TASK_ID}" \
        --waiter expr='TaskSet.Task[0].TaskStatus' to=Finished timeout=3600
  5. ID determinante da Imagem FCOS importada:

    Exemplo determinando ID da imagem FCOS importada
    IMAGE_ID=$(aliyun ecs DescribeImages --region="${REGION}" --ImageName="${IMAGE_NAME}" \
        | jq --raw-output .Images.Image[0].ImageId)
  6. Delete o blob que sofreu upload

    Exemplo deletando blob que sofreu upload
    aliyun oss rm "${BUCKET_URL}/${IMAGE_BLOB}" --region "${REGION}"

Criando um VSwitch

Não há VPCs ou VSwitches default na Cloud Alibaba. Então, para criar qualquer instância, um VSwitch deve existir. Escolha alguma existente ou crie uma com os seguintes passos.

  1. Crie um novo VPC:

    Exemplo criando um novo 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. Escolha alguma zona disponível para criar um VSwitch:

    Exemplo escolhendo uma zona disponível
    ZONE_ID=$(aliyun ecs DescribeZones --region="${REGION}" \
        | jq --raw-output .Zones.Zone[0].ZoneId)
  3. Criando um novo VSwitch:

    Exemplo criando um novo 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)

Iniciando uma instância ECS

  1. Realizando o upload de uma chave pública SSH para um ECS Cloud Alibaba

    Exemplo realizando o upload de uma chave 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. Criando uma instância ECS

    Exemplo criando instância 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)
  3. Aloque um endereço IPv4 público para a instância criada previamente

    Exemplo alocando um endereço de IP
    PUBLIC_IP=$(aliyun ecs AllocatePublicIpAddress \
        --region="${REGION}" --InstanceId="${INSTANCE_ID}" \
        | jq --raw-output .IpAddress)
  4. Inicie a instância

    Exemplo iniciando uma instância
    aliyun ecs StartInstance --region="${REGION}" --InstanceId="${INSTANCE_ID}"
  5. Espere até que a instância esteja rodando

    Exemplo esperando e determinando o endereço de IP público
    aliyun ecs DescribeInstanceStatus --InstanceId.1="$INSTANCE_ID" --region="${REGION}" \
        --waiter expr='InstanceStatuses.InstanceStatus[0].Status' to=Running timeout=600
  6. Conecte-se com a nova instância via SSH

    Exemplo de conexão
    ssh core@"${PUBLIC_IP}"

Você pode iniciar uma instância customizada com seu arquivo Ignition adicionando o parâmetro --UserData=$(cat <Caminho para sua configuração do Ignition> | base64 -w0) para o comando aliyun ecs CreateInstance que cria uma nova instância.