Apa itu Taints & Tolerants di Kubernetes dan Bagaimana Cara Kerjanya?

Dalam kehidupan umum, kita sering mengembangkan ketertarikan dengan orang-orang yang sangat kita sukai dan ingin kita libatkan. Demikian pula, di Kubernetes, kita dapat membangun kedekatan antara node dan pod.

Jika Anda ingin memastikan bahwa hanya beberapa jenis pod yang dapat diakomodasi di Node pekerja tertentu dan menolak pod lain yang Anda tidak ingin menjadi bagian dari Node pekerja kuat>, Anda dapat menggunakan konsep

“Noda & Toleransi ”

Mari Pahami analogi nyamuk & manusia:

Misalkan Anda tidak ingin nyamuk menggigit Anda, lalu apa yang Anda lakukan? Anda menggunakan obat nyamuk atau mengoleskan Odomos (gel pengusir nyamuk).

Di mana pun di tubuh Anda, Anda menerapkan Odomos sehingga bagian tersebut menjadi “Tercemar”. Nyamuk kita tidak toleran terhadap noda jenis ini, sehingga kapan pun mereka mendekati bagian tubuh yang tercemar, mereka tidak akan tahan dan akan terbang.

Jadi tubuh kita di sini “Tercemar” dan Nyamuk “Tidak Toleran”

Namun jika ada jenis serangga lain yang toleran terhadap noda yang diberikan (penolak), mereka akan dapat hinggap di tubuh kita.

Jadi dalam hal ini tubuh “Tercemar” bug lainnya “Toleran”.

Dengan analogi ini, sekarang kita dapat memahami bahwa beberapa jenis Node dinodai untuk menolak beberapa jenis Pod yang tidak toleran, pod ini tidak akan dapat menempel pada Node tersebut, sementara beberapa jenis Pod lain yang toleran ke Node pekerja yang tercemar, akan dapat tinggal di Node tersebut.

Noda & Toleransi Dalam Konteks Kubernetes:

Dalam kasus Kubernetes

  • Node: adalah orang yang diinginkan bug untuk duduk. Node-nya umumnya tercemar
  • Pod: adalah Serangga/Nyamuk Itu Sendiri. Pod di sini umumnya dibuat toleran

Noda dan toleransi hanyalah sebuah mekanisme untuk menerapkan pembatasan guna memastikan bahwa pod tidak dijadwalkan ke node pekerja yang tidak sesuai.

Mari kita pahami dengan gambar di bawah ini:

Penjelasan:

Pekerja NODE 1 Tercemar & POD 3 Ditandai Toleran:

NODE 1 di sini ditandai Tercemar dengan (warna hijau), artinya tidak ada satu pun pod, POD 1, POD 2, POD 3 yang dapat berada di NODE 1 hingga salah satu atau semuanya ditandai toleran terhadap Node. 1 noda.

Jadi jika kita menandai POD 3 sebagai toleran terhadap noda NODE 1 seperti yang ditunjukkan pada gambar di atas, dan membiarkan pod lain, pod 1, pod 2 menjadi tidak toleran terhadap noda Node 1, berikut adalah bagaimana situasinya:

Penjelasan:

POD 3 diperbolehkan berada di NODE 1 karena telah ditandai toleran terhadapnya. Pod lainnya diperbolehkan untuk ditampung di NODE 2 dan NODE 3.

Catatan!

POD 3 meskipun ditandai toleran terhadap NODE 1, mempunyai kebebasan penuh untuk menjadi bagian dari Node Lain: Node 2 & Node 3, namun pod POD 1, POD 2 tidak diperbolehkan ditampung di NODE 1, sampai mereka ditandai toleran terhadap hal itu.

Maka dengan intuisi dan pemahaman inilah saatnya untuk memahami

Bagaimana Noda Diterapkan?

Anda menambahkan taint ke sebuah node menggunakan kubectl taint.

Misalnya, menambahkan taint menggunakan perintah kubectl taint akan memiliki sintaks berikut:

kubectl taint nodes <node name >key=value:taint-effect

Di sini,

  • taint: adalah perintah untuk menerapkan taint pada node
  • node: adalah kumpulan node pekerja
  • nama node: adalah nama node pekerja tertentu, yang mana taint harus diterapkan, node tersebut memiliki pasangan nilai kunci
  • pasangan nilai-kunci:digunakan untuk menentukan jenis aplikasi mana di dalam pod yang akan dipasangi node ini
  • efek noda: Ini digunakan untuk menentukan bagaimana pod akan diperlakukan jika tidak toleran terhadap noda.

Efek noda memiliki jenis berikut

  • Tidak Ada Jadwal
  • PreferNoSchedule
  • Tidak ada Jalankan

Jadi seperti inilah tampilan perintah terakhirnya:

kubectl taint nodes node1 app=blue: NoSchedule

di sini node1 tercemar dengan pod dengan pasangan nilai kunci app=blue, yang mana pod dipetakan dengan jenis efek noda: NoSchedule. Artinya, tidak ada pod yang akan dijadwalkan pada node tertentu, node1 hingga node tersebut memiliki toleransi yang cocok

Menambahkan Toleransi Pada Pod:

Pada definisi Pod di atas, kita menentukan toleransi untuk sebuah Pod di bagian Spesifikasi Pod seperti yang ditunjukkan pada gambar di atas.

tolerations:
- key: "app"
  operator: "Equal"
  value: "blue"
  effect: "NoSchedule"

Definisi toleransi ini cocok dengan perintah di bawah ini,

kubectl taint nodes node1 app=blue: NoSchedule

tempat kami menambahkan taint untuk mencocokkan pod dengan pasangan nilai kunci app=blue.

Jadi dengan toleransi ini, kini Pod tol-pod akan diperbolehkan untuk dijadwalkan dengan Node yang tercemar untuk menerima tipe nilai app= blue.

Bagaimana Noda & Toleransi Bekerja Sama:

Toleransi yang ditentukan dalam definisi pod cocok dengan taint (dipetakan dengan node pekerja), di mana ia mencari kunci dan efek taint yang cocok

Ingat: Ada dua kasus khusus:

Secara default, operasi bertipe : Equal

  • Jika dalam definisi terdapat kunci kosong dengan tipe operator Ada, maka cocok dengan semua kunci, nilai, dan efek, artinya nilai kunci yang dipetakan dengan noda apa pun, akan mentolerir segalanya.
  • Efek kosong mencocokkan semua efek dengan kunci, Kunci.

Memahami Efek Noda Lainnya:

Efek Noda: PreferNoSchedule

tolerations:
- key: "app"
  operator: "Equal"
  value: "blue"
  effect: "PreferNoSchedule"

Jika kita mengubah jenis efek noda menjadi : effect: "PreferNoSchedule",

ini berarti ini adalah versi “preferensi” atau “lunak” dari NoSchedule -- sistem akan mencoba menghindari penempatan pod yang tidak menoleransi noda pada node, namun hal ini tidak diperlukan

Efek Noda: Tanpa Eksekusi

Untuk memahaminya dengan lebih baik, mari kita ambil kasus penggunaan baru di mana kita memiliki beberapa toleransi yang dipetakan dengan pasangan nilai kunci yang sama namun memiliki jenis efek noda yang berbeda.

Mari tambahkan noda pada node: node 1, seperti yang ditunjukkan di bawah ini

- $ kubectl taint nodes node1 app=blue:NoSchedule
- $ kubectl taint nodes node1 app=blue:NoExecute
- $ kubectl taint nodes node1 app=green:NoSchedule

Sekarang mari kita buat definisi pod dengan dua toleransi, seperti yang ditunjukkan di bawah ini:

apiVersion: v1
kind: Pod
metadata:
  name: tol-pod
  labels:
    env: prod
spec:
  containers:
  - name: nginx-cotainer
    image: nginx
  
  tolerations:
  - key: "app"
     operator: "Equal"
     value: "blue"
     effect: "NoSchedule"
  - key: "app"
     operator: "Equal"
     value: "blue"
     effect: "NoExecute"

Penjelasan:

Dalam situasi yang digambarkan di atas, pod kita tidak akan dijadwalkan ke node, node1karena tidak ada toleransi yang cocok dengan noda ketiga.

Namun, jika pod sudah berjalan di dalam node, ia dapat terus melakukan hal tersebut, jika node tersebut baru ternoda, karena taint ketiga adalah satu-satunya dari tiga toleransi, yang tidak ditentukan untuk ditangani oleh node tersebut. simpul.

Secara umum, jika ada node yang memiliki taint bertipe NoExecute dan pod mana pun yang belum dikembangkan, toleransi untuk menangani taint tersebut, akan dihilangkan (jika toleransi tersebut sudah ada sebelum node tersebut taint )tetapipolong apa pun yang tahan terhadap noda tidak akan pernah diusir.

toleransiDetik:

Jika kita ingin menginstruksikan pod dengan efek taint: NoExecute , agar tetap terikat pada Node yang ternoda dan terpaksa dikeluarkan, untuk jangka waktu tertentu kita dapat menggunakan kolom tolerationSeconds opsional, di toleransi definisi, seperti yang ditunjukkan di bawah ini

tolerations:
- key: "app"
  operator: "Equal"
  value: "app"
  effect: "NoExecute"
  tolerationSeconds: 3600

Ringkasan:

Kami mengerti

  • Apa itu Noda & Toleransi?
  • Mengapa Noda & Toleransi Digunakan?
  • Bagaimana cara menambahkan noda ke Node Pekerja?
  • Bagaimana Menambahkan Toleransi pada Pod?

Saya ingin menutup bagian ini dengan beberapa poin yang menyebutkan kasus penggunaan Taints & Tolerations. Seperti yang telah kita bahas sejauh ini, Taint dan Toleransi adalah cara yang fleksibel untuk mengusir pod dari node atau mengeluarkan pod yang seharusnya tidak berjalan, jadi ada baiknya kita melihat salah satu kasus penggunaan penting dari hal tersebut:

Node Khusus Terikat Pada Grup Pengguna/Kumpulan Pengguna Tertentu

  • Jika sebagai admin Kubernetes atau arsitek DevOps Anda ingin menggunakan node pekerja tertentu di kluster k8s, khusus untuk kumpulan atau grup pengguna tertentu, kita dapat melakukannya dengan,

$ kubectl taint nodes nodename dedicated=groupName:NoSchedule

Pod dengan toleransi kemudian akan diizinkan untuk menggunakan node khusus dan ternoda di cluster. Agar Pod dapat dijadwalkan ke node-node dengan label khusus, Pod harus mempunyai definisi afinitas node di mana label khusus ini: nama grup harus ditentukan.

Kita akan mempelajari lebih lanjut tentang Node Affinity di artikel Berikutnya dalam seri ini atau Taints & Tolerations.

2. Penggusuran berbasis noda:

Kita dapat menggunakan efek taint NoExecute dengan bijak untuk menerapkan pengusiran pod berdasarkan masalah Node yang perlu ditangani untuk mengatasi kendala sumber daya di node atau masalah relevan lainnya yang terkait dengan Node pekerja.

Apa berikutnya?

Kami akan melihat beberapa kasus penggunaan Taints & Tolerations lebih lanjut seperti

  • Afinitas Node
  • Kasus penggunaan Pengusiran Pod berbasis noda
  • Bagaimana cara mengontrol spesifikasi tingkat perangkat keras khusus di Node?
  • dan masih banyak lagi…..

Jika Anda menyukai karya ini, tunjukkan dukungan dan kasih sayang dengan mengikuti saya dan bertepuk tangan

Terima kasih sudah hadir………..