Catatan perev. : Penulis artikel asli adalah ThΓ©o Chamley, seorang Arsitek Google Cloud. Dalam publikasi ini untuk blog Google Cloud, ia menyajikan pemerasan singkat dari panduan yang lebih rinci untuk perusahaannya, yang disebut " Praktik Terbaik untuk Wadah Operasi ." Di dalamnya, para ahli Google mengumpulkan praktik terbaik untuk mengoperasikan wadah dalam konteks menggunakan Google Kubernetes Engine dan tidak hanya menyentuh berbagai topik: dari keamanan hingga pemantauan dan penjurnalan. Jadi, praktik wadah apa yang paling penting bagi Google?
The Kubernetes Engine (layanan berbasis Kubernetes untuk menjalankan aplikasi kemas di Google Cloud - sekitar Terjemahan ) adalah salah satu cara terbaik untuk menjalankan beban kerja yang perlu ditingkatkan.
Kubernetes akan memastikan kelancaran operasi sebagian besar aplikasi jika mereka kemas. Tetapi jika Anda ingin aplikasi mudah dikelola dan ingin memanfaatkan Kubernetes sepenuhnya, Anda harus mengikuti praktik terbaik. Mereka akan menyederhanakan operasi aplikasi, pemantauan dan debuggingnya, serta meningkatkan keamanan.
Pada artikel ini, kita akan melihat daftar apa yang perlu Anda ketahui dan lakukan untuk fungsi kontainer yang efisien di Kubernetes. Mereka yang ingin mempelajari detail harus membaca materi
Praktik Terbaik untuk Wadah Operasi , serta memperhatikan
pos perakitan kontainer kami
sebelumnya .
1. Gunakan mekanisme wadah asli untuk penebangan
Jika aplikasi berjalan di cluster Kubernetes, tidak banyak yang diperlukan untuk log. Sistem logging terpusat mungkin sudah terintegrasi ke dalam cluster yang Anda gunakan. Dalam hal menggunakan Mesin
Kubernetes ,
Penumpukan Stackdriver bertanggung jawab untuk ini.
( Catatan : Jika Anda menggunakan instalasi Kubernet Anda sendiri, kami sarankan Anda melihat lebih dekat solusi Open Source kami - loghouse .) Jangan menyulitkan hidup Anda dan menggunakan mekanisme asli untuk mencatat kontainer. Tulis log di stdout dan stderr - mereka akan secara otomatis diterima, disimpan, dan diindeks.
Jika diinginkan, Anda juga dapat menulis log dalam
format JSON . Pendekatan ini membuatnya mudah untuk menambahkan metadata ke mereka. Dan bersama mereka di Stackdriver Logging akan dapat mencari log menggunakan metadata ini.
2. Pastikan wadah tidak bernegara dan tidak berubah
Agar kontainer berfungsi dengan benar di kluster Kubernetes, kontainer harus stateless dan tidak berubah. Ketika kondisi ini terpenuhi, Kubernetes akan dapat melakukan tugasnya, membuat dan menghancurkan entitas aplikasi kapan dan di mana diperlukan.
Stateless berarti bahwa segala keadaan (data persisten dalam bentuk apa pun) disimpan di luar wadah. Untuk ini, tergantung pada kebutuhan, berbagai jenis penyimpanan eksternal dapat dilibatkan:
Penyimpanan Cloud ,
Disk Persisten ,
Redis ,
Cloud SQL, atau database terkelola lainnya.
( Catatan terjemahkan : Baca lebih lanjut tentang ini di artikel kami " Operator untuk Kubernet: Cara Menjalankan Aplikasi Stateful ".)Abadi berarti wadah tidak akan dimodifikasi selama masa pakainya: tidak ada pembaruan, tambalan, perubahan konfigurasi. Jika Anda perlu memperbarui kode aplikasi atau menerapkan tambalan, buat gambar baru dan gunakan. Disarankan untuk memindahkan konfigurasi wadah (port untuk mendengarkan, opsi untuk
runtime, dll.)
Ke luar - dalam
Rahasia dan
ConfigMaps . Mereka dapat diperbarui tanpa harus membangun gambar wadah baru. Anda dapat menggunakan
Cloud Build untuk membuat pipa dengan mudah dengan perakitan gambar.
( Catatan : Kami menggunakan alat open source dapp untuk tujuan ini.)
Contoh memperbarui konfigurasi Penerapan di Kubernetes menggunakan ConfigMap yang dipasang di pod sebagai konfigurasi3. Hindari wadah istimewa
Anda tidak menjalankan aplikasi sebagai root di server Anda, bukan? Jika penyerang membobol aplikasi, ia akan mendapatkan akses root. Pertimbangan yang sama berlaku untuk tidak menjalankan wadah istimewa. Jika Anda ingin mengubah pengaturan pada host, Anda dapat memberikan
kapabilitas khusus wadah menggunakan opsi
securityContext
di Kubernetes. Jika Anda perlu memodifikasi
sysctl , Kubernetes memiliki
anotasi terpisah untuk ini. Secara umum, cobalah untuk memaksimalkan penggunaan
wadah init dan sespan untuk melakukan operasi istimewa tersebut. Mereka tidak memerlukan aksesibilitas untuk lalu lintas internal atau eksternal.
Jika Anda mengelola sebuah cluster, Anda dapat menggunakan
Kebijakan Keamanan Pod untuk membatasi penggunaan kontainer yang diistimewakan.
4. Hindari menjalankan sebagai root
Kami telah mengatakan tentang wadah istimewa, tetapi akan lebih baik jika, selain itu, Anda tidak akan menjalankan aplikasi di dalam wadah sebagai root. Jika penyerang menemukan kerentanan jarak jauh dengan kemampuan untuk mengeksekusi kode dalam aplikasi dengan hak akses root, setelah itu ia dapat keluar dari wadah melalui kerentanan yang belum diketahui, ia akan mendapatkan root di host.
Cara terbaik untuk menghindari ini adalah dengan tidak menjalankan apapun sebagai root. Untuk melakukan ini, Anda dapat menggunakan arahan
USER
di
Dockerfile
atau
runAsUser
di Kubernetes. Administrator cluster juga dapat mengonfigurasi penegakan menggunakan
Kebijakan Keamanan Pod .
5. Buat aplikasi mudah dipantau.
Seperti logging, pemantauan adalah bagian integral dari mengelola aplikasi. Solusi pemantauan populer di komunitas Kubernetes adalah
Prometheus , sebuah sistem yang secara otomatis mendeteksi polong dan layanan yang membutuhkan pemantauan.
( Catatan : Lihat juga laporan terperinci kami tentang pemantauan menggunakan Prometheus dan Kubernetes.) Stackdriver dapat memonitor cluster Kubernetes dan menyertakan versi Prometheus untuk aplikasi pemantauan.
Dashboard Kubernetes di StackdriverPrometheus mengharapkan aplikasi untuk meneruskan metrik ke titik akhir HTTP.
Pustaka klien Prometheus tersedia untuk ini. Alat lain seperti
OpenCensus dan
Istio menggunakan format yang sama.
6. Jadikan kondisi kesehatan aplikasi tersebut tersedia.
Mengelola aplikasi dalam produksi dibantu oleh kemampuannya untuk melaporkan kondisinya ke seluruh sistem. Apakah aplikasi berjalan? Apakah itu baik-baik saja? Sudah siap menerima lalu lintas? Bagaimana perilakunya? Cara paling umum untuk menyelesaikan masalah ini adalah dengan melakukan
pemeriksaan kesehatan . Kubernetes memiliki dua jenis:
probe liveness dan readiness .
Untuk penyelidikan liveness, aplikasi harus memiliki HTTP endpoint yang mengembalikan respons "200 OK" jika berfungsi dan dependensi utamanya terpenuhi. Untuk pemeriksaan kesiapan
(periksa kesiapan untuk layanan), aplikasi harus memiliki titik akhir HTTP yang berbeda, mengembalikan respons "200 OK" jika aplikasi dalam keadaan sehat, langkah-langkah inisialisasi selesai dan setiap permintaan yang benar tidak menyebabkan kesalahan. Kubernetes hanya akan mengarahkan lalu lintas ke wadah jika aplikasi siap sesuai dengan pemeriksaan ini. Dua titik akhir dapat digabungkan jika tidak ada perbedaan antara semangat dan kesiapan.
Untuk informasi lebih lanjut, lihat artikel terkait oleh Sandeep Dinesh, Advokat Pengembang Google: "
Praktik terbaik Kubernetes: Menyiapkan pemeriksaan kesehatan dengan penyelidikan kesiapan dan semangat ."
7. Pilih versi gambar dengan cermat
Sebagian besar gambar publik dan pribadi menggunakan sistem penandaan yang mirip dengan yang dijelaskan dalam
Praktik Terbaik untuk Kontainer Bangunan . Jika gambar menggunakan sistem yang dekat dengan
versi semantik , Anda harus mempertimbangkan spesifikasi penandaan. Misalnya, tag
latest
seringkali dapat berpindah dari satu gambar ke gambar lainnya - Anda tidak dapat mengandalkannya jika Anda memerlukan rakitan dan pemasangan yang dapat diprediksi dan direproduksi.
Anda dapat menggunakan tag
XYZ
(hampir selalu tidak berubah), tetapi dalam hal ini, perhatikan semua tambalan dan pembaruan pada gambar. Jika gambar Anda memiliki tag
XY
, ini adalah opsi jalan tengah yang baik. Dengan memilihnya, Anda secara otomatis menerima tambalan dan pada saat yang sama mengandalkan versi aplikasi yang stabil.
PS dari penerjemah
Baca juga di blog kami: