GNU/Linux >> Belajar Linux >  >> Linux

Cara Menguras Node di Kubernetes

Dalam tutorial Kubernetes ini, Anda akan belajar menguras sebuah node menggunakan perintah kubectl drain untuk mempersiapkan pemeliharaan.

Sesederhana memasukkan perintah ini:

kubectl drain node_name

Anda bisa mendapatkan detail node menggunakan kubectl get nodes perintah.

Namun ada lebih banyak lagi cara menguras node di Kubernetes, jadi mari kita lihat detailnya.

Mengapa Anda perlu menguras node?

Kubernetes dirancang untuk toleran kesalahan terhadap kegagalan node pekerja.

Mungkin ada beberapa alasan mengapa node pekerja menjadi tidak dapat digunakan seperti karena masalah perangkat keras, masalah penyedia cloud, atau jika ada masalah jaringan antara node pekerja dan master, master Kubernetes akan menanganinya secara efektif.

Tapi bukan berarti akan selalu begitu. Dan inilah saatnya Anda perlu menguras node dan menghapus semua pod.

Pengeringan adalah proses untuk mengeluarkan semua pod dari sebuah node dengan aman. Dengan cara ini, container yang berjalan pada pod berhenti dengan baik.

Cara menguras node di Kubernetes dengan benar

Mari kita mulai dengan demonstrasi praktis.

Langkah 1:Tandai node sebagai tidak terjadwal (cordon)

Untuk melakukan pemeliharaan pada sebuah node, Anda harus membatalkan jadwal dan kemudian menguras sebuah node.

Pertama, lihat node yang sedang berjalan:

[email protected]:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8
[email protected]:~#

Lihat pod yang berjalan pada node yang berbeda:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Sekarang tandai node sebagai tidak terjadwal dengan menjalankan perintah berikut:

[email protected]:~# kubectl cordon kworker-rj2
node/kworker-rj2 cordoned
[email protected]:~# 

Buat daftar node lagi:

[email protected]:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
[email protected]:~#

Anda dapat melihat bahwa node kworker-rj2 sekarang diberi label sebagai SchedulingDisabled.

Sampai langkah ini tidak mengusir pod yang berjalan di node itu. Verifikasi status pod:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Anda dapat melihat bahwa pod "my-dep-557548758d-d2pmd" masih berjalan pada node kworker-rj2.

Langkah 2:Kuras node untuk mempersiapkan pemeliharaan

Sekarang tiriskan node sebagai persiapan maintenance untuk menghapus pod yang berjalan pada node dengan menjalankan perintah berikut:

[email protected]:~# kubectl drain kworker-rj2 --grace-period=300 --ignore-daemonsets=true
node/kworker-rj2 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-fl8dl, kube-system/kube-proxy-95vdf
evicting pod default/my-dep-557548758d-d2pmd
pod/my-dep-557548758d-d2pmd evicted
node/kworker-rj2 evicted
[email protected]:~#

CATATAN: kubectl drain tidak dapat menghapus Pod yang tidak dikelola oleh ReplicationController, ReplicaSet, Job, DaemonSet atau StatefulSet. Anda perlu menggunakan --force untuk menggantinya dan dengan melakukan itu setiap pod akan dihapus secara permanen.

Sekarang lihat polongnya:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-dsanh   1/1     Running   0          27s     172.16.213.38   kworker-rj1   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Pod yang berjalan pada node kworker-rj2 dikeluarkan dari sana dan dimulai sebagai pod baru pada node kworker-rj1.

Status node tetap sama:

[email protected]:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
[email protected]:~#

Langkah 3:Lepaskan simpul setelah pemeliharaan selesai

Anda perlu menjalankan perintah berikut setelahnya untuk memberi tahu Kubernetes bahwa ia dapat melanjutkan penjadwalan pod baru ke dalam node.

[email protected]:~# kubectl uncordon kworker-rj2
node/kworker-rj2 uncordoned

Verifikasi status simpul:

[email protected]:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8

Node kworker-rj2 menjadi siap lagi untuk menangani beban kerja baru.

Saya harap Anda menyukai tip singkat ini tentang menguras node di Kubernetes.

Rakesh Jain
DevOps Profesional | RHCA | Jenkins | Git | buruh pelabuhan | Kubernet | Mungkin | Prometheus | Grafana | AWS Cloud

Linux
  1. Cara Menginstal Node.js di Fedora 35 / Fedora 34

  2. Cara menginstal NodeJs di Ubuntu 18.04

  3. Bagaimana cara menjalankan riwayat Pod di Kubernetes Node?

  1. Cara menggunakan Podman di dalam Kubernetes

  2. Cara Menghapus Layanan di Kubernetes

  3. Cara Menambahkan atau Menghapus Label ke Node di Kubernetes

  1. Cara Menginstal Jenkins di Kubernetes

  2. Cara Memulai Ulang Pod Kubernetes

  3. Cara Menjalankan MongoDB di Kubernetes