7 praktik terbaik menggunakan container menurut Google

Catatan. terjemahan: Penulis artikel asli adalah ThΓ©o Chamley, Arsitek Solusi Google Cloud. Dalam postingan untuk blog Google Cloud ini, dia memberikan ringkasan panduan perusahaannya yang lebih mendetail, yang disebut "Praktik Terbaik untuk Mengoperasikan Kontainer" Di dalamnya, para pakar Google mengumpulkan praktik terbaik untuk mengoperasikan container dalam konteks penggunaan Google Kubernetes Engine dan banyak lagi, menyentuh berbagai topik: mulai dari keamanan hingga pemantauan dan logging. Jadi, praktik container apa yang paling penting menurut Google?

7 praktik terbaik menggunakan container menurut Google

Mesin Kubernetes (Layanan berbasis Kubernetes untuk menjalankan aplikasi dalam container di Google Cloud - kira-kira. terjemahan) adalah salah satu cara terbaik untuk menjalankan beban kerja yang perlu ditingkatkan skalanya. Kubernetes akan memastikan kelancaran fungsi sebagian besar aplikasi jika aplikasi tersebut dimasukkan ke dalam container. Namun jika Anda ingin aplikasi Anda mudah dikelola dan ingin memanfaatkan Kubernetes sepenuhnya, Anda harus mengikuti praktik terbaik. Mereka akan menyederhanakan pengoperasian aplikasi, pemantauan dan debugging, serta meningkatkan keamanan.

Pada artikel ini, kita akan membahas daftar hal-hal yang harus Anda ketahui dan lakukan untuk menjalankan container secara efektif di Kubernetes. Mereka yang ingin mendalami lebih dalam harus membaca materinya Praktik Terbaik untuk Mengoperasikan Kontainer, dan juga memperhatikan kita posting sebelumnya tentang merakit kontainer.

1. Gunakan mekanisme logging container asli

Jika aplikasi berjalan di cluster Kubernetes, tidak banyak yang diperlukan untuk log. Sistem logging terpusat kemungkinan sudah terpasang di cluster yang Anda gunakan. Dalam hal penggunaan Kubernetes Engine, ini adalah tanggung jawabnya Pencatatan Stackdriver. (Catatan. terjemahan: Dan jika Anda menggunakan instalasi Kubernetes Anda sendiri, kami sarankan untuk melihat lebih dekat solusi Open Source kami - rumah kayu.) Buat hidup Anda tetap sederhana dan gunakan mekanisme logging container asli. Tulis log ke stdout dan stderr - log tersebut akan diterima, disimpan, dan diindeks secara otomatis.

Jika diinginkan, Anda juga dapat menulis log ke format JSON. Pendekatan ini akan memudahkan penambahan metadata ke dalamnya. Dan bersama mereka, Stackdriver Logging akan memiliki kemampuan untuk menelusuri log menggunakan metadata ini.

2. Pastikan kontainer tidak memiliki kewarganegaraan dan tidak dapat diubah

Agar container dapat berfungsi dengan benar di cluster Kubernetes, container tersebut harus bersifat stateless dan tidak dapat diubah. Setelah kondisi ini terpenuhi, Kubernetes dapat melakukan tugasnya, membuat dan menghancurkan entitas aplikasi kapan pun dan di mana pun diperlukan.

Tanpa kewarganegaraan berarti bahwa keadaan apa pun (data persisten dalam bentuk apa pun) disimpan di luar wadah. Untuk ini, tergantung kebutuhan, berbagai jenis penyimpanan eksternal dapat digunakan: Cloud Storage, Persistent Disk, Redis, Awan SQL atau database terkelola lainnya. (Catatan. terjemahan: Baca lebih lanjut tentang ini di artikel kami β€œOperator untuk Kubernetes: cara menjalankan aplikasi stateful".)

Kekal berarti container tidak akan diubah selama masa pakainya: tidak ada pembaruan, patch, perubahan konfigurasi. Jika Anda perlu memperbarui kode aplikasi atau menerapkan patch, buat image baru dan terapkan. Disarankan untuk memindahkan konfigurasi kontainer (port mendengarkan, opsi lingkungan runtime, dll.) secara eksternal - ke Rahasia ΠΈ ConfigMap. Mereka dapat diperbarui tanpa harus membuat image container baru. Untuk dengan mudah membuat saluran pipa dengan perakitan gambar, Anda dapat menggunakan Pembuatan Awan. (Catatan. terjemahan: Kami menggunakan alat Open Source untuk tujuan ini dapp.)

7 praktik terbaik menggunakan container menurut Google
Contoh pembaruan konfigurasi Deployment di Kubernetes menggunakan ConfigMap yang dipasang di pod sebagai konfigurasi

3. Hindari wadah yang memiliki hak istimewa

Anda tidak menjalankan aplikasi sebagai root di server Anda, bukan? Jika penyerang masuk ke dalam aplikasi, dia akan mendapatkan akses root. Pertimbangan yang sama berlaku untuk tidak menjalankan kontainer dengan hak istimewa. Jika Anda perlu mengubah pengaturan pada host, Anda dapat memberikan wadahnya secara spesifik kemampuan menggunakan opsi securityContext di Kubernetes. Jika Anda perlu berubah syctls, Kubernetes punya abstrak terpisah untuk ini. Secara umum, cobalah untuk memanfaatkannya semaksimal mungkin inisiasi- dan kontainer sespan untuk melakukan operasi istimewa serupa. Mereka tidak perlu dapat diakses oleh lalu lintas internal atau eksternal.

Jika Anda mengelola sebuah cluster, Anda dapat menggunakan Kebijakan Keamanan Pod untuk pembatasan penggunaan kontainer dengan hak istimewa.

4. Hindari dijalankan sebagai root

Kontainer istimewa telah dibahas, tetapi akan lebih baik lagi jika, selain itu, Anda tidak menjalankan aplikasi di dalam kontainer sebagai root. Jika penyerang menemukan kerentanan jarak jauh dalam aplikasi dengan hak root yang memungkinkan eksekusi kode, setelah itu ia dapat keluar dari wadah melalui kerentanan yang belum diketahui, ia akan mendapatkan root pada host.

Cara terbaik untuk menghindari hal ini adalah dengan tidak menjalankan apa pun sebagai root. Untuk melakukan ini, Anda dapat menggunakan arahan USER Π² Dockerfile ΠΈΠ»ΠΈ runAsUser di Kubernetes. Administrator klaster juga dapat mengonfigurasi perilaku penegakan menggunakan Kebijakan Keamanan Pod.

5. Membuat aplikasi mudah untuk dipantau

Seperti logging, pemantauan merupakan bagian integral dari manajemen aplikasi. Solusi pemantauan yang populer di komunitas Kubernetes adalah Prometheus - sistem yang secara otomatis mendeteksi pod dan layanan yang memerlukan pemantauan. (Catatan. terjemahan: Lihat juga milik kami laporan rinci tentang topik pemantauan menggunakan Prometheus dan Kubernetes.) Penumpuk mampu memantau cluster Kubernetes dan menyertakan Prometheus versinya sendiri untuk pemantauan aplikasi.

7 praktik terbaik menggunakan container menurut Google
Dasbor Kubernetes di Stackdriver

Prometheus mengharapkan aplikasi meneruskan metrik ke titik akhir HTTP. Tersedia untuk ini Perpustakaan klien Prometheus. Format yang sama digunakan oleh alat lain seperti Sensus Terbuka ΠΈ Istio.

6. Jadikan status kesehatan aplikasi tersedia

Manajemen aplikasi dalam produksi dibantu oleh kemampuannya untuk mengkomunikasikan statusnya ke seluruh sistem. Apakah aplikasinya berjalan? Apakah tidak apa-apa? Apakah Anda siap menerima lalu lintas? Bagaimana perilakunya? Cara paling umum untuk mengatasi masalah ini adalah dengan menerapkan pemeriksaan kesehatan (pemeriksaan kesehatan). Kubernetes memiliki dua jenis: pemeriksaan keaktifan dan kesiapan.

Untuk pemeriksaan keaktifan (pemeriksaan vitalitas) aplikasi harus memiliki titik akhir HTTP yang mengembalikan respons "200 OK" jika berfungsi dan dependensi dasarnya terpenuhi. Untuk pemeriksaan kesiapan (pemeriksaan kesiapan layanan) aplikasi harus memiliki titik akhir HTTP lain yang mengembalikan respons "200 OK" jika aplikasi dalam keadaan sehat, langkah inisialisasi telah selesai dan permintaan valid apa pun tidak menghasilkan kesalahan. Kubernetes hanya akan merutekan lalu lintas ke container jika aplikasi sudah siap berdasarkan pemeriksaan ini. Dua titik akhir dapat digabungkan jika tidak ada perbedaan antara status keaktifan dan kesiapan.

Anda dapat membaca lebih lanjut tentang ini di artikel terkait dari Sandeep Dinesh, Advokat Pengembang dari Google: β€œPraktik terbaik Kubernetes: Menyiapkan health check dengan pemeriksaan kesiapan dan keaktifan'.

7. Pilih versi gambar Anda dengan hati-hati

Sebagian besar gambar publik dan pribadi menggunakan sistem penandaan yang serupa dengan yang dijelaskan di Praktik Terbaik untuk Membangun Kontainer. Jika gambar menggunakan sistem yang dekat dengan versi semantik, perlu mempertimbangkan secara spesifik pemberian tag. Misalnya, tandai latest dapat sering berpindah dari satu gambar ke gambar lainnya - tidak dapat diandalkan jika Anda memerlukan pembangunan dan instalasi yang dapat diprediksi dan diulang.

Anda dapat menggunakan tagnya X.Y.Z (hampir selalu tidak berubah), tetapi dalam hal ini, pantau semua tambalan dan pembaruan pada gambar. Jika gambar yang Anda gunakan memiliki tag X.Y, ini adalah pilihan yang bagus untuk jalan tengah. Dengan memilihnya, Anda secara otomatis menerima patch dan pada saat yang sama mengandalkan versi aplikasi yang stabil.

PS dari penerjemah

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komentar