Menyediakan Fedora CoreOS di VMware

Panduan ini menunjukkan cara menyediakan node Fedora CoreOS (FCOS) baru di hypervisor VMware.

Fedora CoreOS mendukung VMware ESXi ≥ 7.0, VMware Workstation ≥ 16, dan VMware Fusion ≥ 12. Anda mungkin dapat [memodifikasi metadata OVF](xref:provisioning-vmware.adoc#_modifying_ovf_metadata) agar dapat dijalankan di produk VMware versi lama, namun kompatibilitas dan dukungan tidak dapat dijamin.

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 harus memiliki akses ke infrastruktur VMware yang berfungsi dan mendukung VM dengan versi perangkat keras minimal 13. Contoh di bawah ini menggunakan alat baris perintah [govc](https://github.com/vmware/govmomi/blob/v0.29.0/govc/README.md) untuk penyediaan vSphere jarak jauh dan [ovftool](https://code.vmware.com/web/tool/4.4.0/ovf) untuk penyediaan lokal menggunakan Workstation atau Fusion.

Mengunduh OVA

Fedora CoreOS dirancang agar diperbarui secara otomatis, dengan jadwal berbeda untuk setiap stream. Setelah Anda memilih stream yang relevan, Anda dapat mengunduh OVA terbaru:

STREAM="stable"
coreos-installer download -s $STREAM -p vmware -f ova

Sebagai alternatif, citra OVA dapat diunduh secara manual dari [halaman unduhan](https://fedoraproject.org/coreos/download/?stream=stable#baremetal).

Menyandikan konfigurasi Ignition

Untuk penyedia vmware, Ignition memerlukan dua bidang "guestinfo" yang harus ada ketika VM pertama kali dijalankan:

  • guestinfo.ignition.config.data.encoding: penyandian dari konfigurasi Ignition.

  • guestinfo.ignition.config.data: isi dari konfigurasi Ignition, yang disandikan sesuai format di atas.

Untuk kompatibilitas maksimum, disarankan menggunakan penyandian base64 dan menyiapkan konfigurasi Ignition sebagai berikut:

CONFIG_ENCODING='base64'
CONFIG_ENCODED=$(base64 -w0 example.ign)

Alternatif dari penyandian base64 biasa adalah gzip+base64 seperti dijelaskan dalam [Ignition supported platforms](https://coreos.github.io/ignition/supported-platforms/). Ini sangat berguna ketika mengirimkan konfigurasi Ignition melalui govc sebagai argumen inline. Dalam kasus tersebut, ukuran konfigurasi yang disandikan dibatasi hingga sedikit di bawah 128 KiB di Linux, 256 KiB di macOS, dan 32 KiB di Windows (8 KiB jika menggunakan cmd.exe atau PowerShell). Jika konfigurasi Anda lebih besar dari batas tersebut, Anda dapat mengompresnya dengan gzip agar bisa dikirim sebagai inline.

CONFIG_ENCODING='gzip+base64'
CONFIG_ENCODED=$(gzip -9c example.ign | base64 -w0 -)

Jika konfigurasi Ignition yang dihasilkan masih terlalu besar, Anda akan menemukan kesalahan Argument list too long atau sejenisnya. Solusi untuk masalah tersebut tergantung pada apakah Anda menggunakan vSphere atau Workstation/Fusion.

Untuk vSphere, alih-alih menyertakan file konfigurasi langsung di shell Anda, govc memungkinkan Anda menentukan jalur ke file lokal menggunakan perintah [vm.change](https://github.com/vmware/govmomi/blob/main/govc/USAGE.md#vmchange), dan alat ini akan menangani pembacaan serta penulisannya secara internal sehingga menghindari batasan shell.

CONFIG_ENCODING="gzip+base64"
CONFIG_FILE="example.ign"
CONFIG_FILE_ENCODED="${CONFIG_FILE}.gz.b64"

gzip -9c "${CONFIG_FILE}" | base64 -w0 - > "${CONFIG_FILE_ENCODED}"

govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=${CONFIG_ENCODING}"
govc vm.change -vm "${VM_NAME}" -f "guestinfo.ignition.config.data=${CONFIG_FILE_ENCODED}" # menggunakan `-f` dengan jalur file, bukan `-e`
Penggunaan gzip dalam solusi ini bersifat opsional dan terutama digunakan untuk konsistensi contoh.

Dalam kasus Workstation/Fusion, atau sebagai opsi terakhir secara umum, terdapat opsi menggunakan file konfigurasi. Alih-alih menetapkan variabel lingkungan yang berisi konfigurasi Ignition Anda, buat file konfigurasi yang kompatibel dengan ovftool di direktori tempat Anda menjalankan perintah sebagai berikut:

echo "extraConfig:guestinfo.ignition.config.data=$(base64 -w0 example.ign)" > ovftool.cfg

Menjalankan VM baru di Workstation atau Fusion

Bagian ini menunjukkan cara menggunakan fasilitas Workstation dan Fusion untuk mengonfigurasi serta menjalankan VM melalui command-line. Beberapa langkah juga dapat dilakukan melalui antarmuka grafis (UI).

Mengimpor OVA

OVA yang telah diunduh harus diimpor ke pustaka Workstation atau Fusion secara lokal. Pada saat yang sama, konfigurasi Ignition juga harus disertakan agar dapat diterapkan ke VM.

VM_NAME='fcos-node01'
FCOS_OVA='./ova-templates/fedora-coreos-31.20200210.3.0-vmware.x86_64.ova'
LIBRARY="$HOME/Virtual Machines.localized"
ovftool \
  --powerOffTarget \
  --name="${VM_NAME}" \
  --allowExtraConfig \
  --extraConfig:guestinfo.ignition.config.data.encoding="${CONFIG_ENCODING}" \
  --extraConfig:guestinfo.ignition.config.data="${CONFIG_ENCODED}" \
  "${FCOS_OVA}" "${LIBRARY}"

Setelah itu, Anda dapat memuat ulang daftar VM di antarmuka Workstation atau Fusion, dan VM baru bernama fcos-node01 akan muncul siap untuk dijalankan. Konfigurasi perangkat kerasnya dapat disesuaikan lebih lanjut pada tahap ini sebelum dijalankan.

Jika Anda menyiapkan kunci SSH untuk pengguna core default, Anda dapat melakukan SSH ke dalam VM dan menjelajahi OS:

ssh core@<ip address>

Menjalankan VM baru di vSphere

Bagian ini menunjukkan cara menggunakan fasilitas vSphere untuk mengonfigurasi dan menjalankan VM melalui command-line. Langkah-langkah serupa juga dapat dilakukan melalui antarmuka grafis (UI).

Meskipun contoh di bawah ini menggunakan govc session.login untuk autentikasi, Anda juga dapat menggunakan variabel lingkungan untuk memberikan kredensial. Lihat [dokumentasi resmi](https://github.com/vmware/govmomi/tree/main/govc#usage) untuk detailnya.

Menyiapkan VM baru

Sekarang Anda dapat membuat VM baru, dimulai dari OVA dan konfigurasi Ignition yang telah disandikan:

FCOS_OVA='./ova-templates/fedora-coreos-31.20200210.3.0-vmware.x86_64.ova'
VM_NAME='fcos-node01'
govc session.login -u 'user:password@host'
govc import.ova -name ${VM_NAME} ${FCOS_OVA}
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=${CONFIG_ENCODING}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data=${CONFIG_ENCODED}"

VM baru fcos-node01 kini tersedia untuk dijalankan. Konfigurasi perangkat kerasnya dapat disesuaikan lebih lanjut pada tahap ini sebelum dihidupkan:

govc vm.info -e "${VM_NAME}"
govc vm.power -on "${VM_NAME}"

Jika Anda menyiapkan kunci SSH untuk pengguna core default, Anda dapat melakukan SSH ke dalam VM dan menjelajahi OS:

ssh core@<ip address>

Menggunakan OVA dari pustaka vSphere

Apabila Anda ingin membuat beberapa VM berbeda berdasarkan citra dasar yang sama, Anda dapat mengimpornya ke pustaka vSphere agar dapat digunakan kembali dengan mudah:

FCOS_OVA='./ova-templates/fedora-coreos-31.20200210.3.0-vmware.x86_64.ova'
LIBRARY='fcos-images'
TEMPLATE_NAME='fcos-31.20200210.3.0'
govc session.login -u 'user:password@host'
govc library.create "${LIBRARY}"
govc library.import -n "${TEMPLATE_NAME}" "${LIBRARY}" "${FCOS_OVA}"

Pembuatan instance baru sekarang dapat dilakukan menggunakan perintah govc library.deploy:

VM_NAME='fcos-node01'
govc library.deploy "${LIBRARY}/${TEMPLATE_NAME}" "${VM_NAME}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=${CONFIG_ENCODING}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data=${CONFIG_ENCODED}"

Catatan: Jika vCenter memiliki beberapa datacenter dan datastore, Anda harus menyebutkannya secara eksplisit:

# Dapatkan resource pool menggunakan `$ govc find / -type ResourcePool`
RESOURCE_POOL="/Datacenter6.5/host/Cluster6.5/Resources"
DATASTORE="datastore-129"
govc library.deploy -pool=${RESOURCE_POOL} -ds=${DATASTORE} "${LIBRARY}/${TEMPLATE_NAME}" "${VM_NAME}"

Jaringan dan Ignition saat boot pertama

Ignition mendukung referensi konten jarak jauh dalam konfigurasi dan mengambilnya saat proses penyediaan. Karena alasan ini, pada boot pertama, instance FCOS mencoba melakukan konfigurasi jaringan otomatis melalui DHCP.

Jika pengaturan VMware Anda menggunakan konfigurasi jaringan statis, Anda dapat menimpa pengaturan DHCP otomatis ini dengan konfigurasi kustom Anda sendiri. Parameter command-line jaringan kustom ip= dapat dikonfigurasi melalui properti guestinfo seperti ditunjukkan di bawah ini, sebelum menjalankan VM untuk pertama kalinya.

Alur penyediaan mengikuti langkah-langkah biasa, ditambah satu entri tambahan guestinfo.afterburn.initrd.network-kargs.

Jika Anda menggunakan metode penyediaan selain govc, pastikan atribut guestinfo disediakan dalam Parameter Konfigurasi Lanjutan VM (dikenal juga sebagai ExtraConfig). Beberapa alat manajemen mungkin secara default menggunakan Properti vApp, yang tidak berfungsi dalam skenario ini.
VM_NAME='fcos-node02'
IFACE='ens192'
IPCFG="ip=192.0.2.42::192.0.2.1:255.255.255.0:${VM_NAME}:${IFACE}:off"

govc library.deploy "${LIBRARY}/${TEMPLATE_NAME}" "${VM_NAME}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data.encoding=${CONFIG_ENCODING}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.ignition.config.data=${CONFIG_ENCODED}"
govc vm.change -vm "${VM_NAME}" -e "guestinfo.afterburn.initrd.network-kargs=${IPCFG}"
govc vm.info -e "${VM_NAME}"
govc vm.power -on "${VM_NAME}"

Sintaks lengkap parameter ip= dijelaskan dalam [Dracut manpages](https://www.man7.org/linux/man-pages/man7/dracut.cmdline.7.html).

Untuk informasi lebih lanjut tentang jaringan saat boot pertama, lihat [dokumentasi Afterburn](https://coreos.github.io/afterburn/usage/initrd-network-cmdline/).

Pemecahan masalah saat boot pertama

Anda mungkin mengalami masalah dengan konfigurasi Ignition yang memerlukan akses ke log sistem yang muncul saat boot pertama. Untuk membuat salinan log sistem, Anda dapat menambahkan perangkat serial ke VM sebelum dijalankan. Baik vSphere maupun Workstation dan Fusion memungkinkan hal ini dan akan menyimpan outputnya ke file yang Anda tentukan.

Untuk menambahkan perangkat serial, ubah pengaturan perangkat keras VM yang dimatikan dan tambahkan Serial Port. Pilih lokasi dan nama file yang akan dibuat. Setelah itu, nyalakan VM. Jika terjadi kesalahan, periksa file yang telah Anda tentukan sebelumnya — file tersebut seharusnya berisi salinan log sistem.

Perangkat serial juga dapat ditambahkan ke VM melalui govc seperti dijelaskan dalam [dokumentasi penggunaan resmi](https://github.com/vmware/govmomi/blob/master/govc/USAGE.md#deviceserialconnect):

VM_NAME='fcos-node01'

govc device.serial.add -vm "${VM_NAME}"
govc device.serial.connect -vm "${VM_NAME}" "[datastore] ${VM_NAME}/console.log"

Memodifikasi metadata OVF

Meskipun kami menyediakan instruksi untuk memodifikasi metadata OVF, tidak ada jaminan bahwa hasil modifikasi tersebut akan menghasilkan VM tamu yang dapat digunakan.

Fedora CoreOS dirancang untuk dijalankan pada rilis VMware ESXi, VMware Workstation, dan VMware Fusion yang termasuk dalam daftar [dukungan umum](https://lifecycle.vmware.com/). Karenanya, citra OVA Fedora CoreOS untuk VMware menentukan [versi perangkat keras virtual](https://kb.vmware.com/s/article/1003746) yang mungkin tidak kompatibel dengan produk VMware versi lama yang tidak didukung. Namun, Anda dapat memodifikasi metadata OVF pada citra untuk menentukan versi perangkat keras virtual yang lebih lama.

OVA VMware merupakan arsip tar yang berisi file disk.vmdk dan coreos.ovf. Untuk mengedit metadata yang digunakan FCOS sebagai VM tamu, Anda harus mengekstrak arsip OVA tersebut, mengedit file OVF, lalu membuat file OVA baru.

Perintah contoh di bawah ini mengubah versi perangkat keras OVF dari nilai yang telah dikonfigurasi sebelumnya menjadi versi perangkat keras 13.

Nilai default di dalam OVF dapat berubah sewaktu-waktu.
tar -xvf fedora-coreos-43.20251024.3.0-vmware.x86_64.ova
sed -iE 's/vmx-[0-9]*/vmx-13/' coreos.ovf
tar -H posix -cvf fedora-coreos-43.20251024.3.0-vmware-vmx-13.x86_64.ova coreos.ovf disk.vmdk