Terdapat banyak literatur rujukan di Internet, tetapi kadangkala nasihat yang paling mudah adalah yang paling berharga. Pasukan Kubernetes aaS daripada Mail.ru diterjemahkan pilihan sepuluh helah dan petua, yang penulis artikel dikumpulkan selepas setahun bekerja dengan Kubernetes. Petua tidak disusun mengikut kepentingan, tetapi kami berpendapat bahawa setiap orang akan menemui sesuatu yang berguna untuk diri mereka sendiri.
Perintah paling mudah untuk bekerja dengan Kubernetes
Sebagai permulaan, mungkin tindakan yang paling mudah dan paling berguna dalam bekerja dengan Kubernetes. Perintah berikut membolehkan penyelesaian arahan kubectl dalam bash shell:
Autofill kubectl akan ditulis ke fail .bashrc dan akan diaktifkan secara automatik setiap kali shell dimulakan. Ini mempercepatkan menaip arahan dan parameter yang panjang seperti all-namespaces. Baca lebih lanjut dalam Bantuan bash Kubernetes.
Memori lalai dan had CPU dalam ruang nama
Jika aplikasi ditulis dengan tidak betul, contohnya, ia membuka sambungan baharu ke pangkalan data setiap saat tetapi tidak pernah menutupnya, maka kluster tersebut mengalami kebocoran memori. Dan jika aplikasi tidak mempunyai had memori yang ditetapkan semasa penggunaan, ini boleh menyebabkan kegagalan nod.
Untuk mengelakkan ini, Kubernetes membenarkan anda menetapkan sekatan lalai pada asas setiap ruang nama. Ia ditulis dalam fail yaml untuk ruang nama tertentu. Berikut ialah contoh fail sedemikian:
Buat yaml sedemikian dan gunakan pada mana-mana ruang nama. Sebagai contoh, ke ruang nama limit-example. Kini mana-mana bekas yang digunakan dalam ruang nama ini akan mempunyai had 512Mi, melainkan had individu lain ditetapkan tambahan untuk bekas ini.
Pengumpulan sampah dalam versi lama Kubernetes
Kubelet secara lalai memulakan kutipan sampah apabila var/lib/docker menduduki 90% ruang cakera yang tersedia. Ini bagus, walau bagaimanapun, sehingga Kubernetes 1.7 tiada had lalai pada bilangan inod yang digunakan, yang sepadan dengan bilangan fail dalam sistem fail.
Berkemungkinan bekas anda var/lib/docker mungkin hanya menggunakan 50% daripada ruang cakera, tetapi mungkin kehabisan inod, yang akan menyebabkan masalah kepada pekerja.
Dalam versi lama kubelet dari 1.4 hingga 1.6 anda perlu menambah bendera ini:
Caranya ialah cara membina aplikasi dan menjalankannya secara tempatan pada kluster itu. Melainkan diarahkan secara khusus, imej Docker akan dibina pada komputer anda dan bukan pada kluster.
Untuk memaksa Docker menolak imej ke kluster Kubernetes tempatan, mesin docker diberikan arahan berikut:
eval $(minikube docker-env)
Kini kita boleh membina aplikasi pada gugusan Kubernetes tempatan.
Jangan berikan kubectl akses kepada semua orang
Ini nampaknya jelas, tetapi jika beberapa pasukan menggunakan kluster yang sama untuk aplikasi mereka (iaitu tujuan Kubernetes dicipta), anda tidak sepatutnya memberi semua orang kubectl. Adalah lebih baik untuk memisahkan arahan, memberikan setiap satu daripada mereka ruang nama sendiri dan mengehadkan akses menggunakan dasar RBAC.
Anda boleh keliru dengan memberikan hak untuk mengakses, membaca, mencipta, memadam dan operasi lain untuk setiap pod. Tetapi perkara utama adalah untuk mengehadkan akses kepada rahsia, membenarkannya hanya kepada pentadbir. Dengan cara ini kita akan membezakan antara mereka yang boleh mentadbir kluster dan mereka yang hanya boleh menggunakan kluster itu.
Urus Belanjawan Pod
Bagaimana untuk memastikan tiada masa henti bagi aplikasi dalam kelompok Kubernetes? PodDisruptionBudget dan sekali lagi PodDisruptionBudget.
Kelompok dikemas kini secara berkala dan nod dikosongkan. Tiada apa yang diam, itulah realitinya. Setiap kerahan dengan lebih daripada satu tika hendaklah mengandungi PDB (PodDisruptionBudget). Ia dicipta dalam fail yaml mudah yang digunakan pada kluster. Kawasan liputan PDB tertentu ditentukan oleh pemilih label.
Nota: Belanjawan PDB diambil kira hanya apabila pelanggaran belanjawan boleh diterbalikkan (gangguan sukarela). Dalam situasi seperti kegagalan perkakasan, PDB tidak akan berfungsi.
Dua parameter utama ialah matchLabels ΠΈ minAvailable. Parameter pertama menentukan aplikasi yang digunakan oleh belanjawan. Contohnya, jika saya mempunyai penempatan dengan label app: app-a ΠΈ app: app-b, maka PDB ini hanya akan terpakai kepada yang pertama.
Parameter minAvailable diambil kira semasa mengosongkan (membersihkan) nod. Sebagai contoh, dalam contoh kami, semasa mengosongkan, semua kejadian diusir app: app-a, kecuali dua.
Ini membolehkan anda mengawal bilangan contoh aplikasi yang perlu dijalankan pada bila-bila masa.
Pemantauan kesihatan aplikasi
Pemantauan sedemikian boleh dilakukan dalam dua cara: menggunakan ujian Kesediaan atau Keaktifan.
Siasatan pertama (kesediaan) menentukan kesediaan kontena untuk menerima trafik.
Yang kedua (kehidupan) menunjukkan sama ada bekas itu sihat atau perlu dimulakan semula.
Konfigurasi yang berkaitan hanya ditambahkan pada yaml untuk penggunaan. Di sana anda boleh menentukan tamat masa, masa tunda dan bilangan percubaan semula. Lihat butiran lanjut tentang mereka dokumentasi Kubernetes.
Tag ada di mana-mana
Label adalah salah satu konsep asas dalam Kubernetes. Mereka membenarkan objek berkomunikasi secara bebas antara satu sama lain, serta membuat pertanyaan berdasarkan label. Dalam Kubernetes, anda juga boleh pergi ke pelanggan dan menonton acara untuk teg tertentu.
Anda boleh melakukan hampir apa sahaja dengan teg, tetapi contoh yang baik ialah mencipta berbilang persekitaran untuk menjalankan program pada kelompok yang sama.
Katakan anda menggunakan kluster yang sama untuk dev ΠΈ qa. Ini bermakna anda boleh mempunyai permohonan app-a, bekerja serentak dalam kedua-dua persekitaran qa ΠΈ dev. Dalam kes ini, kita boleh mengakses contoh aplikasi secara berasingan dalam persekitaran tertentu dengan menentukan parameter yang sesuai environment. Contohnya app: app-a ΠΈ environment: dev untuk satu persekitaran, dan app: app-a ΠΈ environment: qa untuk yang kedua.
Ini membolehkan anda mengakses kedua-dua contoh aplikasi, sebagai contoh, untuk menjalankan ujian secara serentak.
Susun barang
Kubernetes ialah sistem yang sangat berkuasa, tetapi mana-mana sistem akhirnya boleh menjadi buntu dengan terlalu banyak proses. Kubelet menjalankan semua proses dan menyemak yang anda tentukan, serta prosesnya sendiri.
Sudah tentu, satu perkhidmatan yatim piatu tidak akan memperlahankan sistem, dan Kubernetes direka bentuk untuk skala dari bawah ke atas. Tetapi jika bukan satu perkhidmatan sejuta muncul, kubelet mula tercekik.
Jika atas sebab tertentu anda memadamkan penggunaan (bekas, imej, apa sahaja), cuma pastikan anda melakukan pembersihan sepenuhnya.
Temui Go
Kami menyimpan nasihat utama untuk yang terakhir. Belajar bahasa pengaturcaraan Go.
Kubernetes dibangunkan dalam Go, semua sambungan ditulis dalam Go, dan pustaka klien client-go juga disokong secara rasmi.
Ia boleh digunakan untuk perkara yang berbeza dan menarik. Contohnya, untuk mengembangkan sistem Kubernetes mengikut citarasa anda. Jadi, anda boleh menggunakan program anda sendiri untuk mengumpul data, menggunakan aplikasi atau hanya membersihkan bekas.
Mempelajari bahasa pengaturcaraan Go dan menguasai klien-go mungkin merupakan nasihat paling penting yang boleh anda berikan kepada pengguna Kubernetes baharu.