Basis pengetahuan

Lakukan pekerjaan boot pertama dengan cloud-init

Lampirkan dokumen user-data ke pesanan dan instance hadir dengan pengguna, kunci, paket, dan firewall Anda sudah terpasang.

Apa yang berjalan, dan kapan

Setiap image Linux membawa cloud-init. Pada boot pertama ia membaca user-data yang dilampirkan ke pesanan Anda, menerapkannya sekali, dan menulis marker sehingga tidak pernah berjalan lagi. Semua itu terjadi sebelum Anda sempat mengetik apa pun, yang memang intinya: jendela antara instance ada dan dikonfigurasi adalah jendela yang seharusnya tidak Anda miliki.

Validasi dokumen sebelum Anda memesan. Pemeriksa skema menangkap kesalahan indentasi yang seharusnya membuat Anda membangun ulang:

cloud-init schema --config-file user-data.yaml --annotate

User-data yang melakukan hal-hal berguna

#cloud-config
hostname: edge-01
fqdn: edge-01.example.com
timezone: UTC

users:
  - name: deploy
    groups: [sudo]
    shell: /bin/bash
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3Nza... deploy@laptop

ssh_pwauth: false
disable_root: true

package_update: true
package_upgrade: true
packages:
  - nftables
  - vnstat
  - mtr-tiny

write_files:
  - path: /etc/ssh/sshd_config.d/10-local.conf
    permissions: "0644"
    content: |
      PermitRootLogin no
      PasswordAuthentication no
      AllowUsers deploy

runcmd:
  - [systemctl, enable, --now, nftables]
  - [systemctl, restart, ssh]

Baris pertama bukan komentar ataupun opsional. Tanpa #cloud-config dokumen diabaikan dalam diam dan instance boot seolah-olah Anda tidak melampirkan apa pun.

Pada AlmaLinux, groups: [sudo] menjadi groups: [wheel] dan layanan yang perlu dimulai ulang adalah sshd. Yang lain identik.

Melihatnya bekerja

cloud-init status --long
journalctl -u cloud-final -b
less /var/log/cloud-init-output.log

Journal memberi tahu Anda tahap mana yang gagal. cloud-init-output.log berisi keluaran sebenarnya dari entri runcmd Anda, yang merupakan tempat alasannya.

Jangan taruh rahasia di dalamnya

User-data tetap dapat dibaca dari dalam instance sepanjang hidupnya:

cloud-init query userdata

Apa pun di dalamnya tersedia untuk proses apa pun yang mencapai root, dan untuk siapa pun yang memulihkan snapshot disk. Gunakan untuk memasang kredensial yang mengambil rahasia, bukan untuk membawa rahasia itu.

Menguji tanpa membuang instance

cloud-init clean --logs --reboot

Itu menghapus marker, log, dan datasource yang di-cache, lalu reboot ke boot pertama yang baru. Jalankan di mesin sekali pakai. Jalankan di produksi dan Anda akan menemukan apa yang dilakukan runcmd Anda kedua kalinya, yang jarang sama dengan yang pertama.

Di mana berhenti

cloud-init untuk bootstrap dan tidak tahu keadaan mesin seharusnya besok. Gunakan untuk mencapai titik di mana alat sungguhan Anda dapat mengambil alih: kunci, jaringan, agen. Berhenti di sana. Enam puluh baris adalah user-data yang sehat, dan enam ratus baris adalah sistem manajemen konfigurasi tanpa cara untuk konvergen.

cloud-init query -a
cloud-init query ds.meta_data

ID Instance, kode situs, hostname, dan alamat yang ditetapkan saat boot semuanya ada di dalamnya, yang dibutuhkan skrip ketika harus mendaftarkan dirinya di suatu tempat dan belum tahu di mana ia bangun.

Siap saat Anda siap

Pilih kota. Pilih ukuran. Bayar dengan koin.

Tanpa formulir tentang siapa Anda, tanpa menunggu manusia untuk menyetujui, tanpa panggilan telepon untuk memverifikasi apa pun. Invoice dibersihkan dan kredensial masuk ke kotak masuk Anda.