10 Trik dan Tip Kubernetes Teratas

10 Trik dan Tip Kubernetes Teratas

Ada banyak literatur referensi di Internet, tetapi terkadang nasihat yang paling sederhana adalah yang paling berharga. Tim Kubernetes aaS dari Mail.ru diterjemahkan pilihan sepuluh trik dan tip, yang dikumpulkan penulis artikel setelah satu tahun bekerja dengan Kubernetes. Kiat-kiat ini tidak diurutkan berdasarkan kepentingannya, tetapi kami pikir setiap orang akan menemukan sesuatu yang berguna untuk dirinya sendiri.

Perintah paling sederhana untuk bekerja dengan Kubernetes

Untuk memulainya, mungkin tindakan paling sederhana dan paling berguna dalam bekerja dengan Kubernetes. Perintah berikut memungkinkan penyelesaian perintah kubectl di bash shell:

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

IsiOtomatis kubectl akan ditulis ke file .bashrc dan akan diaktifkan secara otomatis setiap kali shell dijalankan. Ini mempercepat pengetikan perintah panjang dan parameter seperti all-namespaces. Baca selengkapnya di Bantuan pesta Kubernetes.

Memori default dan batas CPU dalam namespace

Jika aplikasi ditulis dengan salah, misalnya membuka koneksi baru ke database setiap detik tetapi tidak pernah menutupnya, maka cluster mengalami kebocoran memori. Dan jika aplikasi tidak menetapkan batas memori selama penerapan, hal ini dapat menyebabkan kegagalan node.

Untuk mencegah hal ini, Kubernetes memungkinkan Anda menetapkan batasan default berdasarkan per namespace. Mereka ditulis dalam file yaml untuk namespace tertentu. Berikut adalah contoh file tersebut:

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

Buat yaml tersebut dan terapkan ke namespace mana pun. Misalnya saja pada namespace limit-example. Sekarang setiap kontainer yang disebarkan di namespace ini akan memiliki batas 512Mi, kecuali batas individual lain ditetapkan untuk kontainer ini.

Pengumpulan sampah di Kubernetes versi lama

Kubelet secara default memulai pengumpulan sampah ketika var/lib/buruh pelabuhan menempati 90% ruang disk yang tersedia. Ini bagus, namun hingga Kubernetes 1.7 tidak ada batasan default pada jumlah inode yang digunakan, yang sesuai dengan jumlah file dalam sistem file.

Kemungkinan wadah Anda var/lib/buruh pelabuhan mungkin hanya menggunakan 50% ruang disk, tetapi mungkin kehabisan inode, yang akan menimbulkan masalah bagi pekerja.

Pada kubelet versi 1.4 hingga 1.6 yang lebih lama, Anda harus menambahkan tanda ini:

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

Di versi 1.7 dan yang lebih baru, tanda ini disetel secara default. Namun, versi sebelumnya tidak memantau batas inode.

Minikube... Kubernet lokal yang kecil namun kuat

Minikube adalah cara termudah untuk menjalankan cluster Kubernetes lokal. Ini diluncurkan dengan perintah sederhana:

minikube start

Menjalankan perintah ini akan menghasilkan cluster Kubernetes nyata yang berjalan di mesin Anda.

10 Trik dan Tip Kubernetes Teratas
Sumber ilustrasi

Caranya adalah bagaimana membangun aplikasi dan menjalankannya secara lokal di cluster tersebut. Kecuali diinstruksikan secara khusus, image Docker akan dibuat di komputer Anda dan bukan di cluster.

Untuk memaksa Docker mengirimkan image ke cluster Kubernetes lokal, mesin buruh pelabuhan diberikan perintah berikut:

eval $(minikube docker-env)

Sekarang kita dapat membangun aplikasi di cluster Kubernetes lokal.

Jangan berikan akses kubectl kepada semua orang

Hal ini tampak jelas, namun jika beberapa tim menggunakan cluster yang sama untuk aplikasi mereka (yang menjadi tujuan Kubernetes diciptakan), Anda tidak boleh memberikan semua orang kubectl. Lebih baik memisahkan perintah, menetapkan namespace masing-masing perintah dan membatasi akses menggunakan kebijakan RBAC.

Anda bisa menjadi bingung dengan memberikan hak akses, membaca, membuat, menghapus, dan operasi lainnya untuk setiap pod. Tetapi yang utama adalah membatasi akses ke rahasia, hanya mengizinkannya untuk administrator. Dengan cara ini kita akan membedakan antara mereka yang dapat mengelola cluster dan mereka yang dapat langsung menerapkannya.

Kelola Anggaran Pod

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

Cluster diperbarui secara berkala dan node dikosongkan. Tidak ada yang tinggal diam, itulah kenyataannya. Setiap penerapan dengan lebih dari satu instance harus menyertakan PDB (PodDisruptionBudget). Itu dibuat dalam file yaml sederhana yang diterapkan ke cluster. Cakupan wilayah suatu PDB tertentu ditentukan oleh label selector.

Catatan: Anggaran PDB diperhitungkan hanya jika pelanggaran anggaran dapat dibalikkan (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 utamanya adalah matchLabels и minAvailable. Parameter pertama menentukan aplikasi mana yang menerapkan anggaran. Misalnya, jika saya memiliki penerapan dengan label app: app-a и app: app-b, maka PDB ini hanya berlaku untuk PDB pertama.

Parameter minAvailable diperhitungkan saat mengosongkan (membersihkan) node. Misalnya, dalam contoh kita, saat pengosongan, semua instance akan dikeluarkan app: app-a, kecuali dua.

Hal ini memungkinkan Anda mengontrol berapa banyak contoh aplikasi yang harus dijalankan pada waktu tertentu.

Pemantauan kesehatan aplikasi

Pemantauan tersebut dapat dilakukan dengan dua cara: menggunakan uji Kesiapan atau Keaktifan.

Probe pertama (kesiapan) menentukan kesiapan container untuk menerima lalu lintas.

Yang kedua (kehidupan) menunjukkan apakah container tersebut sehat atau perlu di-restart.

Konfigurasi yang relevan cukup ditambahkan ke yaml untuk penerapan. Di sana Anda dapat menentukan batas waktu, waktu tunda, dan jumlah percobaan ulang. Lihat rincian lebih lanjut tentang mereka Dokumentasi Kubernetes.

Tag ada dimana-mana

Label adalah salah satu konsep dasar di Kubernetes. Mereka mengizinkan objek untuk berkomunikasi secara bebas satu sama lain, serta membuat kueri berdasarkan label. Di Kubernetes, Anda bahkan dapat membuka klien dan menonton acara untuk tag tertentu.

Anda dapat melakukan hampir semua hal dengan tag, namun contoh yang baik adalah membuat beberapa lingkungan untuk menjalankan program di cluster yang sama.

Katakanlah Anda menggunakan cluster yang sama untuk dev и qa. Artinya Anda dapat memiliki aplikasi app-a, secara bersamaan bekerja di kedua lingkungan qa и dev. Dalam hal ini, kita dapat mengakses instance aplikasi secara terpisah di lingkungan tertentu dengan menentukan parameter yang sesuai environment. Misalnya, app: app-a и environment: dev untuk satu lingkungan, dan app: app-a и environment: qa untuk yang kedua.

Hal ini memungkinkan Anda mengakses kedua contoh aplikasi, misalnya, untuk melakukan pengujian secara bersamaan.

Bersikaplah terorganisir

Kubernetes adalah sistem yang sangat kuat, namun sistem apa pun pada akhirnya bisa terhenti karena terlalu banyak proses. Kubelet menjalankan semua proses dan pemeriksaan yang Anda tentukan, serta prosesnya sendiri.

Tentu saja, satu layanan yatim piatu tidak akan memperlambat sistem, dan Kubernetes dirancang untuk meningkatkan skalanya dari awal. Namun jika alih-alih satu layanan muncul satu juta layanan, kubelet mulai tersedak.

Jika karena alasan tertentu Anda menghapus penerapan (kontainer, gambar, apa pun), pastikan untuk melakukan pembersihan menyeluruh.

Temui Pergi

Kami menyimpan saran utama untuk yang terakhir. Pelajari bahasa pemrograman Go.

Kubernetes dikembangkan di Go, semua ekstensi ditulis di Go, dan pustaka klien client-go juga didukung secara resmi.

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

Mempelajari bahasa pemrograman Go dan menguasai client-go mungkin merupakan saran paling penting yang dapat Anda berikan kepada pengguna baru Kubernetes.

Diterjemahkan dengan dukungan Mail.ru Cloud Solutions

Apa lagi yang harus dibaca:

  1. Tiga tingkat penskalaan otomatis di Kubernetes dan cara menggunakannya secara efektif.
  2. Node pekerja Kubernetes: banyak node kecil atau sedikit node besar?
  3. 25 Alat Berguna untuk Menerapkan dan Mengelola Kubernetes.

Sumber: www.habr.com

Tambah komentar