10 Helah dan Petua Kubernetes Terbaik

10 Helah dan Petua Kubernetes Terbaik

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:

echo "source <(kubectl completion bash)" >> ~/.bashrc

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:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

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:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

Dalam versi 1.7 dan lebih baru, bendera ini ditetapkan secara lalai. Walau bagaimanapun, versi terdahulu tidak memantau had inod.

Minikube... Kubernete tempatan yang kecil tetapi berkuasa

Minikube ialah cara paling mudah untuk menjalankan gugusan Kubernetes tempatan. Ia dilancarkan dengan arahan mudah:

minikube start

Menjalankan arahan ini menghasilkan gugusan Kubernetes sebenar yang berjalan pada mesin anda.

10 Helah dan Petua Kubernetes Terbaik
Sumber ilustrasi

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.

Contoh PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

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.

Diterjemah dengan sokongan Mail.ru Cloud Solutions

Apa lagi yang perlu dibaca:

  1. Tiga tahap autoscaling dalam Kubernetes dan cara menggunakannya dengan berkesan.
  2. Nod pekerja Kubernetes: banyak yang kecil atau beberapa yang besar?
  3. 25 Alat Berguna untuk Mengatur dan Mengurus Kubernetes.

Sumber: www.habr.com

Tambah komen