Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{indexmenu_n> 0010}} ====== LXD: Cloud-Init ====== ===== 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. {{ :images:capture:lxd-cloud-initscreenshot_2026-09-28_02-40-25.png?nolink&800 |}} ===== 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) | <code>#cloud-config</code> | | Vendor Data | Konfigurasi umum/default yang berlaku untuk semua instance (timezone, package standar) | <code>#cloud-config</code> | | Network Config | Konfigurasi jaringan (IP, DNS, routing) | Tidak pakai <code>#cloud-config</code> | Ketiganya ditulis dalam format **YAML**. Setelah boot, ketiga file ini disimpan di dalam instance pada: <code> /var/lib/cloud/seed/nocloud-net/ </code> * ''meta-data'' * ''user-data'' * ''vendor-data'' * ''network-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 ==== <code yaml> #cloud-config users: - name: ilyasa groups: sudo shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ilyasa@laptop </code> Penjelasan singkat: * ''groups: sudo'' → user masuk ke grup sudo * ''sudo: ALL=(ALL) NOPASSWD:ALL'' → bisa sudo tanpa password * ''ssh_authorized_keys'' → public key untuk login SSH tanpa password ==== Tambahan: Matikan Login Password ==== Supaya server hanya bisa diakses lewat SSH key (lebih aman), tambahkan: <code yaml> ssh_pwauth: false </code> ===== 2. Vendor Data ===== Dipakai untuk hal-hal yang sifatnya umum dan berlaku ke banyak instance, misalnya timezone dan package dasar. <code yaml> #cloud-config timezone: Asia/Jakarta package_update: true packages: - openssh-server - curl - wget - vim - htop </code> ===== 3. Network Config ===== **Penting:** bagian ini format-nya berbeda, **tidak** pakai ''#cloud-config''. ==== DHCP (paling simple) ==== <code yaml> version: 2 ethernets: eth0: dhcp4: true </code> ==== Static IP ==== Contoh kebutuhan: * IP: 10.14.3.50/24 * Gateway: 10.14.3.1 * DNS: 10.14.3.53, 1.1.1.1 <code yaml> 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 </code> ==== Static IP + IPv6 ==== <code yaml> 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 </code> ==== Multiple IP di 1 Interface ==== <code yaml> 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 </code> ==== Tambah Route Khusus ==== Kalau butuh route tambahan selain default gateway: <code yaml> 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 </code> ===== Parameter Tambahan yang Berguna ===== Selain contoh dasar di atas, berikut parameter lain yang sering dipakai. ==== User Data — Parameter Lain ==== **Konfigurasi user lebih lanjut:** <code yaml> #cloud-config users: - name: ilyasa groups: sudo shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL lock_passwd: false # izinkan login password (default: true = dikunci) passwd: $6$rounds=4096$... # hash password (bukan plaintext) primary_group: ilyasa expiredate: '2026-12-31' # akun expired otomatis </code> **Set password tanpa hash manual (auto-generate/plaintext):** <code yaml> chpasswd: list: | ilyasa:password123 expire: false </code> **Hostname & FQDN:** <code yaml> hostname: server-001 fqdn: server-001.ilyasa.id manage_etc_hosts: true </code> **Tulis file langsung ke instance:** <code yaml> write_files: - path: /etc/motd content: | Selamat datang di server saya. owner: root:root permissions: '0644' </code> **Jalankan command saat boot:** <code yaml> bootcmd: - echo "jalan paling awal, bahkan sebelum network up" >> /var/log/boot-note.log runcmd: - systemctl enable --now nginx - ufw allow 22/tcp </code> **Matikan/reboot otomatis setelah cloud-init selesai:** <code yaml> power_state: mode: reboot # pilihan: poweroff, reboot, halt timeout: 30 message: Rebooting setelah provisioning </code> **Lain-lain yang sering dipakai:** * ''disable_root: true'' → nonaktifkan login root langsung * ''final_message: "Provisioning selesai dalam $UPTIME detik"'' → pesan di akhir proses ==== Vendor Data — Parameter Lain ==== Vendor Data pada dasarnya bisa memakai **modul yang sama** dengan User Data, tapi biasanya diisi hal-hal default/umum untuk semua instance. **Locale & NTP:** <code yaml> locale: en_US.UTF-8 ntp: enabled: true servers: - 0.id.pool.ntp.org - 1.id.pool.ntp.org </code> **Resize disk otomatis (berguna kalau disk image lebih kecil dari alokasi):** <code yaml> growpart: mode: auto devices: ['/'] </code> **Mount tambahan (misal swap):** <code yaml> mounts: - [ /dev/sdb1, /mnt/data, ext4, "defaults,nofail", "0", "2" ] swap: filename: /swapfile size: 1073741824 # 1GB dalam byte </code> **Upgrade & reboot otomatis kalau perlu:** <code yaml> package_upgrade: true package_reboot_if_required: true </code> ==== Network Config — Parameter Lain ==== Network Config v2 mengikuti sintaks **Netplan**, jadi parameter-parameter Netplan berikut ini berlaku juga. **MTU custom:** <code yaml> version: 2 ethernets: eth0: dhcp4: true mtu: 1400 </code> **Match interface berdasarkan MAC address (berguna kalau nama interface tidak konsisten):** <code yaml> version: 2 ethernets: nic0: match: macaddress: "00:16:3e:xx:xx:xx" set-name: eth0 dhcp4: true </code> **DNS search domain:** <code yaml> nameservers: addresses: [10.14.3.53] search: [fopens.example, lab.local] </code> **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: 100 </code> **Interface opsional (boot tidak nunggu link up, cocok untuk lab/testing):** <code yaml> version: 2 ethernets: eth0: dhcp4: true optional: true </code> **VLAN tagging:** <code yaml> version: 2 ethernets: eth0: dhcp4: false vlans: vlan100: id: 100 link: eth0 addresses: - 10.100.0.10/24 </code> **Bridge (berguna untuk lab virtualisasi/container):** <code yaml> version: 2 ethernets: eth0: dhcp4: false bridges: br0: interfaces: [eth0] addresses: - 10.14.3.50/24 routes: - to: default via: 10.14.3.1 </code> ===== Cara Verifikasi ===== Setelah instance boot, cek apakah cloud-init berjalan dengan baik: <code bash> cloud-init status --long </code> Cek file konfigurasi yang diterima instance: <code bash> cd /var/lib/cloud/seed/nocloud-net ls cat user-data cat vendor-data cat network-config </code> Cek hasil konfigurasi jaringan: <code bash> ip addr show eth0 # cek IP ip route # cek routing resolvectl status # cek DNS </code> ===== 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 clean'' lalu reboot agar konfigurasi baru diterapkan ulang. virtualization/lxd/cloud-init.txt Last modified: 2026/09/28 02:46by ilyasa