GNU/Linux >> Znalost Linux >  >> Linux

Jak vypustit uzel v Kubernetes

V tomto tutoriálu Kubernetes se naučíte odvodnit uzel pomocí příkazu kubectl drain k přípravě na údržbu.

Je to stejně jednoduché jako zadání tohoto příkazu:

kubectl drain node_name

Podrobnosti o uzlech můžete získat pomocí kubectl get nodes příkaz.

Vyčerpávání uzlů v Kubernetes však obsahuje více, takže se na to pojďme podrobně podívat.

Proč potřebujete odvodnit uzly?

Kubernetes je navržen tak, aby byl odolný vůči selháním pracovních uzlů.

Mohou existovat různé důvody, proč se pracovní uzel stane nepoužitelným, například kvůli problémům s hardwarem, problémům s poskytovatelem cloudu nebo pokud dojde k problémům se sítí mezi pracovním a hlavním uzlem, hlavní uzel Kubernetes to efektivně zvládne.

Ale to neznamená, že to tak bude vždy. A to je, když potřebujete odvodnit uzly a odstranit všechny lusky.

Vypouštění je proces pro bezpečné vyjmutí všech lusků z uzlu. Tímto způsobem kontejnery běžící na podu ladně končí.

Jak správně vyprázdnit uzly v Kubernetes

Začněme praktickou ukázkou.

Krok 1:Označte uzel jako neplánovatelný (kordón)

Chcete-li provést údržbu uzlu, měli byste zrušit plán a poté vypustit uzel.

Nejprve se podívejte na aktuálně spuštěné uzly:

[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]:~#

Podívejte se na moduly běžící na různých uzlech:

[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]:~#

Nyní označte uzel jako neplánovatelný spuštěním následujícího příkazu:

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

Vypište znovu uzly:

[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]:~#

Můžete si všimnout, že uzel kworker-rj2 je nyní označen jako SchedulingDisabled.

Do tohoto kroku to nevyhodí moduly běžící na tomto uzlu. Ověřte stav 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]:~#

Vidíte, že pod "my-dep-557548758d-d2pmd" stále běží na uzlu kworker-rj2.

Krok 2:Vypusťte uzel a připravte se na údržbu

Nyní vypusťte uzel v rámci přípravy na údržbu, abyste odstranili pody, které na uzlu běží, spuštěním následujícího příkazu:

[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]:~#

POZNÁMKA: kubectl drain nemůže odstranit moduly, které nejsou spravovány pomocí ReplicationController, ReplicaSet, Job, DaemonSet nebo StatefulSet. K přepsání musíte použít --force a tím budou jednotlivé pody trvale smazány.

Nyní se podívejte na pody:

[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, který běžel na uzlu kworker-rj2, byl odtud vyřazen a začal jako nový modul na uzlu kworker-rj1.

Stav uzlů zůstává stejný:

[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]:~#

Krok 3:Uvolněte uzel po dokončení údržby

Poté musíte spustit následující příkaz, abyste Kubernetes řekli, že může pokračovat v plánování nových podů do uzlu.

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

Ověřte stav uzlu:

[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

Uzel kworker-rj2 bude opět připraven zvládnout nové pracovní zatížení.

Doufám, že se vám tento rychlý tip o vypouštění uzlů v Kubernetes líbí.

Rakesh Jain
DevOps Professional | RHCA | Jenkins | Git | Docker | Kubernetes | Ansible | Prometheus | Grafana | AWS Cloud

Linux
  1. Jak odstranit službu v Kubernetes

  2. Jak přidat nebo odebrat štítky do uzlů v Kubernetes

  3. Jak spustit historii Pods na Kubernetes Node?

  1. Jak nainstalovat Node.js na Fedora 35 / Fedora 34

  2. Jak používat Podman uvnitř Kubernetes

  3. Jak nainstalovat NodeJs na Ubuntu 18.04

  1. Jak nainstalovat Jenkins na Kubernetes

  2. Jak restartovat Kubernetes Pods

  3. Jak spustit MongoDB na Kubernetes