管理Kubernetes資源要注意的五件事!
?Kubernetes自動(dòng)化了許多大規(guī)模管理容器的工作。但是容器化的應(yīng)用程序通常共享池化的資源,因此您需要正確地分配和管理它們。
容器編排為IT團(tuán)隊(duì)提供了強(qiáng)大的承諾:它可以自動(dòng)處理大量管理容器所需的大量工作。
想想Kubernetes (K8s)在項(xiàng)目官方網(wǎng)站上自我描述的強(qiáng)大功能:“Kubernetes (K8s)是一個(gè)用于自動(dòng)化部署、擴(kuò)展和管理容器化應(yīng)用程序的開(kāi)源系統(tǒng)?!?/p>
這非常重要——特別是當(dāng)您談?wù)摰膱F(tuán)隊(duì)正在運(yùn)行許多容器化應(yīng)用程序時(shí)。雖然像Kubernetes這樣的編配器本身的自動(dòng)化,被廣泛認(rèn)為是在生產(chǎn)環(huán)境中運(yùn)行容器的必要條件,但這并不意味著IT專業(yè)人員可以放松下來(lái)。
還有很多工作要做,包括設(shè)置和優(yōu)化集群上運(yùn)行的應(yīng)用程序的資源管理方式。
為什么需要管理Kubernetes資源
Altran的技術(shù)、研究和創(chuàng)新總監(jiān)Raghu Kishore Vempati說(shuō):“Kubernetes為計(jì)劃在其上運(yùn)行的pods提供了管理所有關(guān)鍵資源的選項(xiàng)——比如計(jì)算、內(nèi)存和存儲(chǔ)。”集群沒(méi)有無(wú)限的資源,通常情況下,每個(gè)應(yīng)用程序/解決方案都有自己的Kubernetes集群并不常見(jiàn),除非它們非常特殊并且應(yīng)該以這種方式運(yùn)行。
這意味著應(yīng)用程序通常共享集合的資源。分配這些資源的“正確”方式會(huì)因組織和應(yīng)用程序的不同而不同,但好消息是Kubernetes包含了許多用于資源管理的特性。
Kasten的工程主管Tom Manville說(shuō):“Kubernetes可以部署在任何地方,但這意味著所需的基礎(chǔ)設(shè)施將是您的環(huán)境所特有的?!薄爸匾氖且私饽愕沫h(huán)境中需要的資源,并適當(dāng)?shù)胤峙渌鼈儭kS著集群的擴(kuò)展,基礎(chǔ)設(shè)施也必須擴(kuò)展。幸運(yùn)的是,擴(kuò)展集群的規(guī)模很容易,而且在很多情況下,這可以自動(dòng)發(fā)生?!?/p>
管理Kubernetes資源: 要知道的5個(gè)關(guān)鍵事情
Vempati指出,Kubernetes環(huán)境中的計(jì)算或存儲(chǔ)等資源的管理可以大致分為兩類:Kubernetes在系統(tǒng)級(jí)提供的資源,以及需要在應(yīng)用程序和體系結(jié)構(gòu)級(jí)進(jìn)行規(guī)劃的資源。這篇文章將主要關(guān)注前一類的功能。
讓我們深入了解五件重要的事情。?
1.使用命名空間和資源配額
Vempati指出,團(tuán)隊(duì)通常在同一個(gè)集群上運(yùn)行多個(gè)應(yīng)用程序。對(duì)于這種類型的使用,Vempati和其他專家通常建議在多租戶環(huán)境中使用命名空間作為隔離和其他目的的最佳實(shí)踐。類似地,當(dāng)多個(gè)團(tuán)隊(duì)或多個(gè)用戶訪問(wèn)同一個(gè)集群時(shí)(有時(shí)會(huì)同時(shí)運(yùn)行多個(gè)應(yīng)用程序),也建議使用命名空間。命名空間也是Kubernetes安全性的一部分。
當(dāng)您在這些多應(yīng)用程序、多用戶環(huán)境中使用名稱空間時(shí),Vempati還建議使用Kubernetes的本地資源配額特性,以確保在分配給這些名稱空間的應(yīng)用程序和團(tuán)隊(duì)之間正確地分配內(nèi)容。
“資源配額允許集群管理員控制每個(gè)命名空間的總體資源消耗,”Vempati說(shuō)。這可以包括每個(gè)命名空間可以創(chuàng)建的對(duì)象的總數(shù)——計(jì)算、內(nèi)存和存儲(chǔ)。例如,我們可以在非終端狀態(tài)下對(duì)所有pods設(shè)置CPU限制或內(nèi)存限制,不超過(guò)某個(gè)值?!?/p>
來(lái)自Kasten的Manville指出,CPU和內(nèi)存通常是管理員使用資源配額進(jìn)行約束的最常見(jiàn)資源,但是您也可以限制名稱空間中的pod數(shù)量。可以這樣說(shuō),資源配額是一個(gè)重要的管理工具。
Vempati說(shuō):“基于配額的管理允許集群管理員有效地管理整體資源,以最合適的方式將它們分配給所有的應(yīng)用程序?!?/p>
2.使用限制范圍
資源配額用于在名稱空間級(jí)別管理資源消耗。換句話說(shuō),一旦設(shè)置,它們將應(yīng)用于整個(gè)命名空間。限制范圍具有類似目的,但會(huì)限制單個(gè)容器或容器級(jí)別的資源消耗。
“Kubernetes為管理員提供了強(qiáng)大的原語(yǔ),以控制應(yīng)用程序消耗的資源”Manville說(shuō)。“管理員可以配置限制范圍,以限制開(kāi)發(fā)人員的資源請(qǐng)求,并創(chuàng)建資源配額以限制命名空間中消耗的資源總數(shù)。”
考慮這些相關(guān)功能之間的區(qū)別的另一種方式是:可以使用名稱空間和資源配額來(lái)確保應(yīng)用程序或團(tuán)隊(duì)不會(huì)占用集群的總體池資源的必要份額。限制范圍有助于防止單個(gè)pod或容器占用分配給特定名稱空間的大部分資源的情況。
3.設(shè)置網(wǎng)絡(luò)策略
Kubernetes還具有有關(guān)網(wǎng)絡(luò)的本地特性,包括pods如何相互通信(或被阻止通信)。Vempati建議使用網(wǎng)絡(luò)策略。
Vempati說(shuō):“對(duì)于網(wǎng)絡(luò),Kubernetes允許一個(gè)選項(xiàng)來(lái)設(shè)置網(wǎng)絡(luò)策略,該策略可以幫助指定集群上調(diào)度的各個(gè)pods如何與其他節(jié)點(diǎn)以及同一集群上的其他端點(diǎn)通信?!薄袄?,我們可以為pods設(shè)定進(jìn)出交通規(guī)則。” 這也是整體的、分層的容器安全方法的一部分。
4.如果適用,請(qǐng)不要忘記存儲(chǔ)
存儲(chǔ)值得自己深入研究。就像管理員可以對(duì)CPU和內(nèi)存有非常特定的控制一樣,相同的原理也適用于存儲(chǔ)。
“Kubernetes幫助設(shè)定了非常細(xì)粒度的限制,”Vempati說(shuō)。因此,在一個(gè)給定的名稱空間中,您可以設(shè)置一個(gè)可以存在于該名稱空間中的PersistentVolumeClaims的數(shù)量限制。
Red Hat的技術(shù)專員Gordon Haff將持久卷(PV)描述為有效 管理的最重要的Kubernetes資源之一。
Haff說(shuō):“配置不綁定到臨時(shí)容器映像的存儲(chǔ)的能力是Kubernetes的關(guān)鍵創(chuàng)新之一,它將Kubernetes與一些早期的基于容器的平臺(tái)即服務(wù)(PaaS)產(chǎn)品區(qū)分開(kāi)來(lái)。”“如果沒(méi)有持久存儲(chǔ),你的應(yīng)用架構(gòu)就會(huì)局限于特定的樣式。
Haff指出,Kubernetes中的PV是作為插件實(shí)現(xiàn)的,其生命周期與使用PV的任何單個(gè)Pod無(wú)關(guān)。PersistentVolumeClaim本質(zhì)上是用戶的存儲(chǔ)請(qǐng)求,Haff補(bǔ)充說(shuō),它進(jìn)一步抽象了PV的細(xì)節(jié)。
“ Kubernetes是按這種方式設(shè)計(jì)的,因?yàn)橛脩敉ǔP枰哂胁煌瑢傩裕ɡ缧阅埽┑腜V來(lái)解決不同的問(wèn)題和工作負(fù)載,” Haff解釋說(shuō)?!安煌愋偷腜V也具有不同類型的訪問(wèn)模式?!?/p>
因此,這涉及到Vempati上面描述的第二類資源管理:應(yīng)用程序和體系結(jié)構(gòu)級(jí)別的資源規(guī)劃。Haff指出,存儲(chǔ)是一開(kāi)始就需要評(píng)估的東西。
Haff說(shuō):“管理Kubernetes資源的一個(gè)重要部分是預(yù)先計(jì)劃是否首先需要持久性存儲(chǔ)(比如數(shù)據(jù)庫(kù)),如果需要,那么哪個(gè)卷插件最適合您的工作負(fù)載和計(jì)算環(huán)境?!?/p>
談到數(shù)據(jù)庫(kù),Crunchy Data的平臺(tái)工程副總裁Jonathan Katz說(shuō),有狀態(tài)應(yīng)用程序?yàn)橘Y源管理引入了一些額外的細(xì)微差別?!袄?,內(nèi)存是一個(gè)重要的PostgreSQL可調(diào)資源,”Katz說(shuō)。在Kubernetes操作符的PostreqSQL背后隱藏著復(fù)雜的數(shù)據(jù)。
Katz解釋說(shuō):“將你的內(nèi)存請(qǐng)求設(shè)置為你想要長(zhǎng)期使用的實(shí)際內(nèi)存值是很重要的,而不是設(shè)置一個(gè)較低的請(qǐng)求和較高的限制。”“這將確保你的PostgreSQL實(shí)例被調(diào)度到一個(gè)有足夠資源的節(jié)點(diǎn),因?yàn)楦嗟臄?shù)據(jù)被緩存在內(nèi)存中,并且限制了事件的風(fēng)險(xiǎn),比如驅(qū)逐或者被OOM殺手訪問(wèn)?!?/p>
5.保持整潔:API對(duì)象和監(jiān)控
“如果您的任何應(yīng)用程序直接使用Kubernetes API,請(qǐng)確保自動(dòng)清理API對(duì)象,”Manville說(shuō)。大量未使用的API對(duì)象會(huì)降低集群的性能。更糟糕的是,這些對(duì)象有時(shí)會(huì)映射到閑置的基礎(chǔ)設(shè)施,這可能會(huì)增加不必要的成本。”
通常,有效的資源管理要求團(tuán)隊(duì)和管理員能夠看到正在發(fā)生的事情。因此,不要忘記監(jiān)視并確保密切關(guān)注集群之間的資源使用情況。
“這將幫助您更好地了解集群正在使用的資源,在集群接近容量時(shí)提醒您,并且在某些情況下,讓Kubernetes自動(dòng)伸縮,”Manville說(shuō)。
*原文鏈接:https://enterprisersproject.com/article/2020/8/managing-kubernetes-resources-5-things-remember?