Bagaimana menjadi insinyur DevOps dalam enam bulan atau bahkan lebih cepat. Bagian 4. Pengemasan perangkat lunak

Bagaimana menjadi insinyur DevOps dalam enam bulan atau bahkan lebih cepat. Bagian 1. Pendahuluan
Bagaimana menjadi insinyur DevOps dalam enam bulan atau bahkan lebih cepat. Bagian 2. Konfigurasi
Cara menjadi insinyur DevOps dalam enam bulan atau bahkan lebih cepat. Bagian 3. Versi



Pertimbangkan cara mengemas kode Anda untuk penggunaan yang mudah dan eksekusi selanjutnya. Biarkan saya mengingatkan Anda bahwa kami ada di sini sekarang:



Terlepas dari apakah Anda berbicara dengan atasan Anda saat ini atau di masa depan, Anda harus dapat mengartikulasikan dengan jelas apa itu DevOps dan mengapa itu penting.
Berikan kisah yang konsisten tentang cara terbaik untuk secara cepat dan efisien mengirimkan kode dari laptop pengembang ke tempat penempatan produk akhir dengan keuntungan yang sesuai. Kami mempelajari bukan sekelompok alat DevOps yang berbeda dan modis, tetapi serangkaian keterampilan, dipandu oleh kebutuhan bisnis dan bergantung pada alat teknis. Ingatlah bahwa mempelajari setiap tahap DevOps membutuhkan waktu sekitar satu bulan pelatihan, yang secara total akan memakan waktu enam bulan.

Tutorial Virtualisasi


Ingat server fisik? Server yang sama dimana Anda telah menunggu berminggu-minggu untuk persetujuan pesanan pembelian, persetujuan proses pengiriman, persetujuan oleh pusat data, koneksi jaringan, instalasi OS dan patch? Ini adalah server yang masuk ke kehidupan kita.

Bayangkan bahwa satu-satunya cara untuk menemukan rumah adalah dengan membangun rumah baru. Lagi pula, apakah Anda perlu tinggal di suatu tempat? Jadi tunggu sampai dibangun, tidak peduli berapa lama! Tampaknya menjadi keren, karena semua orang mendapatkan rumah mereka sendiri, tetapi memberatkan, karena pembangunannya membutuhkan banyak waktu. Mengikuti analogi ini, server fisik seperti rumah.

Seiring waktu, proses ini menjadi menjengkelkan, dan orang yang benar-benar pintar muncul dengan ide virtualisasi. Mereka memutuskan untuk menjalankan banyak mesin imajiner pada satu mesin fisik dan membuat masing-masing dari mereka berpura-pura menjadi mesin nyata. Berbakat!

Karena itu, jika Anda benar-benar membutuhkan rumah, Anda dapat membangunnya sendiri dan menunggu enam minggu. Atau Anda dapat pindah ke gedung apartemen dan berbagi sumber daya dengan penghuni lain. Mungkin tidak terlalu keren, tapi cukup bagus! Dan yang terpenting, Anda tidak perlu menunggu apa pun!

Ini berlangsung selama beberapa waktu, dan perusahaan seperti VMWare mendapatkan modal serius untuk ini. Kemudian orang-orang pintar lainnya memutuskan bahwa mendorong sekelompok mesin virtual ke dalam mesin fisik tidak cukup: Anda perlu pengemasan yang lebih kompak dari lebih banyak proses menjadi sumber daya yang lebih sedikit.

Jadi, rumah atau bahkan apartemen terlalu mahal, jadi mungkin hanya mencoba menyewa kamar sementara? Apalagi saya bisa masuk dan meninggalkannya kapan saja! Inilah yang pada dasarnya mewakili Docker pada Desember 2018.



Docker Kelahiran


Docker adalah teknologi baru berdasarkan ide yang sangat lama. Sistem operasi FreeBSD berisi konsep mesin virtualisasi penjara, yang dimulai pada tahun 2000! Sesungguhnya, semua yang baru sudah lama terlupakan.

Dan kemudian, dan sekarang idenya adalah untuk mengisolasi proses individu dalam sistem operasi yang sama berdasarkan virtualisasi tingkat sistem operasi, atau "virtualisasi tingkat sistem". Perhatikan bahwa ini tidak sama dengan virtualisasi penuh, atau "virtualisasi penuh," yang menjalankan mesin virtual berdampingan pada host fisik yang sama.

Dalam praktiknya, ini berarti bahwa semakin populernya Docker secara akurat mencerminkan pertumbuhan layanan-layanan mikro, suatu pendekatan untuk pengembangan perangkat lunak yang memecah perangkat lunak menjadi banyak komponen yang terpisah. Dan semua komponen ini membutuhkan rumah mereka. Menyebarkan mereka secara individual sebagai aplikasi Java yang berdiri sendiri atau executable biner adalah sangat menyusahkan: cara Anda mengontrol aplikasi Java berbeda dari cara Anda mengontrol aplikasi C ++, dan ini, pada gilirannya, berbeda dari mengelola aplikasi Golang .

Sebagai gantinya, Docker menyediakan antarmuka manajemen tunggal yang memungkinkan pemrogram untuk mengemas, menyebarkan secara berurutan, dan menjalankan berbagai aplikasi. Ini adalah kemenangan besar, tapi mari kita bicara tentang pro dan kontra dari Docker.

Manfaat Docker


1. Proses isolasi


Docker memungkinkan setiap layanan untuk memiliki proses yang sepenuhnya terisolasi. Layanan A tinggal di wadah kecilnya sendiri, dengan semua ketergantungannya, layanan B juga tinggal di wadah pribadinya sendiri dengan segala ketergantungannya, dan kedua layanan itu tidak saling bertentangan.

Apalagi, jika satu wadah gagal, maka hanya wadah ini yang akan menderita.

Wadah yang tersisa akan dan harus terus bekerja. Mekanisme seperti itu bermanfaat bagi keamanan. Jika wadah dikompromikan, itu akan sangat sulit (tetapi bukan tidak mungkin!) Untuk keluar dari itu untuk memecahkan OS dasar.

Terakhir, jika wadah berperilaku tidak semestinya (menghabiskan terlalu banyak prosesor atau sumber daya memori), Anda dapat mengurangi "radius ledakan" untuk wadah itu hanya tanpa memengaruhi sisa sistem.

2. Penempatan


Pikirkan tentang bagaimana berbagai aplikasi dibangun dalam praktik. Jika ini adalah aplikasi Python, maka ia akan memiliki banyak paket Python yang berbeda. Beberapa dari mereka akan diinstal sebagai modul pip, yang lain sebagai paket rpm atau deb, dan lainnya sebagai instalasi git-klon sederhana. Atau, jika dilakukan dengan virtualenv, maka itu akan menjadi file zip tunggal dari semua dependensi di direktori virtualenv.

Di sisi lain, jika itu adalah aplikasi Java, maka ia akan memiliki perakitan Gradle Built, dengan semua dependensinya diperluas dan tersebar di tempat-tempat yang tepat.

Lihat apa masalahnya? Aplikasi yang berbeda, rakitan dengan bahasa yang berbeda dan runtimes yang berbeda menimbulkan masalah ketika datang untuk menggunakan aplikasi ini untuk prod. Selain itu, masalahnya diperburuk jika konflik muncul. Bagaimana jika layanan A tergantung pada pustaka Python v1 dan layanan B tergantung pada pustaka Python v2? Ada konflik di sini, karena v1 dan v2 tidak dapat hidup berdampingan pada mesin yang sama.

Dan kemudian Docker ikut bermain. Ini memungkinkan Anda untuk sepenuhnya mengisolasi tidak hanya proses, tetapi juga dependensi. Dimungkinkan untuk memiliki beberapa wadah yang bekerja berdampingan pada OS yang sama, yang masing-masing berisi pustaka dan paketnya sendiri yang tidak kompatibel dengan yang lain.

3. Manajemen pelaksanaan program


Saya perhatikan bahwa cara kami mengelola aplikasi yang berbeda tergantung pada aplikasi itu sendiri. Kode Java ditulis berbeda dalam registri, berjalan secara berbeda, dan dilacak berbeda dari kode Python. Dan Python berbeda dari Golang, dll.

Dengan Docker, kami mendapatkan antarmuka manajemen tunggal dan terpadu yang memungkinkan kami untuk memulai, mengontrol, memusatkan log, berhenti, dan mulai ulang berbagai jenis aplikasi. Ini adalah keuntungan besar dalam produktivitas, yang secara signifikan mengurangi biaya operasi sistem produksi.

Sejak Desember 2018, Anda tidak perlu lagi membuat pilihan antara peluncuran cepat Docker dan keamanan mesin virtual. Proyek Platform Virtualisasi Ringan Fireckracker, diperkenalkan oleh Amazon, mencoba menggabungkan yang terbaik dari kedua solusi. Namun, ini adalah teknologi baru yang hanya mendekati fase prod.



Catatan: Platform Firecracker menyediakan alat untuk membuat dan mengelola lingkungan dan layanan terisolasi yang dibangun menggunakan model pengembangan tanpa server. Kode proyek ditulis dalam Rust dan didistribusikan di bawah lisensi Apache 2.0.

Firecracker menawarkan mesin virtual ringan yang disebut microVMs. Untuk sepenuhnya mengisolasi mereka, teknologi virtualisasi perangkat keras digunakan, tetapi pada saat yang sama, kinerja dan fleksibilitas disediakan pada tingkat wadah biasa. Platform ini didasarkan pada Virtual Machine Monitor (VMM), yang menggunakan hypervisor KVM yang dibangun di dalam kernel Linux. VMM didasarkan pada landasan proyek crosvm yang ditulis dalam Rust , yang dikembangkan Google untuk meluncurkan Linux di ChromeOS. Pada akhir 2018, basis kode crosvm dan Firecracker terpecah, tetapi Amazon berencana untuk mengirim koreksi ke komponen yang dipinjam ke hulu.

Namun, tidak peduli seberapa bagus Docker, ia juga memiliki kelemahan.

Pengantar Lambda


Pertama, menjalankan Docker masih terus bekerja pada server yang perlu dipersiapkan, ditambal, dll. Kedua, Docker tidak 100% aman. Setidaknya itu tidak seaman mesin virtual. Ada alasan mengapa perusahaan besar yang bekerja dengan wadah yang di-host melakukan ini di dalam mesin virtual, dan tidak menggunakan logam biasa. Mereka membutuhkan waktu peluncuran kontainer yang cepat dan keamanan mesin virtual!



Ketiga, tidak ada yang benar-benar mengontrol Docker. Sebaliknya, hampir selalu digunakan sebagai bagian dari struktur orkestrasi wadah yang kompleks seperti Kubernetes, ECS, docker-swarm, atau Nomad. Ini adalah platform yang agak rumit yang membutuhkan personel khusus untuk bekerja (saya akan membahas solusi ini lebih terinci nanti).

Namun, jika saya hanya seorang pengembang, saya hanya ingin menulis kode dan meminta seseorang untuk menjalankannya untuk saya. Docker, Kubernetes dan jazz lainnya - apakah saya benar-benar harus mempelajari semua ini? Saya akan mengatakan ini: itu semua tergantung pada keadaan. Untuk orang-orang yang hanya ingin orang lain menjalankan kode mereka, penyimpanan cloud AWS Lambda dan hal-hal serupa adalah pilihan yang bagus.

AWS Lambda memungkinkan Anda menjalankan kode tanpa ketentuan dan manajemen server. Anda hanya membayar untuk waktu komputasi yang Anda konsumsi, dan ketika kode Anda tidak berfungsi, tidak ada biaya.
Jika Anda pernah mendengar tentang penyimpanan tanpa server, maka ini dia. Tidak ada lagi server peluncur atau wadah manajemen! Cukup tulis kode Anda, masukkan ke dalam file zip, unggah ke Amazon, dan biarkan mereka mengatasi sakit kepala Anda! Selain itu, karena "lambdas" berumur pendek, tidak ada yang bisa memecahkannya - "lambdas" cukup aman dalam desain mereka. Benar benar hebat?

Namun ada juga poin negatifnya. Pertama, lambdas hanya dapat bekerja selama maksimal 15 menit (per November 2018). Ini berarti bahwa proses yang berjalan lama, seperti Kafka atau aplikasi pemecahan nomor, tidak dapat bekerja di Lambda.

Kedua, "lambdas" adalah Functions-as-a-Service (berfungsi sebagai layanan). Ini berarti bahwa aplikasi Anda harus sepenuhnya didekomposisi menjadi microservices dan disinkronkan dengan layanan PaaS kompleks lainnya seperti AWS Step Functions . Namun, tidak setiap perusahaan berada pada level arsitektur layanan mikro ini.

Ketiga, pemecahan masalah lambdas sangat sulit. Itu adalah runtime cloud, dan semua perbaikan bug terjadi di ekosistem Amazon. Ini seringkali cukup kompleks dan tidak intuitif. Singkatnya, tidak ada makan siang gratis di sini.

Saya perhatikan bahwa pada akhir tahun 2018 ada juga solusi kontainer cloud tanpa server seperti AWS Fargate. Mekanismenya sangat mirip dengan Lambda. Jika Anda baru mulai mempelajari layanan ini, saya sangat merekomendasikan mencoba Fargate, yang merupakan cara yang sangat mudah untuk membuat wadah berfungsi "benar". Selain itu, pada 13 Januari 2019, layanan cloud AWS mengumumkan penurunan harga Fargate secara signifikan, menjadikannya pilihan yang sangat menarik untuk meluncurkan kontainer tanpa server.



Ringkasan


Docker dan Lambda adalah dua pendekatan berbasis cloud modern paling populer untuk mengemas, menjalankan, dan mengelola aplikasi. Mereka sering gratis, keduanya cocok untuk berbagai kasus penggunaan dan aplikasi.

Bagaimanapun, insinyur DevOps modern harus berpengalaman dalam keduanya. Oleh karena itu, melatih Docker dan Lambda adalah tujuan jangka pendek dan menengah yang baik.
Saya perhatikan bahwa sejauh ini kami telah membahas topik-topik yang harus diketahui oleh para insinyur tingkat menengah dan menengah DevOps. Di bagian berikut, kita akan mulai membahas metode yang lebih cocok untuk insinyur tingkat menengah dan senior DevOps. Seperti biasa, tidak ada cara mudah untuk mendapatkan pengetahuan!

Akan dilanjutkan segera ...

Sedikit iklan :)


Terima kasih untuk tetap bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikan kepada teman Anda, cloud VPS untuk pengembang dari $ 4,99 , analog unik dari server entry-level yang diciptakan oleh kami untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mulai dari $ 19 atau cara membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).

Dell R730xd 2 kali lebih murah di pusat data Equinix Tier IV di Amsterdam? Hanya kami yang memiliki 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV dari $ 199 di Belanda!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai dari $ 99! Baca tentang Cara Membangun Infrastruktur Bldg. kelas c menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?

All Articles