Kubernetes: Çalışan Düğümü Kubernetes Kümesinden Kaldırma
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 uyarDaemonsets
: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.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.