前言
在日常對(duì) Kubernetes 集群運(yùn)行維護(hù)的過(guò)程中,您可能需要臨時(shí)的關(guān)閉或者是重啟 Kubernetes 集群對(duì)集群進(jìn)行維護(hù),本文將介紹如何去安全的關(guān)閉 K8s 集群以及如何重新啟動(dòng)集群。
日常節(jié)點(diǎn)運(yùn)維方式
關(guān)閉 K8s 集群是個(gè)危險(xiǎn)的操作!在關(guān)閉集群之前,您必須完全了解這個(gè)操作所帶來(lái)的后果。首先,我們要對(duì)集群內(nèi)的應(yīng)用、客戶定義資源 CRD 和 Etcd 進(jìn)行備份,然后再進(jìn)行重啟或關(guān)閉集群的操作。在通常運(yùn)維的情況下,建議您驅(qū)逐維護(hù)節(jié)點(diǎn),而非重啟整個(gè)集群。在這里,我們也把驅(qū)逐維護(hù)節(jié)點(diǎn)命令放在下面供您參考。
首先,確定想要移出的節(jié)點(diǎn)的名稱??梢杂靡韵旅盍谐黾褐械乃泄?jié)點(diǎn):
$kubectlgetnodes
接下來(lái),告訴 Kubernetes 需要移出的節(jié)點(diǎn):
$kubectldrain
一旦它返回(沒(méi)有報(bào)錯(cuò)), 你就可以下線此節(jié)點(diǎn)(或者等價(jià)地在云平臺(tái)上,刪除支持該節(jié)點(diǎn)的虛擬機(jī))。如果要在維護(hù)操作期間將節(jié)點(diǎn)留在集群中,則需要運(yùn)行:
kubectluncordon
然后告訴 Kubernetes,它可以繼續(xù)在此節(jié)點(diǎn)上調(diào)度新的 Pods。
在進(jìn)行集群關(guān)閉前的準(zhǔn)備工作
備份是最最重要的準(zhǔn)備工作,保障應(yīng)用可以重新正常服務(wù)為目的各種操作都是必須的。做一個(gè)你自己的計(jì)劃清單,在重要的步驟之前確認(rèn)好。
主機(jī)之間已經(jīng)設(shè)置 SSH 免密登錄
集群內(nèi)應(yīng)用的備份
集群內(nèi)客戶自定義資源的備份
集群內(nèi) Etcd 的備份
關(guān)閉 Kubernetes 集群
再次提示在關(guān)閉集群前,請(qǐng)您務(wù)按照我們推薦的方法備份集群的數(shù)據(jù)與應(yīng)用,以便在重新啟動(dòng)集群時(shí)如果遇到任何問(wèn)題,可以通過(guò)備份還原集群與應(yīng)用。使用本教程中的方法可以平穩(wěn)關(guān)閉集群,但數(shù)據(jù)損壞的可能性仍然存在。
首先,我們要獲取節(jié)點(diǎn)列表
k8snodes=$(kubectlgetnodes-oname)
然后,我們就要關(guān)閉節(jié)點(diǎn)了,您可以可一臺(tái)一臺(tái)的關(guān)閉?;蜻\(yùn)行以下腳本關(guān)閉節(jié)點(diǎn):
fornodein${k8snodes[@]} do echo"====Shutdown$node====" ssh$nodesudoshutdown-h1 done
注意: 前提條件是主機(jī)之間已經(jīng)設(shè)置 SSH 免密登錄。
此時(shí),您就可以關(guān)閉其他的集群依賴項(xiàng),對(duì)集群進(jìn)行維護(hù)操作啦。
Kubernetes 集群重啟
在重啟后,我們需要仔細(xì)檢查所有節(jié)點(diǎn)和核心組件的狀態(tài),并確保一切就緒。
$kubectlgetnodes-owide NAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME mars-k8s1Readycontrol-plane,master17dv1.21.0172.16.60.60Ubuntu20.04.1LTS5.11.0-40-genericdocker://20.10.10 mars-k8s2Ready 17dv1.21.0172.16.60.61 Ubuntu20.04.1LTS5.11.0-40-genericdocker://20.10.10 mars-k8s3Ready 17dv1.21.0172.16.60.62 Ubuntu20.04.1LTS5.11.0-40-genericdocker://20.10.10 $kubectlgetsvc-nkube-system NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE kube-dnsClusterIP10.96.0.10 53/UDP,53/TCP,9153/TCP17d metrics-serverClusterIP10.111.227.248 443/TCP17d $kubectlgetpod-nkube-system NAMEREADYSTATUSRESTARTSAGE coredns-558bd4d5db-h7jqc1/1Running217d coredns-558bd4d5db-wj4bn1/1Running217d etcd-mars-k8s11/1Running217d kube-apiserver-mars-k8s11/1Running317d kube-controller-manager-mars-k8s11/1Running217d kube-flannel-ds-677dg1/1Running217d kube-flannel-ds-bxhx61/1Running317d kube-flannel-ds-r5pqf1/1Running217d kube-proxy-6w52h1/1Running217d kube-proxy-p8zfp1/1Running217d kube-proxy-v8t7j1/1Running217d kube-scheduler-mars-k8s11/1Running217d metrics-server-5f9459b95c-dtzbf1/1Running217d
Kubernetes 集群重啟維護(hù)避坑指南
說(shuō)點(diǎn)兒心里話,運(yùn)維有時(shí)要看運(yùn)氣,這不是開(kāi)玩笑,在我的職業(yè)生涯中看到了也學(xué)到了很多,在過(guò)去我有幸支持了多個(gè)國(guó)家的數(shù)據(jù)災(zāi)備業(yè)務(wù)。包括:韓國(guó),日本,中港臺(tái),及東南亞各個(gè) Region 的客戶公司,在運(yùn)維做 IT 架構(gòu)變更的時(shí)候,買(mǎi)燒豬祭奠關(guān)二爺有時(shí)真的需要,我們不了解的事情還有很多,要保持敬畏。所以備份吧,多備份幾次?。?!
在我們這個(gè)時(shí)代人定勝天的神跡比比皆是。但是所謂割接,割下來(lái),接不上的情況也屢見(jiàn)不鮮。通常情況下,重新啟動(dòng) Kubernetes 集群后就可以繼續(xù)正常使用,但是由于意外情況,該集群可能不可用。例如:
關(guān)閉集群過(guò)程中 Etcd 數(shù)據(jù)損壞或是節(jié)點(diǎn)故障,這在 Bare Metal K8s Node 上很常見(jiàn)。
網(wǎng)絡(luò)錯(cuò)誤,這就需要檢查所有集群依賴項(xiàng)的狀態(tài),一定用好監(jiān)控工具,一步一步的查,別怕麻煩,要確保所有集群依賴項(xiàng)均已就緒。
應(yīng)用的問(wèn)題,節(jié)點(diǎn)是啟動(dòng)了,K8s 也好好的,應(yīng)用不能對(duì)外提供服務(wù),這時(shí)一系列的排錯(cuò)是最考驗(yàn)人的,所以備份恢復(fù)吧。這樣可以確保 RTO。
審核編輯:湯梓紅
-
集群
+關(guān)注
關(guān)注
0文章
86瀏覽量
17177 -
kubernetes
+關(guān)注
關(guān)注
0文章
224瀏覽量
8715
原文標(biāo)題:Kubernetes 集群的關(guān)閉與重啟
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論