Definisikan Perjalanan Cloud Anda Dengan Terraform dan Packer

Awan
Foto oleh  Łukasz Łada  di  Unsplash .

Untuk sebagian besar profesional DevOps, membuat VM biasanya terdiri dari memutarnya di cloud menggunakan  Terraform  dan kemudian menggunakan alat manajemen konfigurasi (misalnya Ansible atau Puppet) atau skrip bootstrap (misalnya cloud-init) untuk mengonversi Mesin Virtual mentah ke a server yang bertujuan.

Kita semua telah melakukannya untuk waktu yang lama dan berhasil untuk banyak kasus, tetapi ada beberapa kekurangannya.

Saya akan memberi Anda contoh dari pengalaman pribadi. Kami memiliki server web yang dapat diskalakan secara horizontal yang berjalan di GCP menggunakan grup instance terkelola (MIG). Kapanpun MIG ingin menambahkan node baru ke grup, dibutuhkan beberapa waktu untuk node siap.

Setelah server aktif, Ansible memerlukan beberapa menit untuk menginstal paket, melakukan konfigurasi, dan membuat node siap untuk memproses permintaan. Untuk server produksi yang memproses volume besar, jeda waktu berarti permintaan yang turun yang menghambat pengalaman pelanggan. Untuk mengatasi ini, kami harus menjatuhkan CPU dan ambang memori sehingga MIG dapat menjalankan server baru sebelum terlambat. Itu juga berarti ada terlalu banyak positif palsu dan kita membuang-buang infrastruktur yang berharga.

Juga, pertimbangkan jumlah yang diperlukan untuk menambal setiap server dan memastikan bahwa tambalan akan tepat di setiap node. Kompleksitas dan risiko meningkat dengan jumlah node.

Nah, kami menemukan bahwa kami salah melakukannya dan ada cara yang lebih baik: dengan menggunakan  Infrastruktur yang Tidak Dapat Diubah . Nah, apa yang kita maksud dengan istilah ini? Artinya, alih-alih memutar infrastruktur dan mengonfigurasinya setelah siap, kita dapat melakukan pra-membuat semua konfigurasi dalam citra OS sehingga saat mesin menyala, ia siap. Ini juga berarti bahwa Anda tidak seharusnya mengkonfigurasinya lebih jauh, karena pada saat salinan mesin diluncurkan, itu tidak akan memiliki pengaturan Anda - karenanya tidak dapat diubah. Ini adalah konsep kontainer dalam ruang VM.

Meskipun konsep ini bukanlah hal baru, ada tantangan dengan pendekatan tersebut karena tidak ada alat yang tersedia saat itu. Untungnya, dengan praktik DevOps dan CI / CD modern, kami dapat dengan mudah membuat image baru dan merilisnya saat diperlukan. Anda juga dapat menjalankan pengujian pada image baru sebelum Anda memutuskan untuk merilisnya. Ini membantu mengurangi banyak rasa sakit yang mungkin Anda alami dalam produksi. Mengembalikan perubahan itu mudah juga. Cukup terapkan gambar lama. Anda dapat melakukan penerapan canary dengan pendekatan ini jika Anda perlu dan melakukan pengujian A / B dengan mudah.

HashiCorp  memiliki tumpukan DevOps yang mengesankan yang terkait dengan pengelolaan infrastruktur dan konfigurasi server. Sementara Terraform HashiCorp adalah infrastruktur multi-cloud terkemuka sebagai solusi Kode,  HashiCorp Packer  memberi Anda kekuatan untuk membuat Infrastruktur yang Tidak Dapat Diubah.

Packer membantu Anda mengambil gambar OS dari basis, menjalankannya di VM sementara, menyesuaikan gambar Anda dengan menjalankan skrip shell atau bahkan buku pedoman yang mungkin, menguji konfigurasi, membangun gambar, dan mendorongnya ke repositori gambar Anda. Jadi lain kali, ketika Anda ingin merilis konfigurasi baru, Anda perlu memperbarui template instance Anda.

Pada artikel ini, kita akan melihat beberapa fitur ini di demo langsung. Karena kami bekerja terutama di GCP, kami akan menggunakan contoh GCP, tetapi prinsipnya sama dan alat tersebut mendukung semua platform cloud publik.

Prasyarat

Anda memerlukan proyek Google Cloud dan akun layanan pada proyek yang memiliki akses yang diperlukan. Dalam kasus ini, kami akan menggunakan akun layanan dengan akses Editor Proyek untuk kesederhanaan. Namun, Anda harus selalu mengikuti kebijakan dengan hak istimewa paling rendah dan hanya memberikan akses yang diperlukan yang diperlukan.

Lihat bagian "Menyiapkan Lingkungan Cloud Anda" di artikel  Cara Melakukan Terraform Dengan Jenkins dan Slack di Google Cloud Platform  untuk detail selengkapnya tentang membuat akun layanan.

Gandakan   repositori ini , salin kunci JSON yang diunduh ke lokasi repositori, dan ganti namanya sebagai  credentials.jsonAnda dapat mengikuti langkah-langkah yang diuraikan di bawah ini:

GIF perintah di terminal

Menginstal Packer dan Terraform

Menginstal Packer dan Terraform itu mudah. Unduh biner untuk lingkungan Anda dan pindahkan ke PATH Anda.

Anda dapat mengikuti panduan instalasi resmi untuk  Packer  dan  Terraform  untuk detail lebih lanjut.

Menjalankan Packer Build

Sekarang kita telah mengunduh CLI Packer dan Terraform, mari kita mulai dengan konfigurasi Packer.

Kami akan memutar image server web NGINX kustom menggunakan Packer.

Pertama, kita perlu membuat file konfigurasi JSON untuk diproses oleh Packer:

Ada dua bagian di dalam file: builder dan provisioner.

Di bagian pembangun, kami menyediakan yang berikut ini:

  • type - Jenis gambar yang kami coba buat (di googlecompute sini, karena ini adalah gambar GCP).
  • account_file - File kredensial yang akan kami gunakan untuk mengautentikasi dan mengotorisasi dengan API cloud menggunakan akun layanan yang kami buat.
  • project_id - Project ID GCP tempat Anda ingin membuat dan menyimpan gambar ini. Ganti  <GCP_PROJECT_ID> dengan ID proyek Anda.
  • zone - Zona tempat Anda ingin menjalankan VM build Anda. Packer membuat VM untuk membuat image, jadi pastikan akun layanan memiliki izin untuk menjalankan VM.
  • source_image_family - Ini adalah keluarga gambar dari mana Anda ingin mendapatkan gambar sumber Anda. Anda juga dapat menggunakan  source_image jika Anda akan menggunakan gambar dasar tertentu untuk membangun VM Anda, tetapi jika Anda ingin menggunakan gambar stabil terbaru dari keluarga tertentu sebagai basis, Anda dapat menentukan  source_image_familyItu juga akan memastikan Anda tidak ketinggalan zaman. Dalam hal ini, kami akan menggunakan  ubuntu-1604-lts.
  • ssh_username - Ini adalah nama pengguna yang akan digunakan Packer untuk masuk ke VM build Anda.
  • image_name - Nama gambar yang ingin Anda buat setelah penyediaan selesai. Dalam hal ini, kami menggunakan  nginx-{{timestamp}}Jadi, ketika Packer selesai membuat gambar, itu akan menggantikan  {{timestamp}} dengan stempel waktu sebenarnya dari pembuatan tersebut. Itu akan memastikan bahwa Anda memiliki gambar baru setiap kali Anda membangun dan gambar lama Anda tidak ditimpa.
  • image_family - Keluarga gambar tempat Anda ingin menyimpan gambar Anda. Meskipun ini opsional, ini membantu karena saat Anda membuat beberapa gambar dari keluarga yang sama, Anda dapat menentukan keluarga gambar di template instance Anda sendiri. Saat berikutnya Anda membangun infrastruktur, Anda akan mendapatkan gambar stabil terbaru yang diterapkan. Dalam hal ini, kami menggunakan  webserver keluarga gambar.

Bagian penyediaan berisi daftar penyedia yang akan kita gunakan untuk menyiapkan VM dari gambar dasar. Dalam kasus ini, kami menggunakan:

  • Penyedia file untuk menyalin  index.html file dari direktori lokal ke  /tmp direktori VM Build.
  • Penyedia shell untuk menyiapkan NGINX di mesin. Kita juga bisa menggunakan penyedian Ansible untuk itu, tapi mari kita pertahankan sederhana untuk saat ini.

Mari kita lihat  index.html filenya dulu:

The  setup.sh Script menginstal nginx, bergerak  index.html berkas ke default direktori nginx HTML, dan kemudian memungkinkan dan mulai layanan nginx.

Sekarang, mari buat VM dengan menjalankan berikut ini:

$ packer membangun packer.json

Dan saat kami menjalankannya, Packer melakukan langkah-langkah berikut:

  • Memutar VM Build menggunakan Ubuntu 16.04LTS sebagai gambar dasar di GCP menggunakan zona yang kami tentukan di file Packer.
  • Menyalin  index.html file ke  /tmp direktori server build.
  • Menginstal NGINX di atasnya menggunakan  setup.sh skrip.
  • Membuat gambar dari konfigurasi yang dihasilkan.
  • Mendorong gambar ke repositori gambar proyek Anda.
GIF dari build Packer
Packer Build

Jika Anda membuka Proyek Google Cloud -> Compute Engine -> Storage -> Gambar dalam konsol cloud Anda, Anda akan melihat gambar NGINX dengan stempel waktu di bagian akhir.

Gambar dalam konsol cloud

Membuat Instance GCE dari Packer Image

Sekarang setelah kita berhasil membuat gambar, mari putar sebuah instance menggunakan gambar tersebut. Kami akan menggunakan Terraform untuk latihan ini.

The  main.tf berkas mendefinisikan contoh GCE menggunakan gambar kustom dari  webserver keluarga. Anda perlu menyalin  terraform.tfvars.example file ke  terraform.tfvars dan mengedit file agar sesuai dengan konfigurasi Anda.

Setelah Anda mengedit file dan menyimpannya, Anda dapat menjalankan perintah berikut untuk membuat instance dari gambar kustom:

$ terraform init 
$ terraform berlaku
GIF dari Terraform Terapkan beraksi
Menerapkan Terraform

Dengan  terraform apply lengkap, mari kita lihat konsol cloud dan ambil alamat IP eksternal dari instance:

Mengambil alamat IP eksternal dari instance GCE
Instance GCE

Saat NGINX mendengarkan pada Port HTTP default (80), kita dapat menggunakan IP untuk mengakses situs web khusus.

Mengakses situs web kustom

Dan seperti yang kita lihat, alih-alih halaman NGINX default, kita mendapatkan kustom  index.html sebagai hasilnya.

Selamat! Anda telah berhasil membangun dan meluncurkan gambar kustom menggunakan Packer dan Terraform.

Kesimpulan

Menggunakan Packer dengan Terraform membantu mendefinisikan kembali praktik manajemen konfigurasi dan telah memungkinkan penggunaan Infrastruktur yang Tidak Dapat Diubah dalam industri teknologi arus utama.

Terima kasih sudah membaca! Saya harap Anda menikmati artikelnya.


Post a Comment

أحدث أقدم