Praktik terbaik untuk menyediakan dan mengonfigurasi server serta sistem edge dan bare metal secara otomatis

Last reviewed 2023-02-23 UTC

Dokumen ini menyarankan praktik terbaik untuk merancang dan menerapkan proses penyediaan serta konfigurasi yang andal dan otomatis untuk perangkat yang berjalan di lingkungan edge Anda, seperti berikut:

Baca dokumen ini jika Anda mendesain proses penyediaan dan konfigurasi untuk perangkat edge dan IoT, atau jika Anda ingin mempelajari lebih lanjut praktik terbaik untuk menyediakan jenis perangkat ini.

Dokumen ini adalah bagian dari serangkaian dokumen yang memberikan informasi tentang arsitektur IoT di Google Cloud dan migrasi dari IoT Core. Dokumen lain dalam rangkaian ini mencakup hal berikut:

Penyediaan dan konfigurasi perangkat besar secara manual rentan terjadi kesalahan manusia dan tidak terskalakan seiring pertumbuhan perangkat Anda. Misalnya, Anda mungkin lupa menjalankan tugas penyediaan atau konfigurasi penting, atau Anda mungkin mengandalkan proses yang tidak terdokumentasi sepenuhnya atau sebagian. Proses penyediaan dan konfigurasi yang sepenuhnya otomatis dan cepat membantu mengatasi masalah ini. Fitur ini juga membantu Anda mengelola siklus proses setiap perangkat mulai dari produksi, penghapusan, hingga pembuangan.

Terminologi

Istilah-istilah berikut ini penting untuk memahami cara mengimplementasikan dan membangun proses penyediaan serta konfigurasi otomatis perangkat:

  • Perangkat edge: Perangkat yang di- deploy pada edge lingkungan Anda dan dekat dengan data yang ingin diproses.
  • Proses penyediaan: Rangkaian tugas yang harus Anda selesaikan dalam menyiapkan perangkat untuk konfigurasi.
  • Proses konfigurasi: Rangkaian tugas yang harus Anda selesaikan untuk membuat perangkat siap beroperasi di lingkungan tertentu.
  • Manajemen konfigurasi: Kumpulan tugas yang terus dilakukan untuk mengelola konfigurasi lingkungan dan perangkat.
  • Image dasar: Image firmware atau sistem operasi (OS) yang berfungsi minimal dan diproduksi oleh perusahaan Anda atau oleh produsen perangkat atau OS.
  • Golden image: Image OS atau firmware yang tidak dapat diubah dan dibuat untuk perangkat atau disiapkan dari image dasar. Golden image mencakup semua informasi data dan konfigurasi yang diperlukan perangkat Anda untuk menyelesaikan tugas yang diberikan. Anda dapat menyiapkan berbagai golden image untuk menyelesaikan berbagai tugas. Sinonim untuk jenis golden image meliputi ragam, spins, dan arketipe.
  • Silver image: Image OS atau firmware yang disiapkan untuk perangkat dengan menerapkan sedikit perubahan pada golden image atau image dasar. Perangkat yang menjalankan silver image akan menyelesaikan penyediaan dan konfigurasi saat booting pertama, sesuai dengan kebutuhan kasus penggunaan yang harus didukung perangkat tersebut.
  • Perangkat seed: Perangkat yang melakukan bootstrap lingkungan tanpa dependensi eksternal.
  • Booting jaringan: Kumpulan teknologi yang memungkinkan perangkat mendapatkan software dan semua informasi konfigurasi terkait dari jaringan, bukan dari sistem penyimpanan yang dihubungkan ke perangkat.

Praktik terbaik proses penyediaan dan konfigurasi

Untuk menetapkan sasaran dan menghindari kesalahan umum, terapkan praktik terbaik penyediaan dan konfigurasi berikut. Setiap praktik terbaik dibahas pada bagiannya sendiri.

Mengotomatiskan proses penyediaan dan konfigurasi

Selama booting pertama, atau kapan pun diperlukan, perangkat Anda harus dapat menyediakan dan mengonfigurasi sendiri menggunakan image software yang diinstal di dalamnya.

Untuk menghindari penerapan logika yang diperlukan selama proses penyediaan dan konfigurasi, Anda dapat menggunakan alat yang memberi dasar yang diperlukan untuk mengorkestrasi dan mengimplementasikan proses tersebut. Misalnya, Anda dapat menggunakan cloud-init dan NoCloud datasource, serta pembuatan skrip atau alat pengelolaan konfigurasi, seperti Ansible, Puppet, atau Chef, yang berjalan pada host lokal.

Untuk merancang proses penyediaan dan konfigurasi yang andal, pastikan semua langkah dan tugas yang dilakukan selama proses tersebut valid, mungkin dengan cara otomatis. Misalnya, Anda dapat menggunakan framework pengujian kepatuhan otomatis, seperti InSpec, untuk memverifikasi bahwa proses penyediaan dan konfigurasi berjalan seperti yang diharapkan.

Praktik terbaik ini membantu menghindari titik tunggal kegagalan dan kebutuhan akan intervensi manual saat Anda harus menyelesaikan penyediaan dan konfigurasi perangkat.

Menghindari perangkat tujuan khusus

Saat mendesain perangkat edge, minimalkan varians pada tujuan dan spesialisasi. Rekomendasi ini bukan berarti semua perangkat edge harus sama satu sama lain atau memiliki tujuan yang sama, tetapi harus sebisa mungkin homogen. Misalnya, Anda dapat menentukan arketipe perangkat berdasarkan jenis beban kerja yang perlu didukung. Kemudian, Anda dapat men-deploy dan mengelola perangkat sesuai dengan properti arketipe tersebut.

Untuk memastikan bahwa Anda mengikuti praktik terbaik ini, pastikan Anda dapat memilih perangkat secara acak dari arsitektur tertentu, lalu melakukan hal berikut:

  • Perlakukan perangkat seperti perangkat lain dari arsitektur yang sama. Tindakan ini berarti Anda memiliki efisiensi operasional.
  • Ganti perangkat dengan perangkat yang memiliki arsitektur sama tanpa penyesuaian tambahan. Tindakan ini berarti Anda telah menerapkan arketipe tersebut dengan benar.

Praktik terbaik ini memastikan Anda mengurangi varians dalam perangkat, sehingga mengurangi fragmentasi pada lingkungan serta dalam proses penyediaan dan konfigurasi.

Menggunakan perangkat seed untuk mem-bootstrap lingkungan Anda

Saat menyediakan dan mengonfigurasi perangkat, Anda mungkin menemukan masalah dependensi berulang: perangkat Anda memerlukan infrastruktur pendukung untuk menyediakan dan mengonfigurasi secara mandiri, tetapi infrastruktur tersebut tidak tersedia karena Anda masih harus menyediakan dan mengonfigurasinya.

Anda dapat mengatasi masalah ini dengan perangkat seed. Perangkat seed memiliki tujuan khusus sementara. Setelah menyelesaikan tugas dengan tujuan khusus, perangkat akan menyesuaikan perilaku dan statusnya dengan arketipe yang relevan.

Misalnya, jika menggunakan cloud-init untuk menginisialisasi perangkat secara otomatis, Anda mungkin perlu mengonfigurasi sumber data NoCloud cloud-init dengan cara berikut:

  1. Berikan data sumber data NoCloud ke perangkat seed melalui sistem file.
  2. Tunggu hingga perangkat seed menyelesaikan penyediaan dan konfigurasi sendiri dengan tujuan khusus, yang mencakup penyaluran data NoCloud datasource ke perangkat lain melalui jaringan tersebut.

    Jalankan proses penyediaan dan konfigurasi pada perangkat seed, kemudian tunggu hingga kondisi untuk melepaskan tujuan khusus sementara perangkat seed terpenuhi. Beberapa contoh kondisi tersebut adalah:

    • Apakah ada perangkat lain di lingkungan yang menyalurkan data NoCloud datasource melalui jaringan?
    • Apakah ada cukup node di cluster?
    • Apakah pencadangan pertama selesai?
    • Apakah situs pemulihan dari bencana sudah siap?
  3. Penyediaan dan konfigurasi perangkat lain yang mendownload data NoCloud datasource melalui jaringan dari perangkat seed. Beberapa perangkat harus dapat menyalurkan data NoCloud datasource melalui jaringan.

  4. Proses penyediaan dan konfigurasi pada perangkat seed dilanjutkan karena penghentian tujuan khusus perangkat seed terpenuhi: ada perangkat lain yang menyalurkan data NoCloud datasource melalui jaringan ini.

  5. Proses penyediaan dan konfigurasi pada perangkat seed menghapus tujuan khusus, sehingga perangkat seed tidak dapat dibedakan dari perangkat lain dengan arketipe yang sama.

Praktik terbaik ini memastikan bahwa Anda dapat mem-bootstrap lingkungan, bahkan tanpa mendukung infrastruktur dan tanpa bertentangan dengan praktik terbaik Hindari perangkat tujuan khusus.

Meminimalkan stateful perangkat

Saat mendesain perangkat edge, Anda harus meminimalkan kebutuhan untuk menyimpan informasi stateful. Perangkat edge mungkin memiliki resource hardware yang terbatas, atau di-deploy di lingkungan yang sulit. Meminimalkan informasi stateful yang diperlukan untuk berfungsi akan menyederhanakan proses penyediaan, konfigurasi, pencadangan, dan pemulihan karena Anda dapat memperlakukan perangkat secara homogen. Jika perangkat stateless mulai mengalami malfungsi dan tidak dapat dipulihkan, misalnya, Anda dapat menukarnya dengan perangkat lain dari arketipe yang sama tanpa gangguan atau kehilangan data.

Praktik terbaik ini membantu Anda menghindari masalah tak terduga karena kehilangan data, atau proses yang terlalu kompleks. Sebagian besar kompleksitas berasal dari kebutuhan untuk mendukung armada perangkat yang heterogen.

Mem-build image OS dan firmware secara otomatis

Untuk menghindari tugas penyediaan dan konfigurasi yang mahal saat perangkat pertama kali di-booting, dan untuk mengganti resource perangkat, sesuaikan image OS dan firmware sebelum membuat ketersediaannya. Misalnya, Anda dapat menginstal dependensi langsung pada image, bukan menginstalnya saat setiap perangkat melakukan booting untuk pertama kali.

Saat menyiapkan image OS dan firmware untuk perangkat, Anda mulai dari image dasar. Saat menyesuaikan image dasar, Anda dapat melakukan hal berikut:

  • Buat golden image. Golden image berisi semua dependensi pada image sehingga perangkat Anda tidak perlu menginstal dependensi tersebut pada booting pertama. Membuat golden image mungkin merupakan tugas yang rumit, tetapi memungkinkan perangkat Anda menghemat waktu dan resource selama penyediaan dan konfigurasi.
  • Buat silver image. Tidak seperti golden image, perangkat yang menjalankan silver image menyelesaikan semua proses penyediaan dan konfigurasi selama booting pertama. Membuat silver image mungkin tidak terlalu rumit dibandingkan membuat golden image, tetapi perangkat yang menjalankan gambar perak menghabiskan lebih banyak waktu dan resource selama penyediaan dan konfigurasi.

Anda dapat menyesuaikan image OS dan firmware sebagai bagian dari proses continuous integration dan continuous deployment (CI/CD), serta otomatis menyediakan image yang disesuaikan untuk perangkat Anda setelah validasi. Proses CI/CD yang Anda implementasikan dengan alat seperti Cloud Build, GitHub Actions, GitLab CI/CD, atau Jenkins, dapat melaksanakan urutan tugas berikut:

  1. Melakukan validasi otomatis terhadap image yang disesuaikan.
  2. Menayangkan image yang disesuaikan di repositori tempat perangkat Anda bisa mendapatkannya.

Jika lingkungan CI/CD dan OS atau firmware dengan image yang perlu di-build menggunakan arsitektur hardware yang berbeda, Anda dapat menggunakan alat seperti QEMU untuk mengemulasikan arsitektur tersebut. Contohnya, Anda dapat mengemulasikan arsitektur hardware dari ARM family pada arsitektur x86_64.

Untuk menyesuaikan image OS atau firmware, Anda harus dapat memodifikasi dan memverifikasi modifikasi tersebut di lingkungan pengujian sebelum menginstalnya di perangkat edge. Alat seperti chroot memungkinkan Anda mengubah direktori secara virtual, tetapi tidak dapat mengubah direktori root secara fisik sebelum menjalankan perintah.

Misalnya, menjalankan perintah chroot /mnt/test-image apt-get install PACKAGENAME menyebabkan sistem berperilaku seolah-olah /mnt/test-image adalah direktori root image OS atau firmware, bukan / dan menginstal PACKAGENAME di direktori tersebut.

Praktik terbaik ini membantu Anda menyesuaikan image OS dan firmware sebelum menyediakan image untuk perangkat Anda.

Mengorkestrasi workload dengan andal yang berjalan di perangkat Anda

Jika perangkat Anda mendukung workload heterogen, Anda dapat menggunakan alat berikut untuk mengorkestrasi workload tersebut dan mengelola siklus prosesnya:

  • Sistem orkestrasi workload: Menggunakan sistem orkestrasi workload seperti Kubernetes, cocok untuk workload yang memiliki orkestrasi kompleks atau kebutuhan pengelolaan siklus proses. Sistem ini juga cocok untuk workload yang menjangkau beberapa komponen. Dalam kedua kasus tersebut, Anda tidak perlu menerapkan secara mandiri orkestrasi dan logika pengelolaan siklus proses workload tersebut. Jika perangkat memiliki resource yang terbatas, Anda dapat menginstal distribusi Kubernetes ringan yang membutuhkan lebih sedikit resource daripada yang kanonis, seperti MicroK8s, K3s, atau GKE di Bare Metal yang diinstal dengan profil edge.
  • Sistem init: Menggunakan sistem init, seperti systemd, cocok untuk workload dengan karakteristik berikut:

    • Kebutuhan orkestrasi sederhana
    • Kurangnya resource untuk mendukung sistem orkestrasi workload
    • Workload yang tidak dapat disimpan dalam container

Setelah menerapkan sistem untuk mengorkestrasi workload, Anda juga dapat menggunakannya untuk menjalankan tugas yang merupakan bagian dari proses penyediaan dan konfigurasi. Contohnya, jika perlu menjalankan alat pengelolaan konfigurasi sebagai bagian dari proses penyediaan dan konfigurasi, Anda dapat menggunakan sistem orkestrasi workload seperti yang dilakukan dengan workload lainnya. Untuk contoh metodologi ini, lihat Melakukan bootstrap node GKE secara otomatis dengan DaemonSets. Artikel ini menjelaskan cara menggunakan Kubernetes untuk menjalankan tugas konfigurasi dan penyediaan dengan hak istimewa dan tidak istimewa pada node cluster.

Praktik terbaik ini membantu memastikan bahwa Anda dapat mengatur workload yang berjalan di perangkat.

Memverifikasi, mengautentikasi, dan menghubungkan perangkat

Jika Anda perlu memastikan apakah perangkat perlu terhubung ke sistem eksternal, seperti perangkat lain atau ke backend, pertimbangkan rekomendasi pada subbagian berikut.

Praktik koneksi yang perlu diterapkan

  • Mengautentikasi pihak lain yang membuat permintaan informasi sebelum bertukar informasi apa pun.
  • Pastikan informasi yang ditransmisikan tidak berpindah melalui saluran yang tidak diharapkan.
  • Andalkan trusted execution environment untuk menangani secret, seperti kunci enkripsi, kunci autentikasi, dan sandi.
  • Verifikasi integritas dan keaslian semua image OS atau firmware sebelum digunakan.
  • Verifikasi validitas, integritas, dan keaslian konfigurasi yang disediakan pengguna.
  • Batasi permukaan serangan dengan tidak menginstal perangkat lunak yang tidak diperlukan dan menghapus semua yang sudah ada di perangkat Anda.
  • Batasi penggunaan operasi dan akun dengan hak istimewa.
  • Verifikasi integritas kasus perangkat jika kasus tersebut perlu tahan dari manipulasi dan gangguan fisik.

Praktik koneksi yang harus dihindari

  • Jangan mengirimkan informasi sensitif melalui saluran yang tidak terenkripsi.
  • Jangan membiarkan akses istimewa terbuka, seperti berikut:
    • Port dan konsol serial virtual atau fisik dengan hak istimewa yang ditingkatkan, meskipun port hanya dapat diakses jika ada orang yang merusak perangkat secara fisik.
    • Endpoint yang merespons permintaan dari jaringan dan yang dapat menjalankan operasi dengan hak istimewa.
  • Jangan mengandalkan kredensial hardcode di image OS atau firmware, konfigurasi, atau kode sumber Anda.
  • Jangan mengungkapkan informasi apa pun yang dapat membantu penyerang mengumpulkan informasi untuk mendapatkan hak istimewa yang ditingkatkan. Misalnya, Anda harus mengenkripsi data di perangkat dan menonaktifkan sistem pelacakan serta logging yang tidak diperlukan di perangkat produksi.
  • Jangan biarkan pengguna dan workload mengeksekusi kode arbitrer.

Praktik terbaik ini membantu Anda:

  • Mendesain saluran komunikasi yang aman untuk perangkat Anda.
  • Menghindari potensi backdoor yang mengakali perimeter keamanan perangkat Anda.
  • Memastikan perangkat Anda tidak mengekspos antarmuka tidak sah yang dapat dieksploitasi oleh penyerang.

Memantau perangkat Anda

Mengumpulkan informasi tentang status perangkat tanpa intervensi manual sangat penting untuk keandalan lingkungan Anda. Pastikan perangkat melaporkan semua data yang Anda perlukan secara otomatis. Ada dua alasan utama untuk mengumpulkan dan memantau data. Alasan pertama mengumpulkan dan memantau data adalah untuk memastikan bahwa perangkat Anda berfungsi sebagaimana mestinya. Alasan kedua mengumpulkan dan memantau data adalah untuk secara proaktif menemukan masalah dan melakukan pemeliharaan preventif. Misalnya, Anda dapat mengumpulkan metrik dan peristiwa pemantauan dengan Cloud Monitoring.

Untuk membantu menyelidiki dan memecahkan masalah, sebaiknya desain dan implementasikan proses untuk mengumpulkan data diagnostik resolusi tinggi, seperti informasi pemantauan, pelacakan, dan proses debug yang mendetail, bersama dengan proses yang memantau perangkat selama beroperasi normal. Mengumpulkan data diagnostik beresolusi tinggi dan mentransfernya melalui jaringan bisa cukup mahal dalam hal resource perangkat, seperti komputasi, penyimpanan data, dan daya listrik. Oleh karena itu, sebaiknya aktifkan proses untuk mengumpulkan data diagnostik resolusi tinggi hanya jika diperlukan, dan hanya untuk perangkat yang perlu diselidiki lebih lanjut. Misalnya, jika salah satu perangkat Anda tidak berfungsi sebagaimana mestinya, dan data pemantauan reguler yang dilaporkan perangkat tidak cukup untuk mendiagnosis masalah secara menyeluruh, Anda dapat mengaktifkan pengumpulan data resolusi tinggi untuk perangkat tersebut sehingga memberikan informasi lebih lanjut yang dapat membantu menyelidiki penyebab masalah.

Praktik terbaik ini memastikan bahwa Anda tidak meninggalkan perangkat dalam status yang tidak diketahui, dan Anda memiliki cukup data untuk menentukan kondisi dan keadaan performa perangkat Anda.

Mendukung booting dan upgrade tanpa pengawasan

Saat mendesain proses penyediaan dan konfigurasi, pastikan perangkat Anda dapat melakukan booting tanpa pengawasan dan Anda memiliki infrastruktur yang diperlukan. Dengan menerapkan mekanisme booting tanpa pengawasan yang mendukung booting pertama dan pengiriman upgrade over the air (OTA), Anda meningkatkan pemeliharaan infrastruktur. Dengan menggunakan booting tanpa pengawasan, Anda tidak perlu lagi menghadiri setiap perangkat secara manual saat melakukan booting atau melakukan upgrade. Kehadiran perangkat yang besar secara manual rentan terhadap error karena operator mungkin melewatkan atau salah melakukan tindakan, atau mereka mungkin tidak memiliki cukup waktu untuk melakukan tindakan yang diperlukan pada setiap perangkat dalam fleet.

Selain itu, Anda tidak perlu mempersiapkan setiap perangkat terlebih dahulu untuk mem-booting image OS atau firmware yang benar. Anda dapat merilis versi baru image OS atau firmware, dan menyediakan versi tersebut sebagai salah satu opsi yang dapat dipilih perangkat saat perangkat mengambil petunjuk booting dari jaringan.

Praktik terbaik ini membantu Anda memastikan perangkat dapat melakukan booting dan upgrade yang otomatis dan tanpa pengawasan.

Mendesain dan menerapkan proses yang kuat

Bahkan dengan proses penyediaan dan konfigurasi yang sepenuhnya otomatis, error dapat terjadi yang mencegah proses tersebut selesai dengan benar, sehingga membuat perangkat Anda dalam keadaan tidak konsisten. Bantu pastikan perangkat Anda dapat memulihkan dari kegagalan tersebut dengan menerapkan mekanisme coba lagi dan penggantian. Jika tidak dapat menyelesaikan tugas yang merupakan bagian dari proses penyediaan dan konfigurasi, perangkat harus secara otomatis mencoba memulihkan dari kegagalan tersebut. Setelah pulih dari kegagalan atau kembali ke status kerja, perangkat dapat melanjutkan proses yang berjalan dari titik kegagalan proses.

Praktik terbaik ini membantu Anda mendesain dan menerapkan proses penyediaan dan konfigurasi yang kuat.

Mendukung seluruh siklus proses perangkat

Saat mendesain proses penyediaan dan konfigurasi, pastikan proses tersebut dapat mengelola seluruh siklus proses perangkat. Mengelola siklus proses perangkat secara efektif mencakup perencanaan penghentian dan pembuangan, meskipun perangkat Anda seharusnya berjalan untuk waktu yang relatif lama.

Jika Anda tidak mengelola siklus proses perangkat, tindakan ini dapat menimbulkan masalah, seperti berikut:

  • Biaya tinggi yang berkelanjutan: Memperkenalkan dukungan pengelolaan siklus proses setelah proses penyediaan dan konfigurasi selesai dapat meningkatkan biaya. Dengan merencanakan dukungan ini di awal desain, Anda dapat menurunkan biaya tersebut. Misalnya, jika proses penyediaan dan konfigurasi Anda tidak mendukung seluruh siklus proses perangkat, Anda mungkin harus mengintervensi setiap perangkat secara manual untuk menangani setiap fase siklus prosesnya dengan benar. Intervensi manual bisa mahal dan sering tidak sesuai skala.
  • Peningkatan rigiditas Tidak mendukung pengelolaan siklus proses dapat pada akhirnya menyebabkan ketidakmampuan untuk mengupdate atau mengelola perangkat Anda. Jika Anda tidak memiliki mekanisme untuk mematikan perangkat dengan aman dan efisien, contohnya, mungkin akan sulit untuk mengelola akhir siklus proses dan pembuangan akhir.

Langkah selanjutnya