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