Provisioning Fedora CoreOS di Nutanix AHV

Panduan ini menunjukkan cara melakukan provisioning node Fedora CoreOS (FCOS) baru di Nutanix AHV. Saat ini Fedora tidak mempublikasikan citra Fedora CoreOS di dalam Nutanix, jadi Anda perlu mengunggah citra Nutanix ke langganan Nutanix Prism Central Anda.

Persyaratan

Sebelum menyediakan mesin FCOS, Anda harus memiliki file konfigurasi Ignition yang berisi kustomisasi Anda. Jika belum memilikinya, lihat [Producing an Ignition File](xref:producing-ign.adoc).

Fedora CoreOS memiliki pengguna bawaan bernama core yang dapat digunakan untuk menjelajahi sistem operasi. Jika Anda ingin menggunakannya, selesaikan [konfigurasinya](xref:authentication.adoc) dengan menambahkan, misalnya, kunci SSH.

Anda juga perlu memiliki akses ke langganan Nutanix Prism Central. Contoh di bawah ini menggunakan perintah curl untuk mengakses API Nutanix Prism Central.

Mengunggah citra ke Nutanix AHV

Fedora CoreOS dirancang untuk diperbarui secara otomatis, dengan jadwal berbeda untuk setiap stream. Setelah Anda memilih stream yang relevan, gunakan API Nutanix Prism Central untuk mengunggah citra terbaru ke Nutanix:

STREAM=stable
IMAGE_NAME=<nama citra yang akan dibuat>
API_HOST=<nama host Prism Central>
API_USERNAME=<nama pengguna>
API_PASSWORD=<kata sandi>

URL=$(curl https://builds.coreos.fedoraproject.org/streams/${STREAM}.json | \
    jq -r .architectures.x86_64.artifacts.nutanix.formats.qcow2.disk.location)
ENCODED_CREDS="$(echo -n "${API_USERNAME}:${API_PASSWORD}" | base64)"

curl -X POST --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Authorization: Basic ${ENCODED_CREDS}" \
    "https://${API_HOST}:9440/api/nutanix/v3/images" \
    -d @- << EOF
{
  "spec": {
    "name": "${IMAGE_NAME}",
    "resources": {
      "image_type": "ISO_IMAGE",
      "source_uri": "${URL}",
      "architecture": "X86_64",
      "source_options": {
        "allow_insecure_connection": false
      }
    },
    "description": "string"
  },
  "api_version": "3.1.0",
  "metadata": {
    "use_categories_mapping": false,
    "kind": "image",
    "spec_version": 0,
    "categories_mapping": {},
    "should_force_translate": true,
    "entity_version": "string",
    "categories": {},
    "name": "string"
  }
}
EOF

Menjalankan instance VM

Anda dapat melakukan provisioning instance FCOS menggunakan portal web Nutanix Prism Central atau melalui API Prism Central dengan curl. Konfigurasi Ignition dapat diteruskan ke VM sebagai “skrip kustom cloud-init”. Misalnya, untuk meluncurkan VM menggunakan API:

API_HOST=<nama host Prism Central>
API_USERNAME=<nama pengguna>
API_PASSWORD=<kata sandi>
CLUSTER_REFERENCE_NAME=<nama kluster yang akan digunakan>
CLUSTER_REFERENCE_UUID=<uuid kluster yang akan digunakan>
SUBNET_REFERENCE_NAME=<nama subnet yang akan digunakan>
SUBNET_REFERENCE_UUID=<uuid subnet yang akan digunakan>
VM_NAME=<nama VM yang akan dibuat>
IGNITION_CONFIG=config.ign
IMAGE_NAME=<nama citra>

ENCODED_CONFIG="$(cat ${IGNITION_CONFIG} | base64 -w 0)"
ENCODED_CREDS="$(echo -n "${API_USERNAME}:${API_PASSWORD}" | base64)"
IMAGE_ID=$(curl -X POST --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Authorization: Basic ${ENCODED_CREDS}" \
    "https://${API_HOST}:9440/api/nutanix/v3/images/list"
    -d '{ "kind": "image","filter": "", "length": 30, "offset": 0}' | \
    jq -r '.entities[] | select(.spec.name == "${IMAGE_NAME}") | .metadata.uuid')


curl -X POST --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Authorization: Basic ${ENCODED_CREDS}" \
    "https://${API_HOST}:9440/api/nutanix/v3/vms" \
    -d @- << EOF
{
   "spec": {
      "name": "${VM_NAME}",
      "resources": {
         "power_state": "ON",
         "num_vcpus_per_socket": 1,
         "num_sockets": 1,
         "memory_size_mib": 16384,
         "disk_list": [
            {
               "disk_size_mib": 32768,
               "device_properties": {
                  "device_type": "DISK",
                  "disk_address": {
                     "device_index": 0,
                     "adapter_type": "SCSI"
                  }
               },
               "data_source_reference": {
                  "kind": "image",
                  "uuid": "${IMAGE_ID}"
               }
            }
         ],
         "nic_list": [
            {
               "nic_type": "NORMAL_NIC",
               "is_connected": true,
               "ip_endpoint_list": [
                  {
                     "ip_type": "DHCP"
                  }
               ],
               "subnet_reference": {
                  "kind": "subnet",
                  "name": "${SUBNET_REFERENCE_NAME}",
                  "uuid": "${SUBNET_REFERENCE_UUID}"
               }
            }
         ],
         "guest_tools": {
            "nutanix_guest_tools": {
               "state": "ENABLED",
               "iso_mount_state": "MOUNTED"
            }
         },
         "guest_customization": {
            "cloud_init": {
               "user_data": "${ENCODED_CONFIG}"
            },
            "is_overridable": false
         }
      },
      "cluster_reference": {
         "kind": "cluster",
         "name": "${CLUSTER_REFERENCE_NAME}",
         "uuid": "${CLUSTER_REFERENCE_UUID}"
      }
   },
   "api_version": "3.1.0",
   "metadata": {
      "kind": "vm"
   }
}
EOF

Sekarang Anda seharusnya dapat melakukan SSH ke dalam instance menggunakan alamat IP yang terkait.

Contoh Koneksi
ssh core@<ip address>