來(lái)源:https://baijiahao.baidu.com/s?id=1687609645264653650眾所周知,Kubernetes很難! 以下是在生產(chǎn)中使用它應(yīng)遵循的一些最佳實(shí)踐。遵循這些步驟能夠確保更高的安全性和生產(chǎn)效率。毫無(wú)疑問(wèn),DevOps已經(jīng)走過(guò)了一段很長(zhǎng)的路! 借助于Kubernetes編排平臺(tái)使得公司比以往更快地發(fā)布軟件。隨著容器用于構(gòu)建和發(fā)布軟件的使用量不斷增加,Kubernetes已經(jīng)成為事實(shí)上的容器編排工具標(biāo)準(zhǔn),在軟件企業(yè)中非常受歡迎。Kubernetes具有優(yōu)秀的特性,比如:支持可擴(kuò)展、零停機(jī)部署、服務(wù)發(fā)現(xiàn)、自動(dòng)重啟和回滾功能等。要大規(guī)模管理容器部署,Kubernetes是必須的。它支持靈活地分配資源和工作負(fù)載。毫無(wú)疑問(wèn),生產(chǎn)環(huán)境中的Kubernetes是一個(gè)很好的解決方案,但需要花費(fèi)一些時(shí)間來(lái)設(shè)置和熟悉這個(gè)工具。由于現(xiàn)在許多公司都希望在生產(chǎn)中使用Kubernetes,因此有必要考慮一些最佳實(shí)踐。在本文中,我們將討論一些Kubernetes的最佳實(shí)踐。
生產(chǎn)環(huán)境中的Kubernetes
Kubernetes是一個(gè)復(fù)雜并且學(xué)習(xí)曲線陡峭的編排工具,但它具有豐富的功能。生產(chǎn)操作應(yīng)盡可能小心謹(jǐn)慎處理。如果您面臨內(nèi)部人才短缺的問(wèn)題,您可以將其外包給PaaS供應(yīng)商,為您提供所有最佳實(shí)踐。但假設(shè)您在生產(chǎn)中獨(dú)自管理Kubernetes。在這種情況下,關(guān)注最佳實(shí)踐是非常重要的,特別是關(guān)于可觀察性、日志記錄、集群監(jiān)控和安全配置。
我們很多人都知道,在生產(chǎn)環(huán)境中運(yùn)行容器不是一件容易的事情。它需要大量的工作和計(jì)算資源等等。市場(chǎng)上有許多編排平臺(tái),但Kubernetes已經(jīng)獲得了巨大的吸引力和大多數(shù)云提供商的支持。總之——Kubernetes、集裝箱化和微服務(wù)都是美好的基礎(chǔ)設(shè)施,但同時(shí)帶來(lái)了安全挑戰(zhàn)。Kubernetes Pod可以在所有基礎(chǔ)設(shè)施類之間快速切換,從而導(dǎo)致Pod之間的內(nèi)部流量增加,引發(fā)安全隱患。此外,Kubernetes的攻擊面通常更大。您必須考慮到Kubernetes的高度動(dòng)態(tài)且全新的環(huán)境無(wú)法與舊版安全工具完美融合的問(wèn)題。Gartner預(yù)測(cè),到2022年,超過(guò)75%的全球組織將在生產(chǎn)中運(yùn)行集裝箱應(yīng)用程序,而目前這一比例還不到30%。到2025年,超過(guò)85%的全球組織將在生產(chǎn)中推動(dòng)集裝箱應(yīng)用,較2019年的不到35%有顯著增長(zhǎng)。本地云應(yīng)用程序需要高度的基礎(chǔ)設(shè)施自動(dòng)化、DevOps和專門的操作技能,這些在普通IT組織中很難找到這些技能。所以必須使用Kubernetes的一些策略,在安全性、監(jiān)控、網(wǎng)絡(luò)、治理、存儲(chǔ)、容器生命周期管理和平臺(tái)選擇方面應(yīng)用最佳實(shí)踐。下面讓我們來(lái)看看Kubernetes的一些生產(chǎn)最佳實(shí)踐。在生產(chǎn)中運(yùn)行Kubernetes并不容易; 有以下幾個(gè)方面需要注意。是否使用存活探針和就緒探針進(jìn)行健康檢查?
管理大型分布式系統(tǒng)可能會(huì)很復(fù)雜,特別是當(dāng)出現(xiàn)問(wèn)題時(shí),我們無(wú)法及時(shí)得到通知。為了確保應(yīng)用實(shí)例正常工作,設(shè)置Kubernetes健康檢查至關(guān)重要。
通過(guò)創(chuàng)建自定義運(yùn)行健康檢查,可以有效避免分布式系統(tǒng)中僵尸服務(wù)運(yùn)行,具體可以根據(jù)環(huán)境和需要對(duì)其進(jìn)行調(diào)整。
Readiness-就緒探針
就緒探針的目的是讓Kubernetes知道該應(yīng)用是否已經(jīng)準(zhǔn)備好為流量服務(wù)。Kubernetes將始終確保準(zhǔn)備就緒探針通過(guò)之后開(kāi)始分配服務(wù),將流量發(fā)送到Pod。Liveness-存活探針
你怎么知道你的應(yīng)用程序是活的還是死的?存活探針可以讓你做到這一點(diǎn)。如果你的應(yīng)用死了,Kubernetes會(huì)移除舊的Pod并用新Pod替換它。為單個(gè)容器指定資源請(qǐng)求和限制是一個(gè)很好的實(shí)踐。
另一個(gè)好的實(shí)踐是將Kubernetes環(huán)境劃分為不同團(tuán)隊(duì)、部門、應(yīng)用程序和客戶機(jī)的獨(dú)立名稱空間。Kubernetes資源使用情況
Kubernetes資源使用指的是容器/pod在生產(chǎn)中所使用的資源數(shù)量。因此,密切關(guān)注pods的資源使用情況是非常重要的。一個(gè)明顯的原因是成本,因?yàn)樵礁叩馁Y源利用證明越少的資源浪費(fèi)。Resource utilization資源利用率
Ops團(tuán)隊(duì)通常希望優(yōu)化和最大化pods消耗的資源百分比。資源使用情況是Kubernetes環(huán)境實(shí)際優(yōu)化程度的指標(biāo)之一。您可以認(rèn)為優(yōu)化后的Kubernetes環(huán)境中運(yùn)行的容器的平均CPU等資源利用率是最優(yōu)的。RBAC代表基于角色的訪問(wèn)控制。它是一種用于限制系統(tǒng)/網(wǎng)絡(luò)上的用戶和應(yīng)用程序的訪問(wèn)和準(zhǔn)入的方法。
他們從Kubernetes 1.8版本引入了RBAC。使用rbac.authorization.k8s RBAC用于創(chuàng)建授權(quán)策略。在Kubernetes中,RBAC用于授權(quán),使用RBAC,您將能夠授予用戶、帳戶、添加/刪除權(quán)限、設(shè)置規(guī)則等權(quán)限。因此,它基本上為Kubernetes集群添加了額外的安全層。RBAC限制誰(shuí)可以訪問(wèn)您的生產(chǎn)環(huán)境和集群。生產(chǎn)級(jí)Kubernetes基礎(chǔ)設(shè)施通常需要考慮某些關(guān)鍵方面,例如高可用性、多主機(jī)、多etcd Kubernetes集群等。此類集群的配置通常涉及到Terraform或Ansible等工具。
一旦集群都設(shè)置好了,并且為運(yùn)行應(yīng)用程序創(chuàng)建了pods,這些pods就配備了負(fù)載平衡器;這些負(fù)載均衡器將流量路由到服務(wù)。開(kāi)源的Kubernetes項(xiàng)目并不是默認(rèn)的負(fù)載平衡器;因此,它需要與NGINX Ingress controller與HAProxy或ELB等工具集成,或任何其他工具,擴(kuò)大Kubernetes的Ingress插件,以提供負(fù)載均衡能力。給Kubernetes對(duì)象添加標(biāo)簽
標(biāo)簽就像附加到對(duì)象上的鍵/值對(duì),比如pods。標(biāo)簽是用來(lái)標(biāo)識(shí)對(duì)象的屬性的,這些屬性對(duì)用戶來(lái)說(shuō)是重要的和有意義的。在生產(chǎn)中使用Kubernetes時(shí),不能忽視的一個(gè)重要問(wèn)題是標(biāo)簽;標(biāo)簽允許批量查詢和操作Kubernetes對(duì)象。標(biāo)簽的特殊之處在于,它們還可以用于識(shí)別Kubernetes對(duì)象并將其組織成組。這樣做的最佳用例之一是根據(jù)pod所屬的應(yīng)用程序?qū)λ鼈冞M(jìn)行分組。在這里,團(tuán)隊(duì)可以構(gòu)建并擁有任意數(shù)量的標(biāo)簽約定。使用Kubernetes時(shí),設(shè)置網(wǎng)絡(luò)策略至關(guān)重要。
網(wǎng)絡(luò)策略只不過(guò)是一個(gè)對(duì)象,它使你能夠明確地聲明和決定哪些流量是允許的,哪些是不允許的。這樣,Kubernetes將能夠阻止所有其他不想要的和不符合規(guī)則的流量。在我們的集群中定義和限制網(wǎng)絡(luò)流量是強(qiáng)烈推薦的基本且必要的安全措施之一。Kubernetes中的每個(gè)網(wǎng)絡(luò)策略都定義了一個(gè)如上所述的授權(quán)連接列表。無(wú)論何時(shí)創(chuàng)建任何網(wǎng)絡(luò)策略,它所引用的所有pod都有資格建立或接受列出的連接。簡(jiǎn)單地說(shuō),網(wǎng)絡(luò)策略基本上就是授權(quán)和允許連接的白名單——一個(gè)連接,無(wú)論它是到還是從pod,只有在應(yīng)用于pod的至少一個(gè)網(wǎng)絡(luò)策略允許的情況下才被允許。在使用Kubernetes時(shí),監(jiān)控部署是至關(guān)重要的。確保配置、性能和流量保持安全更是重要。如果不進(jìn)行日志記錄和監(jiān)控,就不可能診斷出發(fā)生的問(wèn)題。為了確保合規(guī)性,監(jiān)視和日志記錄變得非常重要。
在進(jìn)行監(jiān)視時(shí),有必要在體系結(jié)構(gòu)的每一層上設(shè)置日志記錄功能。生成的日志將幫助我們啟用安全工具、審計(jì)功能和分析性能。從無(wú)狀態(tài)應(yīng)用程序開(kāi)始
運(yùn)行無(wú)狀態(tài)應(yīng)用要比運(yùn)行有狀態(tài)應(yīng)用簡(jiǎn)單得多,但隨著Kubernetes運(yùn)營(yíng)商的不斷增長(zhǎng),這種想法正在改變。對(duì)于剛接觸Kubernetes的團(tuán)隊(duì)來(lái)說(shuō),建議首先使用無(wú)狀態(tài)應(yīng)用程序。
建議使用無(wú)狀態(tài)后端,這樣開(kāi)發(fā)團(tuán)隊(duì)就可以確保不存在長(zhǎng)時(shí)間運(yùn)行的連接,從而增加了擴(kuò)展的難度。使用無(wú)狀態(tài),開(kāi)發(fā)人員還可以更有效地、零停機(jī)部署應(yīng)用程序。人們普遍認(rèn)為,無(wú)狀態(tài)應(yīng)用程序可以方便地根據(jù)業(yè)務(wù)需要進(jìn)行遷移和擴(kuò)展。邊啟動(dòng)自動(dòng)擴(kuò)縮容
Kubernetes有三種用于部署的自動(dòng)伸縮功能:水平pod自動(dòng)伸縮(HPA)、垂直pod自動(dòng)伸縮(VPA)和集群自動(dòng)伸縮。
水平pod autoscaler根據(jù)感知到的CPU利用率自動(dòng)擴(kuò)展deployment、replicationcontroller, replicaset, statefulset的數(shù)量。Vertical pod autoscaling為CPU和內(nèi)存請(qǐng)求和限制推薦合適的值,它可以自動(dòng)更新這些值。Cluster Autoscaler擴(kuò)展和縮小工作節(jié)點(diǎn)池的大小。它根據(jù)當(dāng)前的利用率調(diào)整Kubernetes集群的大小。控制在集群中運(yùn)行所有容器的鏡像源。如果您允許您的Pod從公共資源中拉取鏡像,您就不知道其中真正運(yùn)行的是什么。
如果從受信任的注冊(cè)表中提取它們,則可以在注冊(cè)表上應(yīng)用策略以提取安全和經(jīng)過(guò)認(rèn)證的鏡像。不斷評(píng)估應(yīng)用程序的狀態(tài)和設(shè)置,以學(xué)習(xí)和改進(jìn)。例如,回顧容器的歷史內(nèi)存使用情況可以得出這樣的結(jié)論:我們可以分配更少的內(nèi)存,在長(zhǎng)期內(nèi)節(jié)省成本。
使用Pod優(yōu)先級(jí),您可以決定設(shè)置不同服務(wù)運(yùn)行的重要性。例如,為了更好的穩(wěn)定性,你需要確保RabbitMQ pod比你的應(yīng)用pod更重要。或者你的入口控制器pods比數(shù)據(jù)處理pods更重要,以保持服務(wù)對(duì)用戶可用。
通過(guò)在HA中運(yùn)行所有服務(wù),支持集群和服務(wù)的零停機(jī)升級(jí)。這也將保證您的客戶獲得更高的可用性。
使用pod反親和性來(lái)確保在不同的節(jié)點(diǎn)上調(diào)度一個(gè)pod的多個(gè)副本,從而通過(guò)計(jì)劃中的和計(jì)劃外的集群節(jié)點(diǎn)停機(jī)來(lái)確保服務(wù)可用性。使用pod Disruptions策略,不惜一切代價(jià)確保您有最低的Pod副本數(shù)量!硬件最終會(huì)失敗,軟件最終會(huì)運(yùn)行。--(邁克爾·哈頓)
眾所周知,Kubernetes實(shí)際上已經(jīng)成為DevOps領(lǐng)域的編排平臺(tái)標(biāo)準(zhǔn)。Kubernetes從可用性、可伸縮性、安全性、彈性、資源管理和監(jiān)控的角度來(lái)應(yīng)對(duì)生產(chǎn)環(huán)境產(chǎn)生的風(fēng)暴。由于許多公司都在生產(chǎn)中使用Kubernetes,因此必須遵循上面提到的最佳實(shí)踐,以順利和可靠地?cái)U(kuò)展應(yīng)用程序。
- END -
點(diǎn)亮,服務(wù)器三年不宕機(jī)