Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| virtualization:lxd:cloud-init [2026/09/27 21:08] – ilyasa | virtualization:lxd:cloud-init [2026/09/28 02:46] (current) – ilyasa | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | {{indexmenu_n> |
| + | ====== | ||
| - | Cloud-init digunakan untuk konfigurasi instance LXC secara otomatis saat first boot. Konfigurasi utama: **User Data**, **Vendor Data**, dan **Network Config**. | + | ===== Apa itu Cloud-Init? ===== |
| - | Lokasi data di dalam guest: | + | Cloud-init adalah tool standar industri untuk melakukan **konfigurasi otomatis** pada instance/ |
| - | < | + | Dengan |
| - | /var/lib/cloud/ | + | |
| - | </ | + | |
| - | ===== 1. User Data ===== | + | * Membuat user & set SSH key |
| + | * Install package | ||
| + | * Konfigurasi jaringan | ||
| + | * Menjalankan command tertentu saat boot | ||
| - | Fungsi: buat user, SSH key, akses sudo, hostname, install package, jalankan command. | + | Semua bisa disiapkan **sebelum** instance dinyalakan. |
| - | Lokasi GUI: | + | {{ :images: |
| - | < | ||
| - | Instance → Configuration → Cloud Init → User Data → Override | ||
| - | </ | ||
| - | Wajib diawali < | + | ===== 3 Komponen Utama ===== |
| - | ==== Buat User + SSH Key ==== | + | Cloud-init bekerja dengan 3 jenis konfigurasi: |
| - | < | + | ^ Komponen ^ Fungsi ^ Diawali ^ |
| - | # | + | | User Data | Konfigurasi spesifik per-instance (user, SSH key, sudo, hostname, package, command) | < |
| + | | Vendor Data | Konfigurasi umum/ | ||
| + | | Network Config | Konfigurasi jaringan (IP, DNS, routing) | Tidak pakai < | ||
| - | users: | + | Ketiganya ditulis dalam format **YAML**. |
| - | - name: ilyasa | + | |
| - | groups: sudo | + | |
| - | shell: /bin/bash | + | |
| - | sudo: ALL=(ALL) NOPASSWD: | + | |
| - | ssh_authorized_keys: | + | |
| - | - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ilyasa@laptop | + | |
| - | </ | + | |
| - | Cek setelah | + | Setelah |
| - | < | + | < |
| - | id ilyasa | + | / |
| - | ssh ilyasa@IP_ADDRESS | + | |
| </ | </ | ||
| - | ==== Disable Password Authentication | + | * '' |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | **Catatan: | ||
| + | |||
| + | ===== 1. User Data ===== | ||
| + | |||
| + | Bagian ini paling sering dipakai untuk konfigurasi awal sebuah instance. | ||
| + | |||
| + | ==== Contoh: Buat User + SSH Key ==== | ||
| <code yaml> | <code yaml> | ||
| Line 54: | Line 58: | ||
| ssh_authorized_keys: | ssh_authorized_keys: | ||
| - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ilyasa@laptop | - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ilyasa@laptop | ||
| - | |||
| - | ssh_pwauth: false | ||
| </ | </ | ||
| - | ===== 2. Vendor Data ===== | + | Penjelasan singkat: |
| - | Fungsi: konfigurasi umum/ | + | * '' |
| + | * '' | ||
| + | * '' | ||
| - | Lokasi GUI: | + | ==== Tambahan: Matikan Login Password ==== |
| - | < | + | Supaya server hanya bisa diakses lewat SSH key (lebih aman), tambahkan: |
| - | Instance → Configuration → Cloud Init → Vendor Data → Override | + | |
| + | < | ||
| + | ssh_pwauth: false | ||
| </ | </ | ||
| - | Wajib diawali < | + | ===== 2. Vendor Data ===== |
| + | |||
| + | Dipakai untuk hal-hal yang sifatnya umum dan berlaku ke banyak instance, misalnya timezone dan package dasar. | ||
| <code yaml> | <code yaml> | ||
| Line 87: | Line 95: | ||
| ===== 3. Network Config ===== | ===== 3. Network Config ===== | ||
| - | Fungsi: konfigurasi interface jaringan. | + | **Penting:** bagian ini format-nya berbeda, |
| - | + | ||
| - | Lokasi GUI: | + | |
| - | + | ||
| - | < | + | |
| - | Instance → Configuration → Cloud Init → Network Config → Override | + | |
| - | </ | + | |
| - | ==== DHCP IPv4 ==== | + | ==== DHCP (paling simple) |
| <code yaml> | <code yaml> | ||
| Line 104: | Line 106: | ||
| </ | </ | ||
| - | ==== DHCP IPv4 + IPv6 ==== | + | ==== Static IP ==== |
| - | <code yaml> | + | Contoh kebutuhan: |
| - | version: 2 | + | |
| - | ethernets: | + | * Gateway: 10.14.3.1 |
| - | | + | * DNS: 10.14.3.53, 1.1.1.1 |
| - | dhcp4: true | + | |
| - | dhcp6: true | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Static IPv4 ==== | + | |
| - | + | ||
| - | Contoh: IP 10.14.3.50/ | + | |
| <code yaml> | <code yaml> | ||
| Line 133: | Line 128: | ||
| </ | </ | ||
| - | ==== Static | + | ==== Static |
| <code yaml> | <code yaml> | ||
| Line 141: | Line 136: | ||
| addresses: | addresses: | ||
| - 10.14.3.50/ | - 10.14.3.50/ | ||
| + | - 2001: | ||
| + | routes: | ||
| + | - to: default | ||
| + | via: 10.14.3.1 | ||
| + | - to: default | ||
| + | via: 2001: | ||
| nameservers: | nameservers: | ||
| addresses: | addresses: | ||
| - 10.14.3.53 | - 10.14.3.53 | ||
| + | - 1.1.1.1 | ||
| </ | </ | ||
| - | ==== Static IPv4 dengan | + | ==== Multiple IP di 1 Interface |
| <code yaml> | <code yaml> | ||
| Line 162: | Line 164: | ||
| addresses: | addresses: | ||
| - 10.14.3.53 | - 10.14.3.53 | ||
| - | - 1.1.1.1 | ||
| </ | </ | ||
| - | ==== Static IPv4 + IPv6 ==== | + | ==== Tambah Route Khusus |
| + | |||
| + | Kalau butuh route tambahan selain default gateway: | ||
| <code yaml> | <code yaml> | ||
| Line 173: | Line 176: | ||
| addresses: | addresses: | ||
| - 10.14.3.50/ | - 10.14.3.50/ | ||
| - | - 2001: | ||
| routes: | routes: | ||
| - to: default | - to: default | ||
| via: 10.14.3.1 | via: 10.14.3.1 | ||
| - | - to: default | + | - to: 10.20.0.0/ |
| - | via: 2001:db8:10:14::1 | + | via: 10.14.3.254 |
| nameservers: | nameservers: | ||
| addresses: | addresses: | ||
| - 10.14.3.53 | - 10.14.3.53 | ||
| - | - 1.1.1.1 | ||
| - | - 2001: | ||
| </ | </ | ||
| - | ===== 4. Static Routing | + | ===== Parameter |
| + | |||
| + | Selain contoh dasar di atas, berikut parameter lain yang sering dipakai. | ||
| + | |||
| + | ==== User Data — Parameter Lain ==== | ||
| + | |||
| + | **Konfigurasi user lebih lanjut:** | ||
| + | |||
| + | <code yaml> | ||
| + | # | ||
| + | |||
| + | users: | ||
| + | - name: ilyasa | ||
| + | groups: sudo | ||
| + | shell: /bin/bash | ||
| + | sudo: ALL=(ALL) NOPASSWD: | ||
| + | lock_passwd: | ||
| + | passwd: $6$rounds=4096$... | ||
| + | primary_group: | ||
| + | expiredate: ' | ||
| + | </ | ||
| + | |||
| + | **Set password tanpa hash manual (auto-generate/ | ||
| + | |||
| + | <code yaml> | ||
| + | chpasswd: | ||
| + | list: | | ||
| + | ilyasa: | ||
| + | expire: false | ||
| + | </ | ||
| + | |||
| + | **Hostname & FQDN:** | ||
| + | |||
| + | <code yaml> | ||
| + | hostname: server-001 | ||
| + | fqdn: server-001.ilyasa.id | ||
| + | manage_etc_hosts: | ||
| + | </ | ||
| + | |||
| + | **Tulis file langsung ke instance: | ||
| + | |||
| + | <code yaml> | ||
| + | write_files: | ||
| + | - path: /etc/motd | ||
| + | content: | | ||
| + | Selamat datang di server saya. | ||
| + | owner: root:root | ||
| + | permissions: | ||
| + | </ | ||
| + | |||
| + | **Jalankan command saat boot:** | ||
| + | |||
| + | <code yaml> | ||
| + | bootcmd: | ||
| + | - echo "jalan paling awal, bahkan sebelum network up" >> / | ||
| + | |||
| + | runcmd: | ||
| + | - systemctl enable --now nginx | ||
| + | - ufw allow 22/tcp | ||
| + | </ | ||
| + | |||
| + | **Matikan/ | ||
| + | |||
| + | <code yaml> | ||
| + | power_state: | ||
| + | mode: reboot | ||
| + | timeout: 30 | ||
| + | message: Rebooting setelah provisioning | ||
| + | </ | ||
| + | |||
| + | **Lain-lain yang sering dipakai: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ==== Vendor Data — Parameter Lain ==== | ||
| + | |||
| + | Vendor Data pada dasarnya bisa memakai **modul yang sama** dengan User Data, tapi biasanya diisi hal-hal default/ | ||
| + | |||
| + | **Locale & NTP:** | ||
| + | |||
| + | <code yaml> | ||
| + | locale: en_US.UTF-8 | ||
| + | |||
| + | ntp: | ||
| + | enabled: true | ||
| + | servers: | ||
| + | - 0.id.pool.ntp.org | ||
| + | - 1.id.pool.ntp.org | ||
| + | </ | ||
| + | |||
| + | **Resize disk otomatis (berguna kalau disk image lebih kecil dari alokasi): | ||
| + | |||
| + | <code yaml> | ||
| + | growpart: | ||
| + | mode: auto | ||
| + | devices: ['/' | ||
| + | </ | ||
| + | |||
| + | **Mount tambahan (misal swap):** | ||
| + | |||
| + | <code yaml> | ||
| + | mounts: | ||
| + | - [ /dev/sdb1, /mnt/data, ext4, " | ||
| + | |||
| + | swap: | ||
| + | filename: /swapfile | ||
| + | size: 1073741824 | ||
| + | </ | ||
| + | |||
| + | **Upgrade & reboot otomatis kalau perlu:** | ||
| + | |||
| + | <code yaml> | ||
| + | package_upgrade: | ||
| + | package_reboot_if_required: | ||
| + | </ | ||
| + | |||
| + | ==== Network Config — Parameter Lain ==== | ||
| + | |||
| + | Network Config v2 mengikuti sintaks **Netplan**, | ||
| + | |||
| + | **MTU custom:** | ||
| <code yaml> | <code yaml> | ||
| Line 192: | Line 313: | ||
| ethernets: | ethernets: | ||
| eth0: | eth0: | ||
| + | dhcp4: true | ||
| + | mtu: 1400 | ||
| + | </ | ||
| + | |||
| + | **Match interface berdasarkan MAC address (berguna kalau nama interface tidak konsisten): | ||
| + | |||
| + | <code yaml> | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | nic0: | ||
| + | match: | ||
| + | macaddress: " | ||
| + | set-name: eth0 | ||
| + | dhcp4: true | ||
| + | </ | ||
| + | |||
| + | **DNS search domain:** | ||
| + | |||
| + | <code yaml> | ||
| + | nameservers: | ||
| + | addresses: [10.14.3.53] | ||
| + | search: [fopens.example, | ||
| + | </ | ||
| + | |||
| + | **Kontrol DHCP lebih detail (dhcp4-overrides): | ||
| + | |||
| + | <code yaml> | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | dhcp4: true | ||
| + | dhcp4-overrides: | ||
| + | use-dns: false # abaikan DNS dari DHCP, pakai nameservers manual | ||
| + | route-metric: | ||
| + | </ | ||
| + | |||
| + | **Interface opsional (boot tidak nunggu link up, cocok untuk lab/ | ||
| + | |||
| + | <code yaml> | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | dhcp4: true | ||
| + | optional: true | ||
| + | </ | ||
| + | |||
| + | **VLAN tagging:** | ||
| + | |||
| + | <code yaml> | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | dhcp4: false | ||
| + | vlans: | ||
| + | vlan100: | ||
| + | id: 100 | ||
| + | link: eth0 | ||
| + | addresses: | ||
| + | - 10.100.0.10/ | ||
| + | </ | ||
| + | |||
| + | **Bridge (berguna untuk lab virtualisasi/ | ||
| + | |||
| + | <code yaml> | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | dhcp4: false | ||
| + | bridges: | ||
| + | br0: | ||
| + | interfaces: [eth0] | ||
| addresses: | addresses: | ||
| - 10.14.3.50/ | - 10.14.3.50/ | ||
| Line 197: | Line 389: | ||
| - to: default | - to: default | ||
| via: 10.14.3.1 | via: 10.14.3.1 | ||
| - | - to: 10.20.0.0/ | ||
| - | via: 10.14.3.254 | ||
| - | - to: 172.20.22.0/ | ||
| - | via: 10.14.3.253 | ||
| - | nameservers: | ||
| - | addresses: | ||
| - | - 10.14.3.53 | ||
| - | - 1.1.1.1 | ||
| </ | </ | ||
| - | ===== 5. Verifikasi | + | ===== Cara Verifikasi ===== |
| - | Cek status: | + | Setelah instance boot, cek apakah cloud-init berjalan dengan baik: |
| <code bash> | <code bash> | ||
| Line 215: | Line 399: | ||
| </ | </ | ||
| - | Cek data yang diberikan Incus: | + | Cek file konfigurasi |
| <code bash> | <code bash> | ||
| cd / | cd / | ||
| ls | ls | ||
| + | cat user-data | ||
| + | cat vendor-data | ||
| + | cat network-config | ||
| </ | </ | ||
| - | Output: | + | Cek hasil konfigurasi jaringan: |
| - | + | ||
| - | < | + | |
| - | meta-data | + | |
| - | network-config | + | |
| - | user-data | + | |
| - | vendor-data | + | |
| - | </ | + | |
| - | + | ||
| - | Cek isi masing-masing: | + | |
| <code bash> | <code bash> | ||
| - | cat / | + | ip addr show eth0 # cek IP |
| - | cat / | + | ip route # cek routing |
| - | cat / | + | resolvectl status |
| </ | </ | ||
| - | ===== 6. Verifikasi Network ===== | + | ===== Hal yang Perlu Diingat |
| - | + | ||
| - | <code bash> | + | |
| - | ip addr show eth0 | + | |
| - | ip route | + | |
| - | resolvectl status | + | |
| - | </ | + | |
| - | + | ||
| - | ===== 7. Catatan Penting ===== | + | |
| - | + | ||
| - | * **User Data** & **Vendor Data** harus diawali < | + | |
| - | * **Network Config** tidak pakai < | + | |
| - | * Gunakan image varian < | + | |
| - | * SSH public key diletakkan di < | + | |
| - | * Untuk config baru, pakai **Network Config v2** (lebih mudah dibaca). | + | |
| - | * Jangan edit manual file di < | + | |
| - | + | ||
| - | ===== Ringkasan Format | + | |
| - | ^ GUI Field ^ Format ^ Contoh ^ | + | * User Data & Vendor Data **wajib** diawali ''# |
| - | | User Data | Cloud-config | + | * Network Config **tidak** pakai '' |
| - | | Vendor Data | Cloud-config | < | + | * Gunakan image yang sudah mendukung |
| - | | Network Config | Network-config | < | + | * Untuk konfigurasi network baru, selalu pakai **version: 2** — lebih ringkas dan mudah dibaca dibanding version 1. |
| - | | SSH Key | Cloud-config | < | + | |
| - | | DHCP | Network-config | < | + | |
| - | | Static IP | Network-config | < | + | |