Kubectx ve kubens ile Birden Çok Kümeyi ve Ad Alanını Yönetme

Kubernetes: Çalışan Düğümü Kubernetes Kümesinden  Kaldırma

Gracefully Remove Worker Node from Kubernetes Cluster

Bu eğiticide, çalışan düğümü Kubernetes kümesinden nasıl zarif bir şekilde kaldıracağınızı öğreneceksiniz.  Bir Kubernetes kümesini yönetiyorsanız buradan bir çalışan düğümü kaldırmanız gerekebilir.  Bir çalışan düğümünü Kubernetes kümesinden kaldırma işlemi, Kubernetes kümesini dağıtmak için kullanılan araca veya platforma göre biraz farklılık gösterebilir.  Örneğin, bir kubeadm Kubernetes kümesinden bir çalışan düğümü kaldırma işlemi, GKE, Rancher, OpenShift, Kubermatic veya kops kullanılarak dağıtılan bir Kubernetes’ten bir çalışan düğümü kaldırmaktan farklı olabilir.

Çalışan Düğümünü Kubernetes Kümesinden Doğru Bir Şekilde Kaldırma

Bu kılavuzda, kubeadm ile oluşturulan bir Kubernetes kümesinden bir çalışan düğümü güvenli veya zarif bir şekilde nasıl kaldıracağımızı öğreneceğiz.

Peki, çalışan düğümü Kubernetes kümesinden zarif bir şekilde kaldırmanın adımları nelerdir?

Düğümü Kaldırmaya Hazırlama

Bir üretim ortamında, uyanıp üretim iş yüklerini çalıştıran bir düğümü kaldırmaya karar veremezsiniz.  Kubernetes’te kesinti veya performans sorunları riskini en aza indirmek için kaldırma işlemine hazırlanmanız gerekir.

Düğümün Kubernetes kümesinden kaldırılmaya hazırlanması aşağıdaki gibi çeşitli görevleri içerir;

  • Küme iş yüklerini desteklemek için kümede yeterli kaynak bulunduğundan emin olun
  • Kaldırılan belirli bir düğüm tarafından barındırılan hizmetlerin Kubernetes küme düğümleri arasında dağıtıldığından emin olun.
  • Kümeden kaldırılan düğümdeki tüm verileri ve yapılandırmaları yedekleyin.
  • Düğümün kaldırılmasının kümedeki ağ ayarlarını etkilemediğinden emin olun.

İşçi Düğümünü Boşaltın

Bir çalışan düğümü Kubernetes kümesinden kaldırabilmeniz için önce o düğümde planlanan tüm Kapsülleri kümedeki diğer düğümlere taşımanız gerekir.  Buna Kubernetes’te bir düğümün boşaltılması denir ve Kubernetes iş yüklerinin gönüllü kesinti eylemlerinden biridir.  Bu, düğümün kullanımdan kaldırılması sırasında iş yüklerinin kesintisiz çalışmasını sağlayacaktır.

kubectl drain Hizmetten çıkarılmak üzere işaretlenmiş düğüm üzerinde çalışan düğümlerin diğer küme düğümlerine taşınması için kullanılabilecek komuttur.

Komutun Kubernetes kontrol düzleminde/ana düğümde yürütülmesi gerekir.

kubectl Drain komutunun söz dizimi şu şekildedir;

kubectl drain NODE [options]

Kümedeki düğümleri listeleyin;

kubectl get nodes

Örnek çıktı;


NAME                        STATUS   ROLES           AGE     VERSION
master.kifarunix-demo.com   Ready    control-plane   6d16h   v1.27.1
wk01.kifarunix-demo.com     Ready    worker          6d16h   v1.27.1
wk02.kifarunix-demo.com     Ready    <none>          6d15h   v1.27.1
wk03.kifarunix-demo.com     Ready    <none>          6d15h   v1.27.1

Daha sonra, kullanımdan kaldırılmak üzere işaretlenen çalışan düğümü boşaltmak için aşağıdaki komutu çalıştırabilirsiniz.

Örneğin yukarıdaki örnek çıktıda wk01’i boşaltalım;

kubectl drain wk01.kifarunix-demo.com

‘Boşaltma’ komutu zarif bir sonlandırma için bekler.  Komut tamamlanana kadar makine üzerinde işlem yapmamalısınız.

Tahliye komutu aynı zamanda düğümü kordon altına alacaktır.  Bu, düğümün programlanamaz olarak işaretlendiği ve Kubernetes zamanlayıcının düğüme yeni bölmeler yerleştirmesinin engellendiği anlamına gelir.

Düğümde daemon seti tarafından yönetilen bölmeler varsa, boşaltma komutu onu boşaltmaz.  Benzer şekilde, ayna bölmeleri olmayan veya bir çoğaltma denetleyicisi, çoğaltma kümesi, arka plan programı kümesi, durum bilgisi kümesi veya iş tarafından yönetilmeyen bölmeler varsa, boşaltma, –force kullanmadığınız sürece hiçbir bölmeyi silmez.  –force ayrıca bir veya daha fazla bölmenin yönetim kaynağının eksik olması durumunda silme işleminin devam etmesine de izin verecektir.

Yukarıdaki tahliye komutumdaki örnek çıktı;


node/wk01.kifarunix-demo.com cordoned
error: unable to drain node "wk01.kifarunix-demo.com" due to error:cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): calico-system/calico-node-g4vlv, calico-system/csi-node-driver-9b9xx, kube-system/kube-proxy-sn66b, continuing command...
There are pending nodes to be drained:
 wk01.kifarunix-demo.com
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): calico-system/calico-node-g4vlv, calico-system/csi-node-driver-9b9xx, kube-system/kube-proxy-sn66b

Düğümü zorla boşaltmak için komuta –force, –ignore-daemonsets seçeneklerini ekliyorum.

kubectl drain wk01.kifarunix-demo.com --force --ignore-daemonsets

Çalışan bölmelerin kesintiye uğramasına yol açabileceğinden bu bayrakları dikkatli kullanın

Daha önce de belirtildiği gibi, komutun düzgün bir şekilde sonlandırılmasına izin verin.

Bu işlemin tamamlanmasının biraz zaman alabileceğini unutmayın.

Check more options using the --help option.

kubectl drain --help

Komut çalıştırıldıktan sonra, herhangi bir iş yükünü kabul edecek şekilde okunmadığından emin olmak için düğümlerin durumunu kontrol edebilirsiniz.

Ayrıca bir düğümün boşaltma sürecini etkileyebilecek bir takım kısıtlamalar da vardır;

  • Pod Disruption Budgets (PDBs): Bu, belirli bir bölmenin, düğüm bakımı, güncellemeler vb. gibi isteğe bağlı kesinti eylemleri sırasında sahip olması gereken minimum kopya sayısını ayarlayan bir Kubernetes özelliğidir. Bir düğümün boşaltılması, hizmet kesintisine yol açabileceğinden PDB’leri ihlal edemez.  Ve böylece, boşaltma komutunuz takılı kalabilir ve hiçbir şey yapmayabilir.  Tüm ad alanlarındaki PDB’leri kontrol edebilirsiniz;
    kubectl get poddisruptionbudget --all-namespaces.
  • Resource Constraints: The cluster must have enough resources to accommodate the Pods being evicted from the node being drained.
  • Node Affinity/Anti-affinity. Bunlar Kubernetes Pod zamanlayıcı karar verme konseptlerinden bazılarıdır.  Affinity, bir Pod’un bir düğümde planlandığı koşulları tanımlarken anti-affinity, bir Pod’un bir düğümde planlanmaması gereken koşulları tanımlar.  Tahliye işlemi, planlayıcı tarafından tanımlanan koşullara uyar
  • Daemonsets:Kubernetes’te daemonset’ler, kümedeki her düğümde bir kapsülün çalışmasını sağlar.  Bir düğüm başarıyla boşaltılmadan önce, üzerinde çalışan bölmelerin başka bir yerde yeniden planlanması gerekir.  Hizmet kesintisini önlemek için boşaltma kısıtlamalarının arka plan programlarını hesaba katması gerekir.
  • Taints/Tolerations: Kusurlar, Düğüm benzeşiminin tam tersidir.  Belirli bölmelerin belirli düğümlerde planlanmasını önlemek için tanımlanırlar.  Öte yandan toleranslar, eşleşen kusurlara sahip düğümlerde planlanmalarına olanak sağlamak için Pod’lara uygulanır.  Drenaj komutu, yalnızca eşleşen toleranslara sahip olmaları durumunda Pod’ları kusurlu düğümlerden çıkaracaktır.

Çalışan Düğümünü Sil

Düğüm başarıyla çıkarıldıktan sonra artık onu kümeden kaldırabilirsiniz.

Kubectl delete komutunu kullanarak çıkarılan bir düğümü kümeden kaldırabilirsiniz.

kubectl delete node wk01.kifarunix-demo.com

Çalışan Düğümünün Kaldırılmasını Onaylayın

Kubectl get nodes komutunu kullanarak düğümün kaldırıldığını doğrulayabilirsiniz.

kubectl get nodes

NAME                        STATUS   ROLES           AGE     VERSION
master.kifarunix-demo.com   Ready    control-plane   6d21h   v1.27.1
wk02.kifarunix-demo.com     Ready    <none>          6d21h   v1.27.1
wk03.kifarunix-demo.com     Ready    <none>          6d21h   v1.27.1

wk01 gitti!

Ayrıca Pod’ları da kontrol edebilirsiniz;

kubectl get pod --all-namespaces

Belirli bir düğümde çalışan Pod’ları listelemek için;

kubectl get pods --field-selector spec.nodeName=<node-name>

Örneğin;

kubectl get pods --field-selector spec.nodeName=wk01.kifarunix-demo.com

Artık kubeadm Kubernetes kümesinden bir düğümü başarıyla ve sorunsuz bir şekilde kaldırmış olmanız gerekir.

İsteğe Bağlı Olarak Düğümü Sıfırlayın

İsteğe bağlı olarak düğümdeki K8’lerle ilgili tüm konfigürasyonları kaldırabilirsiniz.

Böylece, boşaltılan düğüme giriş yapın ve aşağıdaki komutu çalıştırın;

kubeadm reset

 

 

Yazının orijinalini buradan okuyabilirsiniz.