Pemecahan masalah penyediaan VM dengan cloud-init

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Jika Anda telah membuat gambar kustom umum, menggunakan cloud-init untuk melakukan penyediaan, tetapi menemukan bahwa VM tidak membuat dengan benar, Anda perlu memecahkan masalah gambar kustom Anda.

Beberapa contoh, masalah dengan penyediaan:

  • VM terjebak pada 'pembuatan' selama 40 menit, dan pembuatan VM ditandai sebagai gagal.
  • CustomData tidak diproses.
  • Disk ephemeral gagal dipasang.
  • Pengguna tidak dibuat, atau ada masalah akses pengguna.
  • Jaringan tidak disiapkan dengan benar.
  • Tukar file atau kegagalan partisi.

Artikel ini menjelaskan cara memecahkan masalah cloud-init. Untuk detail yang lebih mendalam, lihat penyelaman mendalam cloud-init.

Langkah 1: Menguji penyebaran tanpa customData

Cloud-init dapat menerima customData, yang diteruskan ke sana, ketika VM dibuat. Pertama, Anda harus memastikan hal ini tidak menyebabkan masalah dengan penyebaran. Cobalah untuk menyediakan VM tanpa melewati konfigurasi apa pun. Jika Anda menemukan VM gagal disediakan, lanjutkan dengan langkah di bawah ini, jika Anda menemukan konfigurasi yang Anda lewati tidak diterapkan buka langkah 4.

Langkah 2: Meninjau persyaratan gambar

Penyebab utama kegagalan penyediaan VM adalah gambar OS tidak memenuhi prasyarat untuk berjalan di Microsoft Azure. Pastikan gambar Anda disiapkan dengan benar sebelum mencoba menyediakannya di Microsoft Azure.

Artikel berikut ini mengilustrasikan-langkah untuk menyiapkan berbagai distribusi linux yang didukung di Microsoft Azure:

Untuk gambar cloud-init Microsoft Azure yang didukung, distribusi Linux telah memiliki semua paket dan konfigurasi yang diperlukan untuk menyediakan gambar di Microsoft Azure dengan benar. Jika Anda menemukan VM Gagal dibuat dari gambar yang dikumpulkan sendiri, coba gambar Marketplace Microsoft Azure yang didukung yang sudah dikonfigurasi untuk cloud-init, dengan customData opsional Anda. Jika customData berfungsi dengan benar dengan gambar Marketplace Microsoft Azure, mungkin ada masalah dengan gambar pilihan Anda.

Langkah 3: Mengumpulkan & meninjau log VM

Ketika VM gagal menyediakan, Microsoft Azure akan menampilkan status 'membuat', selama 20 menit, dan kemudian me-reboot VM, dan menunggu 20 menit lagi sebelum akhirnya menandai penyebaran VM sebagai gagal, sebelum akhirnya menandainya dengan kesalahan OSProvisioningTimedOut.

Saat VM berjalan, Anda akan membutuhkan log dari VM untuk memahami mengapa penyediaan gagal. Untuk memahami mengapa penyediaan VM gagal, jangan hentikan VM. Tetap jalankan VM. Anda harus menyimpan VM yang gagal dalam keadaan berjalan untuk mengumpulkan log. Untuk mengumpulkan log, gunakan salah satu metode berikut:

sudo cat /rescue/var/log/cloud-init*
sudo cat /rescue/var/log/waagent*
sudo cat /rescue/var/log/syslog*
sudo cat /rescue/var/log/rsyslog*
sudo cat /rescue/var/log/messages*
sudo cat /rescue/var/log/kern*
sudo cat /rescue/var/log/dmesg*
sudo cat /rescue/var/log/boot*

Catatan

Atau, Anda dapat membuat VM penyelamatan secara manual dengan menggunakan portal Azure. Untuk informasi selengkapnya, lihat Memecahkan masalah VM Linux dengan melampirkan disk OS ke VM pemulihan menggunakan portal Azure.

Untuk memulai pemecahan masalah awal, mulailah dengan log cloud-init, dan pahami di mana kegagalan terjadi, lalu gunakan log lain untuk menyelami lebih dalam, dan berikan wawasan tambahan.

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log
  • Serial/boot logs

Di semua log, mulailah mencari "Gagal", "PERINGATAN", "PERINGATAN", "err", "kesalahan", "ERROR". Konfigurasi setelan untuk mengabaikan pencarian peka huruf besar/kecil disarankan.

Tip

Jika Anda memecahkan masalah gambar kustom, Anda harus mempertimbangkan untuk menambahkan pengguna selama gambar. Jika penyediaan gagal untuk mengatur pengguna admin, Anda masih dapat masuk ke OS.

Menganalisis log

Berikut adalah detail lebih lanjut tentang apa yang harus dicari di setiap log cloud-init.

/var/log/cloud-init.log

Secara default, semua peristiwa cloud-init dengan prioritas debug atau lebih tinggi, ditulis ke /var/log/cloud-init.log. Ini memberikan log verbose dari setiap peristiwa yang terjadi selama inisialisasi cloud-init.

Contohnya:

2019-10-10 04:51:25,321 - util.py[DEBUG]: Failed mount of '/dev/sr0' as 'auto': Unexpected error while running command.
Command: ['mount', '-o', 'ro,sync', '-t', 'auto', u'/dev/sr0', '/run/cloud-init/tmp/tmpLIrklc']
Exit code: 32
Reason: -
Stdout:
Stderr: mount: unknown filesystem type 'udf'
2020-01-31 00:21:53,352 - DataSourceAzure.py[WARNING]: /dev/sr0 was not mountable

Setelah Anda menemukan kesalahan atau peringatan, baca mundur di log cloud-init untuk memahami apa yang coba dilakukan cloud-init sebelum menemukan kesalahan atau peringatan. Dalam banyak kasus cloud-init akan menjalankan perintah OS atau melakukan operasi penyediaan sebelum kesalahan, yang dapat memberikan wawasan mengapa kesalahan muncul di log. Contoh berikut menunjukkan bahwa cloud-init mencoba memasang perangkat tepat sebelum terjadi kesalahan.

2019-10-10 04:51:24,010 - util.py[DEBUG]: Running command ['mount', '-o', 'ro,sync', '-t', 'auto', u'/dev/sr0', '/run/cloud-init/tmp/tmpXXXXX'] with allowed return codes [0] (shell=False, capture=True)

Jika Anda memiliki akses ke Konsol Serial, Anda dapat mencoba menjalankan ulang perintah yang coba dijalankan oleh cloud-init.

Pencatatan /var/log/cloud-init.log juga dapat dikonfigurasi ulang dalam /etc/cloud/cloud.cfg.d/05_logging.cfg. Untuk detail selengkapnya tentang pengelogan cloud-init, lihat dokumentasi cloud-init.

/var/log/cloud-init-output.log

Anda bisa mendapatkan informasi dari stdout dan stderr selama tahapan cloud-init. Informasi tersebut biasanya melibatkan informasi tabel perutean, informasi jaringan, informasi verifikasi kunci host ssh, stdout dan stderr untuk setiap tahap cloud-init, bersama dengan tanda waktu untuk setiap tahap. Jika diinginkan, pencatatan stderr dan stdout dapat dikonfigurasi ulang dari /etc/cloud/cloud.cfg.d/05_logging.cfg.

Serial/boot logs

Cloud-init memiliki banyak dependensi, ini didokumentasikan dalam prasyarat yang diperlukan untuk gambar di Microsoft Azure, seperti jaringan, penyimpanan, kemampuan untuk memasang ISO, dan memasang serta memformat disk sementara. Salah satu dari dependensi ini dapat menimbulkan kesalahan dan menyebabkan cloud-init gagal. Misalnya, jika VM tidak bisa mendapatkan sewa DHCP, cloud-init akan gagal.

Jika Anda masih tidak dapat mengisolasi mengapa cloud-init gagal menyediakan, maka Anda perlu memahami tahapan cloud-init apa, dan kapan modul dijalankan. Lihat Menyelam lebih dalam ke cloud-init untuk detail selengkapnya.

Langkah 4: Menyelidiki mengapa konfigurasi tidak diterapkan

Tidak setiap kegagalan dalam cloud-init mengakibatkan kegagalan penyediaan yang fatal. Misalnya, jika Anda menggunakan modul runcmd dalam konfigurasi cloud-init, kode keluar bukan nol dari perintah yang dijalankannya akan menyebabkan penyediaan VM gagal. Kegagalan ini karena VM berjalan setelah fungsionalitas penyediaan inti yang terjadi pada 3 tahap pertama cloud-init. Untuk memecahkan masalah mengapa konfigurasi tidak berlaku, tinjau log di Langkah 3, dan modul cloud-init secara manual. Contohnya:

  • runcmd - Apakah skrip berjalan tanpa kesalahan? Jalankan konfigurasi secara manual dari terminal untuk memastikan mereka berjalan seperti yang diharapkan.
  • Menginstal paket - apakah VM memiliki akses ke repositori paket?
  • Anda juga harus memeriksa customData konfigurasi data yang disediakan untuk VM ini terletak di /var/lib/cloud/instances/<unique-instance-identifier>/user-data.txt.

Langkah berikutnya

Jika Anda masih tidak dapat mengisolasi alasan cloud-init tidak menjalankan konfigurasi, Anda perlu melihat lebih dekat apa yang terjadi di setiap tahap cloud-init, dan ketika modul berjalan. Lihat Menyelam lebih dalam ke konfigurasi cloud-init untuk informasi selengkapnya.