ການຕິດຕັ້ງ Fedora CoreOS ເທິງ Oracle Cloud Infrastructure (OCI)

ຄູ່ມືນີ້ຈະສະແດງວິທີການຕິດຕັ້ງໂນດ Fedora CoreOS (FCOS) ໃໝ່ເທິງ Oracle Cloud Infrastructure. ໃນປະຈຸບັນ ອິເມຈຂອງ Fedora CoreOS ແມ່ນບໍ່ໄດ້ຖືກເຜີຍແຜ່ໂດຍກົງເທິງ Oracle Cloud Infrastructure. ດັ່ງນັ້ນ, ທຳອິດທ່ານຕ້ອງດາວໂຫຼດອິເມຈ Fedora CoreOS ສຳລັບ Oracle Cloud Infrastructure, ແລ້ວອັບໂຫຼດມັນຂຶ້ນໄປຍັງບັນຊີຂອງທ່ານໃນຮູບແບບ ອິເມຈທີ່ກຳນົດເອງ.

ສິ່ງທີ່ຕ້ອງມີມາກ່ອນ

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 Oracle Cloud Infrastructure account. The examples below use the oci command-line tool and jq as a command-line JSON processor.

ຄູ່ມືນີ້ໃນປະຈຸບັນແມ່ນກວມເອົາສະເພາະຮູບແບບ Virtual Machine ເທົ່ານັ້ນ ແລະ ບໍ່ລວມເຖິງ Bare Metal. ເບິ່ງ issue #414 ສຳລັບລາຍລະອຽດ.

ການດາວໂຫຼດອິເມຈ Oracle Cloud Infrastructure

Fedora CoreOS ຖືກອອກແບບມາໃຫ້ມີການອັບເດດໂດຍອັດຕະໂນມັດ, ໂດຍມີກຳນົດເວລາທີ່ແຕກຕ່າງກັນໃນແຕ່ລະສະຕຣີມ (stream). ເມື່ອທ່ານເລືອກສະຕຣີມທີ່ຕ້ອງການໄດ້ແລ້ວ, ໃຫ້ດາວໂຫຼດ, ກວດສອບ ແລະ ແຕກໄຟລ໌ອິເມຈ Oracle Cloud Infrastructure ຫຼ້າສຸດ:

ARCH="x86_64"    # ຫຼື "aarch64"
STREAM="stable"  # ຫຼື "testing", "next"
coreos-installer download -s $STREAM -a $ARCH -p oraclecloud -f qcow2.xz --decompress
ທັງສະຖາປັດຕະຍະກຳ x86_64 ແລະ aarch64 ແມ່ນໄດ້ຮັບການສະໜັບສະໜູນເທິງ Oracle Cloud Infrastructure.

ນອກນັ້ນ, ທ່ານຍັງສາມາດດາວໂຫຼດອິເມຈ Oracle Cloud Infrastructure ດ້ວຍຕົນເອງໄດ້ຈາກ ໜ້າດາວໂຫຼດ.

ການອັບໂຫຼດອິເມຈຂຶ້ນໄປຍັງ Oracle Cloud Infrastructure

ລະບຸ ID ຂອງ root compartment ຂອງທ່ານ.

ສະແດງລາຍຊື່ compartments ໃນ tenancy ຂອງທ່ານ.
oci iam compartment list
ROOT_COMPARTMENT_ID=<root_compartment_id>
OCID ຂອງ root compartment ແມ່ນອັນດຽວກັນກັບ OCID ຂອງ tenancy ຂອງທ່ານ. ທ່ານສາມາດຊອກຫາ ຂໍ້ມູນນີ້ໄດ້ໃນການກຳນົດຄ່າ CLI ຂອງທ່ານທີ່ ~/.oci/config ຫຼື ໃນ Cloud Console.

ຖ້າທ່ານມີພຽງແຕ່ໜຶ່ງ tenant/root compartment ທ່ານສາມາດໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້ເພື່ອເອົາຂໍ້ມູນນັ້ນໄດ້ງ່າຍຂຶ້ນ.

ຕັ້ງຄ່າ ID ຂອງ root compartment ໂດຍອີງຕາມ compartment ທຳອິດໃນລາຍຊື່.
ROOT_COMPARTMENT_ID=$(oci iam compartment list |
                      jq --raw-output '.data[0]."compartment-id"')
ສ້າງ compartment ໃໝ່ສຳລັບການທົດສອບ.
COMPARTMENT_ID=$(oci iam compartment create                \
                 --name fedora-coreos-test                 \
                 --compartment-id $ROOT_COMPARTMENT_ID     \
                 --description "Fedora CoreOS compartment" \
                 | jq -r '.data.id')
ສ້າງ storage bucket ສຳລັບການອັບໂຫຼດອິເມຈ.
BUCKET_NAME="fedora-coreos"
oci os bucket create --compartment-id $COMPARTMENT_ID --name $BUCKET_NAME
ອັບໂຫຼດອິເມຈຂຶ້ນໄປຍັງ storage bucket.
FCOS_VERSION='...'
IMAGE_NAME="fedora-coreos-${FCOS_VERSION}-oraclecloud.${ARCH}.qcow2"
FILE_PATH="./${IMAGE_NAME}"
oci os object put --bucket-name $BUCKET_NAME --file $FILE_PATH
ເບິ່ງ object ໃນ bucket.
oci os object list -bn $BUCKET_NAME
ນຳເຂົ້າອິເມຈໃນຖານະເປັນອິເມຈທີ່ກຳນົດເອງ ແລະ ຈື່ ID ຂອງມັນໄວ້.
NAMESPACE=$(oci os ns get | jq -r '.data')
IMAGE_ID=$(oci compute image import from-object               \
           --compartment-id $COMPARTMENT_ID                   \
           --namespace $NAMESPACE                             \
           --bucket-name $BUCKET_NAME                         \
           --name $IMAGE_NAME                                 \
           --display-name "Fedora CoreOS $FCOS_VERSION $ARCH" \
           --launch-mode PARAVIRTUALIZED                      \
           --source-image-type QCOW2                          \
           --operating-system "Linux"                         \
           | jq -r '.data.id')

ລໍຖ້າຈົນກວ່າການນຳເຂົ້າຈະສຳເລັດ.

ເຮັດຊ້ຳຈົນກວ່າອິເມຈຈະພ້ອມໃຊ້ງານ.
while true; do
    state=$(oci compute image get --image-id $IMAGE_ID |
            jq -r '.data."lifecycle-state"')
    echo "$(date): $state"
    [ "$state" == "AVAILABLE" ] && break || sleep 30
done

ອິເມຈຈຳເປັນຕ້ອງໄດ້ຮັບການກຳນົດຄ່າເພື່ອໃຫ້ແພລດຟອມຮູ້ວ່າມັນສາມາດເຮັດຫຍັງໄດ້ແດ່. ໃນທີ່ນີ້ພວກເຮົາຈະດຶງເອົາຊຸດຄວາມສາມາດລຸ້ນເລີ່ມຕົ້ນ 1.2 ແລະ ກຳນົດຄ່າເພີ່ມເຕີມບາງຢ່າງ. ໝາຍເຫດວ່າບາງຢ່າງເຫຼົ່ານີ້ແມ່ນຂຶ້ນກັບສະຖາປັດຕະຍະກຳສະເພາະ, ແຕ່ກໍບໍ່ມີຜົນເສຍຫຍັງຍ້ອນວ່າພວກມັນຕ້ອງໄດ້ຮັບການເລືອກໃຊ້ໃນຕອນທີ່ລະບົບເຮັດວຽກຢູ່ແລ້ວ.

ກຳນົດຄ່າຄວາມສາມາດເພີ່ມເຕີມຂອງອິເມຈ.
GLOBAL_CAP_ID=$(
    oci compute global-image-capability-schema list --all | jq -r '.data[0].id')
GLOBAL_CAP_VERSION_NAME=$(
    oci compute global-image-capability-schema-version list --all \
    --global-image-capability-schema-id $GLOBAL_CAP_ID            \
    --display-name 1.2 | jq -r '.data[0].name')

oci compute image-capability-schema create \
    --global-image-capability-schema-version-name $GLOBAL_CAP_VERSION_NAME \
    --compartment-id $COMPARTMENT_ID --image-id $IMAGE_ID --schema-data '{
    "Compute.AMD_SecureEncryptedVirtualization": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    },
    "Compute.SecureBoot": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    },
    "Storage.Iscsi.MultipathDeviceSupported": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    }
}'

ດຽວນີ້ພວກເຮົາສາມາດໝາຍອິເມຈວ່າມັນເຂົ້າກັນໄດ້ກັບ VM shapes ທີ່ເໝາະສົມ.

ລຶບລາຍຊື່ shapes ທີ່ເຂົ້າກັນໄດ້ແບບເລີ່ມຕົ້ນອອກ.
oci compute image-shape-compatibility-entry \
    list --image-id $IMAGE_ID | jq -r '.data[].shape' |
while read shape; do
    [[ "$shape" =~ Generic ]] && continue # ບໍ່ສາມາດລຶບຮູບແບບ Generic ອອກໄດ້
    echo "Removing $shape from $IMAGE_ID"
    oci compute image-shape-compatibility-entry remove \
        --force --image-id $IMAGE_ID --shape-name "${shape}"
done
ໝາຍວ່າເຂົ້າກັນໄດ້ກັບ VM shapes ທີ່ເໝາະສົມ.
shapes_info=$(oci compute shape list --all --compartment-id $COMPARTMENT_ID | jq -r '.data[]')

# ຈຳກັດສະເພາະ VM shapes ເທົ່ານັ້ນ
# https://github.com/coreos/fedora-coreos-tracker/issues/414#issuecomment-1795808614
vm_shapes_info=$(jq -r 'select(.shape | select(startswith("VM")))' <<< "$shapes_info")

# ກຳນົດ shapes ສຳລັບ x86_64 ແລະ aarch64
amd64_shape_ids=$(jq -r 'select(."processor-description"  |
                                contains("AMD", "Intel")) |
                                .shape' <<< "$vm_shapes_info")
arm64_shape_ids=$(jq -r 'select(."processor-description" |
                                contains("Ampere"))      |
                                .shape' <<< "$vm_shapes_info")

# ນຳໃຊ້ shapes ທີ່ເໝາະສົມກັບ IMAGE
[ "$ARCH" == "x86_64" ] && shape_ids="$amd64_shape_ids"
[ "$ARCH" == "aarch64" ] && shape_ids="$arm64_shape_ids"
for shape in $shape_ids; do
    oci compute image-shape-compatibility-entry add \
        --image-id $IMAGE_ID --shape-name "${shape}"
done
ສະແດງລາຍຊື່ shapes ທັງໝົດທີ່ເຂົ້າກັນໄດ້ສຳລັບອິເມຈ.
oci compute image-shape-compatibility-entry list --image-id $IMAGE_ID | jq -r '.data[].shape'

ການເປີດໃຊ້ງານ instance

ສ້າງ Virtual Cloud Network.
NETWORK_ID=$(oci network vcn create        \
    --compartment-id $COMPARTMENT_ID       \
    --display-name "fedora-coreos-network" \
    --cidr-blocks '["10.0.0.0/16"]'        \
    --dns-label "myfcos"                   \
    --wait-for-state AVAILABLE | jq -r '.data.id')
ສ້າງ Subnet.
SUBNET_ID=$(oci network subnet create     \
    --compartment-id $COMPARTMENT_ID      \
    --display-name "fedora-coreos-subnet" \
    --cidr-block "10.0.0.0/24"            \
    --vcn-id $NETWORK_ID                  \
    --dns-label "subnet1"                 \
    --wait-for-state AVAILABLE | jq -r '.data.id')
ສ້າງ Internet Gateway.
GATEWAY_ID=$(oci network internet-gateway create \
    --compartment-id $COMPARTMENT_ID             \
    --display-name "fedora-coreos-gateway"       \
    --vcn-id $NETWORK_ID                         \
    --is-enabled true | jq -r '.data.id')
ເພີ່ມ Rule ເຂົ້າໃນ Route Table.
ROUTE_TABLE_ID=$(oci network route-table list \
    --compartment-id $COMPARTMENT_ID          \
    --vcn-id $NETWORK_ID | jq -r '.data[0].id')

oci network route-table update \
    --rt-id $ROUTE_TABLE_ID    \
    --force --route-rules      \
    '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"'"${GATEWAY_ID}"'"}]'

ດຽວນີ້ທ່ານສາມາດເລືອກ availability domain ຫຼື ຕັ້ງຄ່າໃຫ້ມັນເປັນອັນທຳອິດໃນພາກພື້ນ (region) ກໍໄດ້.

ເລືອກ availability domain.
AVAILABILITY_DOMAIN=$(oci iam availability-domain list | jq -r '.data[0].name')
ເບິ່ງ domains ທີ່ເປັນໄປໄດ້ທັງໝົດດ້ວຍຄຳສັ່ງ oci iam availability-domain list.

ດຽວນີ້ພວກເຮົາສາມາດເປີດໃຊ້ງານ instance ໄດ້ແລ້ວ. ຖ້າທ່ານຕ້ອງການພຽງແຕ່ການເຂົ້າເຖິງຜ່ານ SSH, ທ່ານສາມາດຂ້າມການລະບຸການກຳນົດຄ່າ Ignition ໃຫ້ກັບ instance ໄດ້.

ການເປີດໃຊ້ງານ instance ໂດຍບໍ່ມີການກຳນົດຄ່າ Ignition.
NAME=fedora-coreos
SHAPE=VM.Standard.E5.Flex # ຫຼື VM.Standard.A1.Flex ສຳລັບ aarch64
SSHKEYS="/path/to/authorized_keys" # ເສັ້ນທາງໄປຫາໄຟລ໌ authorized_keys

INSTANCE_ID=$(oci compute instance launch               \
    --compartment-id $COMPARTMENT_ID                    \
    --availability-domain $AVAILABILITY_DOMAIN          \
    --display-name $NAME                                \
    --image-id $IMAGE_ID                                \
    --shape $SHAPE                                      \
    --shape-config '{"ocpus": '2', "memoryInGBs": '4'}' \
    --subnet-id $SUBNET_ID                              \
    --assign-public-ip true                             \
    --ssh-authorized-keys-file $SSHKEYS                 \
    --wait-for-state TERMINATED                         \
    --wait-for-state RUNNING | jq -r '.data.id')
ຮູບແບບ VM.Standard.E2.1.Micro ທີ່ຢູ່ໃນສິດ Free Tier ນັ້ນມີໜ່ວຍຄວາມຈຳ ໜ້ອຍກວ່າຈຳນວນທີ່ແນະນຳສຳລັບການໃຊ້ງານ Fedora CoreOS. ສຳລັບ instance ທີ່ຢູ່ໃນສິດ Free Tier, ແນະນຳໃຫ້ໃຊ້ຮູບແບບ VM.Standard.A1.Flex ທີ່ອີງຕາມ ARM ແທນ.
ການເປີດໃຊ້ງານ instance ພ້ອມກັບການປັບແຕ່ງ ແລະ ການກຳນົດຄ່າ Ignition.
NAME=fedora-coreos
SHAPE=VM.Standard.E5.Flex      # ຫຼື VM.Standard.A1.Flex ສຳລັບ aarch64
DISK=50                        # ຂະໜາດຂອງ boot volume ເປັນ GBs
OCPUS=2                        # ຈຳນວນ OCPUs ທີ່ຈັດສັນໃຫ້
MEMORY=4                       # ຂະໜາດຂອງໜ່ວຍຄວາມຈຳເປັນ GBs
INSTANCE_HOSTNAME=mycoreos     # hostname ສຳລັບ instance
USERDATA="/path/to/config.ign" # ເສັ້ນທາງໄປຫາໄຟລ໌ Ignition config ຂອງທ່ານ
                               # ທີ່ໃຊ້ຕັ້ງຄ່າ ssh key

INSTANCE_ID=$(oci compute instance launch               \
    --compartment-id $COMPARTMENT_ID                    \
    --availability-domain $AVAILABILITY_DOMAIN          \
    --display-name $NAME                                \
    --image-id $IMAGE_ID                                \
    --shape $SHAPE                                      \
    --shape-config                                      \
    '{"ocpus": '${OCPUS}', "memoryInGBs": '${MEMORY}'}' \
    --subnet-id $SUBNET_ID                              \
    --assign-public-ip true                             \
    --hostname-label $INSTANCE_HOSTNAME                 \
    --boot-volume-size-in-gbs $DISK                     \
    --user-data-file $USERDATA                          \
    --wait-for-state TERMINATED                         \
    --wait-for-state RUNNING | jq -r '.data.id')
ເຖິງແມ່ນວ່າເອກະສານຂອງ Oracle Cloud Infrastructure ຈະກ່າວເຖິງ cloud-init, ແຕ່ Fedora CoreOS ບໍ່ຮອງຮັບ cloud-init. ມັນຮັບຮອງສະເພາະໄຟລ໌ການກຳນົດຄ່າ Ignition ເທົ່ານັ້ນ. ເມື່ອໃຊ້ງານຜ່ານ Cloud Console, ການກຳນົດຄ່າ Ignition ສາມາດໃສ່ລົງໃນຊ່ອງ "Cloud-init script" ໄດ້.
ເພື່ອເປີດໃຊ້ SecureBoot ທ່ານສາມາດສົ່ງການກຳນົດຄ່າເພີ່ມເຕີມຜ່ານ --platform-config '{"type": "AMD_VM", "isSecureBootEnabled": true}' ຫຼື --platform-config '{"type": "INTEL_VM", "isSecureBootEnabled": true}' ຫຼື ໂດຍຂຶ້ນກັບປະເພດໂປຣເຊສເຊີຂອງ instance ຂອງທ່ານ. ການເປີດໃຊ້ Secureboot ແມ່ນຍັງບໍ່ສາມາດເຮັດໄດ້ສຳລັບ instance ທີ່ເປັນ ARM ໃນປະຈຸບັນ.
ເອົາທີ່ຢູ່ public IP ຂອງ instance.
PUBLIC_IP=$(oci compute instance list-vnics --instance-id $INSTANCE_ID |
            jq -r '.data[0]."public-ip"')
echo "The instance public IPV4 is: $PUBLIC_IP"

ດຽວນີ້ທ່ານຄວນຈະສາມາດ SSH ເຂົ້າໄປຍັງອິນສະແຕນຊ໌ໂດຍໃຊ້ທີ່ຢູ່ IP ທີ່ກ່ຽວຂ້ອງໄດ້ແລ້ວ.

SSH ເຂົ້າໄປຍັງ instance ທີ່ພວມເຮັດວຽກຢູ່.
ssh "core@${PUBLIC_IP}"