10 Tip dan Trik Kubernet Teratas



Ada banyak literatur referensi di Internet, tetapi terkadang tips paling sederhana menjadi yang paling berharga. Tim Mail.ru Kubernetes aaS telah menerjemahkan sepuluh trik dan tip yang dikumpulkan penulis artikel setelah setahun bekerja dengan Kubernetes. Kiat tidak diurutkan berdasarkan kepentingan, tetapi kami pikir semua orang akan menemukan sesuatu yang berguna untuk diri mereka sendiri.

Tim termudah untuk bekerja dengan Kubernetes


Untuk memulainya, mungkin tindakan paling sederhana dan paling berguna dalam bekerja dengan Kubernetes. Perintah berikut ini memungkinkan pelengkapan otomatis dari perintah kubectldi bash shell:

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

Autocomplete kubectlakan ditulis ke file .bashrc dan akan secara otomatis diaktifkan setiap kali shell dimulai. Ini mempercepat serangkaian perintah dan parameter panjang, seperti all-namespaces. Lihat bantuan pesta Kubernet untuk detailnya .

Pembatasan default pada memori dan CPU di namespace


Jika aplikasi tidak ditulis dengan benar, misalnya, setiap detik membuka koneksi database baru, tetapi tidak pernah menutupnya, maka kebocoran kehabisan memori terjadi di cluster. Dan jika tidak ada batas memori untuk aplikasi selama penyebaran, ini dapat menyebabkan kegagalan simpul.

Untuk mencegah hal ini, Kubernetes memungkinkan Anda untuk menetapkan batasan default untuk setiap namespace. Mereka ditulis dalam file yaml untuk namespace tertentu. Berikut ini contoh file seperti itu:

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

Buat yaml seperti itu dan terapkan ke namespace apa pun. Misalnya, ke namespace limit-example. Sekarang, untuk setiap kontainer yang digunakan di namespace ini, batas 512Mi akan berlaku, kecuali jika ada batas individu lain yang ditetapkan untuk wadah ini.

Pengumpulan sampah dalam versi Kubernet yang lebih lama


Kubelet secara default memulai pengumpulan sampah ketika var / lib / docker mengambil 90% dari ruang disk yang tersedia. Namun, ini baik-baik saja, sebelum Kubernetes 1.7 tidak ada batasan default pada jumlah inode yang digunakan (inode), yang sesuai dengan jumlah file dalam sistem file.

Secara potensial, wadah var / lib / docker Anda hanya dapat menggunakan 50% dari ruang disk, tetapi inode dapat habis, yang akan menyebabkan masalah bagi pekerja.

Dalam versi kubelet yang lebih lama dari 1,4 hingga 1,6, Anda harus menambahkan flag berikut:

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

Di versi 1.7 dan yang lebih baru, flag ini diset secara default. Namun, versi sebelumnya tidak mengikuti batas inode.

Minikube ... Kubernet lokal kecil tapi kuat


Minikube adalah cara termudah untuk memulai kluster Kubernetes lokal. Itu dimulai dengan perintah sederhana:

minikube start

Sebagai hasil dari perintah ini, cluster Kubernetes nyata berjalan di komputer Anda.


Sumber ilustrasi

Kuncinya adalah bagaimana membangun aplikasi dan menjalankannya secara lokal di kluster ini. Kecuali diinstruksikan secara khusus, gambar Docker akan dibuat di komputer Anda, bukan di cluster.

Untuk memaksa Docker mengirim gambar ke kluster Kubernetes lokal, mesin docker diberikan perintah berikut:

eval $(minikube docker-env)

Sekarang kita dapat membangun aplikasi pada kluster Kubernetes lokal.

Jangan memberikan akses kubectl ke semua orang


Ini tampak jelas, tetapi jika beberapa tim menggunakan kluster yang sama untuk aplikasi mereka (yang dibuat Kubernetes), Anda tidak boleh hanya memberikannya kepada semua orang kubectl. Lebih baik memisahkan tim dengan memberikan masing-masing ruang nama sendiri dan membatasi akses oleh kebijakan RBAC.

Anda dapat menjadi bingung dengan mendaftar untuk setiap pod hak untuk mengakses, membaca, membuat, menghapus dan operasi lainnya. Tetapi yang utama adalah membatasi akses ke rahasia, hanya mengizinkannya untuk administrator. Jadi kami membedakan antara mereka yang dapat mengelola cluster, dan mereka yang hanya bisa menggunakan di dalamnya.

Kelola anggaran perapian


Bagaimana cara menjamin tidak ada downtime untuk aplikasi di cluster Kubernetes? PodDisruptBudget dan lagi PodDisruptionBudget.

Cluster diperbarui secara berkala, dan node dikosongkan. Tidak ada yang diam, begitulah kenyataannya. Di setiap penyebaran dengan lebih dari satu contoh, Anda harus menyertakan PDB (PodDisruptBudget). Itu dibuat dalam file yaml sederhana yang berlaku untuk cluster. Area jangkauan PDB tertentu ditentukan oleh pemilih label.

Catatan: Anggaran PDB diperhitungkan hanya jika terjadi gangguan sukarela . Dalam situasi seperti kegagalan perangkat keras, 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 adalah matchLabelsdan minAvailable. Parameter pertama menunjukkan aplikasi mana yang memiliki anggaran. Misalnya, jika saya memiliki penyebaran app: app-adan tag app: app-b, maka PDB ini hanya akan berlaku untuk yang pertama.

Parameter minAvailablediperhitungkan saat mengosongkan (membersihkan) unit. Sebagai contoh, dalam contoh kita, semua app: app-akecuali dua contoh digantikan selama kehancuran .

Ini memungkinkan Anda untuk mengontrol berapa banyak contoh aplikasi yang harus berjalan pada waktu tertentu.

Pemantauan Kesehatan Aplikasi


Pemantauan semacam itu dimungkinkan dengan dua cara: menggunakan sampel Kesiapan atau Liveness.

Tes kesiapan pertama menentukan apakah wadah siap menerima lalu lintas.

Yang kedua (liveness) menunjukkan apakah wadah berfungsi atau perlu dimulai kembali.

Konfigurasi yang sesuai hanya ditambahkan ke yaml untuk penerapan. Di sana Anda dapat menentukan batas waktu, waktu tunda dan jumlah percobaan ulang. Lihat dokumentasi Kubernetes untuk lebih jelasnya .

Tag di mana-mana


Tag adalah salah satu konsep dasar dalam Kubernetes. Mereka memungkinkan objek untuk berkomunikasi secara bebas satu sama lain, serta membuat permintaan berdasarkan label. Di Kubernetes, Anda bahkan dapat pergi ke klien dan menonton acara dengan tag tertentu.

Dengan bantuan label, Anda dapat melakukan hampir semua hal, tetapi contoh yang baik adalah membuat beberapa lingkungan untuk menjalankan program dalam satu cluster.

Misalkan Anda menggunakan cluster yang sama untuk devdan qa. Ini berarti bahwa Anda mungkin memiliki aplikasi yang app-aberjalan secara bersamaan di kedua lingkungan qadan dev. Dalam hal ini, kita dapat mengakses instance aplikasi dalam lingkungan spesifik secara terpisah dengan menentukan parameter yang sesuai environment. Misalnya, app: app-adan environment: devuntuk satu lingkungan, dan app: app-adanenvironment: qauntuk kedua.

Ini memungkinkan Anda untuk mengakses kedua contoh aplikasi, misalnya, untuk menguji secara bersamaan.

Letakkan sesuai urutan


Kubernetes adalah sistem yang sangat kuat, tetapi sistem apa pun dapat berakhir dalam banyak proses. Kubelet meluncurkan semua proses dan memeriksa yang Anda tentukan, serta proses Anda sendiri.

Tentu saja, satu layanan yatim tidak akan memperlambat sistem, dan Kubernet awalnya dirancang untuk ditingkatkan. Tetapi jika satu juta muncul bukannya satu layanan, kubelet mulai tersedak.

Jika karena alasan tertentu Anda menghapus penyebaran (wadah, gambar, apa pun), pastikan untuk menghapusnya sepenuhnya.

Mengenal pergi


Kami menyimpan saran utama pada akhirnya. Pelajari bahasa pemrograman Go.

Kubernet dikembangkan di Go, semua ekstensi ditulis di Go, dan perpustakaan klien-go klien juga didukung secara resmi.

Dapat digunakan untuk hal-hal yang berbeda dan menarik. Misalnya, untuk memperluas sistem Kubernetes sesuai selera Anda. Jadi, Anda dapat menggunakan program Anda sendiri untuk mengumpulkan data, menyebarkan aplikasi, atau hanya membersihkan wadah.

Mempelajari bahasa pemrograman Go dan menguasai client-go mungkin adalah tip paling penting yang dapat Anda berikan kepada pengguna Kubernet pemula.

Diterjemahkan dengan dukungan dari Mail.ru Cloud Solutions


All Articles