This is an old revision of the document!
Cloud-Init: Dokumentasi Umum
Apa itu Cloud-Init?
Cloud-init adalah tool standar industri untuk melakukan konfigurasi otomatis pada instance/VM/container saat pertama kali boot (first boot). Tool ini banyak dipakai di platform virtualisasi dan cloud seperti Incus, LXD, Proxmox, AWS, OpenStack, dll.
Dengan cloud-init, kita tidak perlu login manual ke setiap instance untuk:
- Membuat user & set SSH key
- Install package
- Konfigurasi jaringan
- Menjalankan command tertentu saat boot
Semua bisa disiapkan sebelum instance dinyalakan.
3 Komponen Utama
Cloud-init bekerja dengan 3 jenis konfigurasi:
| Komponen | Fungsi | Diawali |
|---|---|---|
| User Data | Konfigurasi spesifik per-instance (user, SSH key, sudo, hostname, package, command) | #cloud-config |
| Vendor Data | Konfigurasi umum/default yang berlaku untuk semua instance (timezone, package standar) | #cloud-config |
| Network Config | Konfigurasi jaringan (IP, DNS, routing) | Tidak pakai #cloud-config |
Ketiganya ditulis dalam format YAML.
Setelah boot, ketiga file ini disimpan di dalam instance pada:
/var/lib/cloud/seed/nocloud-net/
meta-datauser-datavendor-datanetwork-config
Catatan: File-file ini otomatis digenerate oleh platform (Incus/LXD/dll), jangan diedit manual.
1. User Data
Bagian ini paling sering dipakai untuk konfigurasi awal sebuah instance.
Contoh: Buat User + SSH Key
#cloud-config users: - name: ilyasa groups: sudo shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ilyasa@laptop
Penjelasan singkat:
groups: sudo→ user masuk ke grup sudosudo: ALL=(ALL) NOPASSWD:ALL→ bisa sudo tanpa passwordssh_authorized_keys→ public key untuk login SSH tanpa password
Tambahan: Matikan Login Password
Supaya server hanya bisa diakses lewat SSH key (lebih aman), tambahkan:
ssh_pwauth: false
2. Vendor Data
Dipakai untuk hal-hal yang sifatnya umum dan berlaku ke banyak instance, misalnya timezone dan package dasar.
#cloud-config timezone: Asia/Jakarta package_update: true packages: - openssh-server - curl - wget - vim - htop
3. Network Config
Penting: bagian ini format-nya berbeda, tidak pakai #cloud-config.
DHCP (paling simple)
version: 2 ethernets: eth0: dhcp4: true
Static IP
Contoh kebutuhan:
- IP: 10.14.3.50/24
- Gateway: 10.14.3.1
- DNS: 10.14.3.53, 1.1.1.1
version: 2 ethernets: eth0: addresses: - 10.14.3.50/24 routes: - to: default via: 10.14.3.1 nameservers: addresses: - 10.14.3.53 - 1.1.1.1
Static IP + IPv6
version: 2 ethernets: eth0: addresses: - 10.14.3.50/24 - 2001:db8:10:14::50/64 routes: - to: default via: 10.14.3.1 - to: default via: 2001:db8:10:14::1 nameservers: addresses: - 10.14.3.53 - 1.1.1.1
Multiple IP di 1 Interface
version: 2 ethernets: eth0: addresses: - 10.14.3.50/24 - 10.14.3.51/24 - 10.14.3.52/24 routes: - to: default via: 10.14.3.1 nameservers: addresses: - 10.14.3.53
Tambah Route Khusus
Kalau butuh route tambahan selain default gateway:
version: 2 ethernets: eth0: addresses: - 10.14.3.50/24 routes: - to: default via: 10.14.3.1 - to: 10.20.0.0/24 via: 10.14.3.254 nameservers: addresses: - 10.14.3.53
Cara Verifikasi
Setelah instance boot, cek apakah cloud-init berjalan dengan baik:
cloud-init status --long
Cek file konfigurasi yang diterima instance:
cd /var/lib/cloud/seed/nocloud-net ls cat user-data cat vendor-data cat network-config
Cek hasil konfigurasi jaringan:
ip addr show eth0 # cek IP ip route # cek routing resolvectl status # cek DNS
Hal yang Perlu Diingat
- User Data & Vendor Data wajib diawali
#cloud-config. - Network Config tidak pakai
#cloud-config. - Gunakan image yang sudah mendukung cloud-init (biasanya varian
/cloud). - Untuk konfigurasi network baru, selalu pakai version: 2 — lebih ringkas dan mudah dibaca dibanding version 1.
- Cloud-init hanya berjalan saat first boot. Kalau instance sudah pernah boot dan konfigurasi diubah, biasanya perlu
cloud-init cleanlalu reboot agar konfigurasi baru diterapkan ulang.