Ngaronjatkeun Kluster Kubernetes Tanpa Waktos

Ngaronjatkeun Kluster Kubernetes Tanpa Waktos

Prosés ningkatkeun pikeun klaster Kubernetes anjeun

Dina sababaraha waktos, nalika nganggo kluster Kubernetes, peryogi pikeun ngapdet titik jalan. Ieu tiasa kalebet apdet pakét, apdet kernel, atanapi panyebaran gambar mesin virtual énggal. Dina terminologi Kubernetes ieu disebut "Gangguan Sukarela".

Tulisan ieu mangrupikeun bagian tina séri 4-pos:

  1. Tulisan ieu.
  2. Pareuman polong anu leres dina klaster Kubernetes
  3. Tunda parantosan pod nalika dipupus
  4. Kumaha Ngahindarkeun Kubernetes Cluster Downtime Ngagunakeun PodDisruptionBudgets

(kira-kira. Harepkeun tarjamahan tina sésa-sésa artikel dina séri éta dina mangsa nu bakal datang)

Dina artikel ieu, urang bakal ngajelaskeun sakabeh parabot nu Kubernetes disadiakeun pikeun ngahontal enol downtime pikeun titik jalan dina klaster Anjeun.

Nangtukeun masalah

Urang bakal nyandak pendekatan naif dina mimitina, ngaidentipikasi masalah jeung assess resiko poténsi pendekatan ieu, sarta ngawangun pangaweruh pikeun ngajawab unggal masalah urang sapatemon sapanjang siklus. Hasilna nyaéta konfigurasi anu ngagunakeun kait siklus hirup, panyilidikan kesiapan, sareng anggaran gangguan Pod pikeun ngahontal tujuan nol downtime kami.

Pikeun ngamimitian perjalanan urang, hayu urang nyandak conto konkrit. Anggap urang gaduh klaster Kubernetes tina dua titik, dimana aplikasi dijalankeun sareng dua pod anu aya di tukangeun. Service:

Ngaronjatkeun Kluster Kubernetes Tanpa Waktos

Hayu urang mimitian ku dua pod sareng Nginx sareng Service dijalankeun dina dua titik kluster Kubernetes urang.

Kami hoyong ngapdet versi kernel tina dua titik padamel dina kluster urang. Kumaha urang ngalakukeun ieu? Solusi anu saderhana nyaéta nga-boot titik-titik énggal sareng konfigurasi anu diropéa teras mareuman titik-titik lami nalika ngamimitian anu énggal. Sanaos ieu tiasa dianggo, bakal aya sababaraha masalah sareng pendekatan ieu:

  • Lamun anjeun mareuman titik heubeul, pods ngajalankeun on aranjeunna ogé bakal dipareuman. Kumaha upami polong kedah dibersihkeun pikeun mareuman anu saé? Sistem virtualisasi anu anjeun anggo panginten henteu ngantosan prosés ngabersihkeun réngsé.
  • Kumaha upami anjeun mareuman sadaya titik dina waktos anu sami? Anjeun bakal meunang downtime santun bari pods pindah ka titik anyar.

Urang peryogi cara pikeun migrasi pods tina titik-titik lami bari mastikeun yén teu aya prosés padamel urang anu dijalankeun nalika urang ngarobih kana titik. Atawa lamun urang ngalakukeun hiji ngagantian lengkep klaster, sakumaha dina conto (nyaeta, urang ngaganti gambar VM), urang rék mindahkeun ngajalankeun aplikasi tina titik heubeul ka nu anyar. Dina duanana kasus, urang hoyong nyegah pods anyar dijadwalkeun dina titik heubeul, lajeng nundung kabeh pods ngajalankeun ti aranjeunna. Pikeun ngahontal tujuan ieu urang tiasa nganggo paréntah kubectl drain.

Ngadistribusikaeun sadaya polong tina hiji titik

Operasi solokan ngidinan Anjeun pikeun ngadistribusikaeun sakabeh pods ti node a. Salila palaksanaan solokan, titik ditandaan salaku unschedulable (bandéra NoSchedule). Ieu nyegah pods anyar muncul dina eta. Teras solokan mimiti ngusir pods tina node, mareuman wadah anu ayeuna dijalankeun dina node ku ngirim sinyal. TERM wadahna dina pod.

sanajan kubectl drain bakal ngalakukeun padamelan anu saé pikeun ngusir pods, aya dua faktor sanés anu tiasa nyababkeun operasi solokan gagal:

  • Aplikasi anjeun kedah tiasa ngeureunkeun anggun nalika dikintunkeun TERM sinyal. Nalika pods digusur, Kubernetes ngirimkeun sinyal TERM wadahna sareng ngantosan aranjeunna eureun pikeun waktos anu ditangtukeun, saatos éta, upami aranjeunna henteu lirén, éta ngeureunkeunana sacara paksa. Dina naon waé, upami wadahna anjeun henteu ningali sinyalna leres, anjeun masih tiasa mareuman pods anu teu leres upami aranjeunna nuju jalan (contona, transaksi database nuju lumangsung).
  • Anjeun leungit kabeh pods nu ngandung aplikasi Anjeun. Éta moal sayogi nalika wadah énggal diluncurkeun dina titik énggal, atanapi upami pod anjeun dipasang tanpa pangendali, aranjeunna moal tiasa ngamimitian deui.

Ngahindarkeun downtime

Pikeun ngaleutikan downtime tina gangguan sukarela, sapertos ti operasi solokan dina node, Kubernetes nyadiakeun pilihan penanganan gagalna handap:

Dina séri sésana, urang bakal nganggo fitur Kubernetes ieu pikeun ngirangan dampak migrasi pods. Pikeun ngagampangkeun nuturkeun ide utama, urang bakal nganggo conto di luhur kalayan konfigurasi sumberdaya ieu:

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
   app: nginx
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.15
       ports:
       - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   targetPort: 80
   port: 80

Konfigurasi ieu conto minimal Deployment, anu ngatur pods nginx dina kluster. Salaku tambahan, konfigurasi ngajelaskeun sumberdaya Service, anu tiasa dianggo pikeun ngaksés pods nginx dina klaster.

Sapanjang siklus, urang bakal dilegakeun iteratively konfigurasi ieu ambéh maranéhanana pamustunganana ngawengku sakabéh kamampuhan Kubernetes disadiakeun pikeun ngurangan downtime.

Pikeun vérsi apdet klaster Kubernetes anu sapinuhna dilaksanakeun sareng diuji pikeun nol downtime dina AWS sareng saluareun, kunjungan Gruntwork.io.

Baca ogé artikel séjén dina blog urang:

sumber: www.habr.com

Tambahkeun komentar