衆所周知,Kubernetes很難! 如下是在生產中使用它應遵循的一些最佳實踐。遵循這些步驟可以確保更高的安全性和生產效率。java
毫無疑問,DevOps已經走過了一段很長的路! 藉助於Kubernetes編排平臺使得公司比以往更快地發佈軟件。隨着容器用於構建和發佈軟件的使用量不斷增長,Kubernetes已經成爲事實上的容器編排工具標準,在軟件企業中很是受歡迎。web
Kubernetes具備優秀的特性,好比:支持可擴展、零停機部署、服務發現、自動重啓和回滾功能等。要大規模管理容器部署,Kubernetes是必須的。它支持靈活地分配資源和工做負載。毫無疑問,生產環境中的Kubernetes是一個很好的解決方案,但須要花費一些時間來設置和熟悉這個工具。因爲如今許多公司都但願在生產中使用Kubernetes,所以有必要考慮一些最佳實踐。在本文中,咱們將討論一些Kubernetes的最佳實踐。後端
生產環境中的Kubernetes
Kubernetes是一個複雜而且學習曲線陡峭的編排工具,但它具備豐富的功能。生產操做應儘量當心謹慎處理。若是您面臨內部人才短缺的問題,您能夠將其外包給PaaS供應商,爲您提供全部最佳實踐。但假設您在生產中獨自管理Kubernetes。在這種狀況下,關注最佳實踐是很是重要的,特別是關於可觀察性、日誌記錄、集羣監控和安全配置。安全
咱們不少人都知道,在生產環境中運行容器不是一件容易的事情。它須要大量的工做和計算資源等等。市場上有許多編排平臺,但Kubernetes已經得到了巨大的吸引力和大多數雲提供商的支持。微信
總之——Kubernetes、集裝箱化和微服務都是美好的基礎設施,但同時帶來了安全挑戰。Kubernetes Pod能夠在全部基礎設施類之間快速切換,從而致使Pod之間的內部流量增長,引起安全隱患。此外,Kubernetes的攻擊面一般更大。您必須考慮到Kubernetes的高度動態且全新的環境沒法與舊版安全工具完美融合的問題。網絡
Gartner預測,到2022年,超過75%的全球組織將在生產中運行集裝箱應用程序,而目前這一比例還不到30%。到2025年,超過85%的全球組織將在生產中推進集裝箱應用,較2019年的不到35%有顯著增加。本地雲應用程序須要高度的基礎設施自動化、DevOps和專門的操做技能,這些在普通IT組織中很難找到這些技能。負載均衡
因此必須使用Kubernetes的一些策略,在安全性、監控、網絡、治理、存儲、容器生命週期管理和平臺選擇方面應用最佳實踐。下面讓咱們來看看Kubernetes的一些生產最佳實踐。編輯器
在生產中運行Kubernetes並不容易; 有如下幾個方面須要注意。分佈式
是否使用存活探針和就緒探針進行健康檢查?
管理大型分佈式系統可能會很複雜,特別是當出現問題時,咱們沒法及時獲得通知。爲了確保應用實例正常工做,設置Kubernetes健康檢查相當重要。微服務
經過建立自定義運行健康檢查,能夠有效避免分佈式系統中殭屍服務運行,具體能夠根據環境和須要對其進行調整。
Readiness-就緒探針
就緒探針的目的是讓Kubernetes知道該應用是否已經準備好爲流量服務。Kubernetes將始終確保準備就緒探針經過以後開始分配服務,將流量發送到Pod。
Liveness-存活探針
你怎麼知道你的應用程序是活的仍是死的?存活探針可讓你作到這一點。若是你的應用死了,Kubernetes會移除舊的Pod並用新Pod替換它。
Resource Management- 資源管理
爲單個容器指定資源請求和限制是一個很好的實踐。
另外一個好的實踐是將Kubernetes環境劃分爲不一樣團隊、部門、應用程序和客戶機的獨立名稱空間。
Kubernetes資源使用狀況
Kubernetes資源使用指的是容器/pod在生產中所使用的資源數量。
所以,密切關注pods的資源使用狀況是很是重要的。一個明顯的緣由是成本,由於越高的資源利用證實越少的資源浪費。
Resource utilization資源利用率
Ops團隊一般但願優化和最大化pods消耗的資源百分比。資源使用狀況是Kubernetes環境實際優化程度的指標之一。
您能夠認爲優化後的Kubernetes環境中運行的容器的平均CPU等資源利用率是最優的。
啓用RBAC
RBAC表明基於角色的訪問控制。它是一種用於限制系統/網絡上的用戶和應用程序的訪問和准入的方法。
他們從Kubernetes 1.8版本引入了RBAC。使用rbac.authorization.k8s RBAC用於建立受權策略。
在Kubernetes中,RBAC用於受權,使用RBAC,您將可以授予用戶、賬戶、添加/刪除權限、設置規則等權限。所以,它基本上爲Kubernetes集羣添加了額外的安全層。RBAC限制誰能夠訪問您的生產環境和集羣。
集羣置備和負載均衡
生產級Kubernetes基礎設施一般須要考慮某些關鍵方面,例如高可用性、多主機、多etcd Kubernetes集羣等。此類集羣的配置一般涉及到Terraform或Ansible等工具。
一旦集羣都設置好了,而且爲運行應用程序建立了pods,這些pods就配備了負載平衡器;這些負載均衡器將流量路由到服務。開源的Kubernetes項目並非默認的負載平衡器;所以,它須要與NGINX Ingress controller與HAProxy或ELB等工具集成,或任何其餘工具,擴大Kubernetes的Ingress插件,以提供負載均衡能力。
給Kubernetes對象添加標籤
標籤就像附加到對象上的鍵/值對,好比pods。標籤是用來標識對象的屬性的,這些屬性對用戶來講是重要的和有意義的。在生產中使用Kubernetes時,不能忽視的一個重要問題是標籤;標籤容許批量查詢和操做Kubernetes對象。標籤的特殊之處在於,它們還能夠用於識別Kubernetes對象並將其組織成組。這樣作的最佳用例之一是根據pod所屬的應用程序對它們進行分組。在這裏,團隊能夠構建並擁有任意數量的標籤約定。
配置網絡策略
使用Kubernetes時,設置網絡策略相當重要。
網絡策略只不過是一個對象,它使你可以明確地聲明和決定哪些流量是容許的,哪些是不容許的。這樣,Kubernetes將可以阻止全部其餘不想要的和不符合規則的流量。在咱們的集羣中定義和限制網絡流量是強烈推薦的基本且必要的安全措施之一。
Kubernetes中的每一個網絡策略都定義了一個如上所述的受權鏈接列表。不管什麼時候建立任何網絡策略,它所引用的全部pod都有資格創建或接受列出的鏈接。簡單地說,網絡策略基本上就是受權和容許鏈接的白名單——一個鏈接,不管它是到
仍是從
pod,只有在應用於pod的至少一個網絡策略容許的狀況下才被容許。
集羣監控和日誌記錄
在使用Kubernetes時,監控部署是相當重要的。確保配置、性能和流量保持安全更是重要。若是不進行日誌記錄和監控,就不可能診斷出發生的問題。爲了確保合規性,監視和日誌記錄變得很是重要。
在進行監視時,有必要在體系結構的每一層上設置日誌記錄功能。生成的日誌將幫助咱們啓用安全工具、審計功能和分析性能。
從無狀態應用程序開始
運行無狀態應用要比運行有狀態應用簡單得多,但隨着Kubernetes運營商的不斷增加,這種想法正在改變。對於剛接觸Kubernetes的團隊來講,建議首先使用無狀態應用程序。
建議使用無狀態後端,這樣開發團隊就能夠確保不存在長時間運行的鏈接,從而增長了擴展的難度。使用無狀態,開發人員還能夠更有效地、零停機部署應用程序。
人們廣泛認爲,無狀態應用程序能夠方便地根據業務須要進行遷移和擴展。
啓動自動擴縮容
Kubernetes有三種用於部署的自動伸縮功能:水平pod自動伸縮(HPA)、垂直pod自動伸縮(VPA)和集羣自動伸縮。
水平pod autoscaler根據感知到的CPU利用率自動擴展deployment、replicationcontroller, replicaset, statefulset的數量。
Vertical pod autoscaling爲CPU和內存請求和限制推薦合適的值,它能夠自動更新這些值。
Cluster Autoscaler擴展和縮小工做節點池的大小。它根據當前的利用率調整Kubernetes集羣的大小。
控制鏡像拉取來源
控制在集羣中運行全部容器的鏡像源。若是您容許您的Pod從公共資源中拉取鏡像,您就不知道其中真正運行的是什麼。
若是從受信任的註冊表中提取它們,則能夠在註冊表上應用策略以提取安全和通過認證的鏡像。
持續學習
不斷評估應用程序的狀態和設置,以學習和改進。例如,回顧容器的歷史內存使用狀況能夠得出這樣的結論:咱們能夠分配更少的內存,在長期內節省成本。
保護重要服務
使用Pod優先級,您能夠決定設置不一樣服務運行的重要性。例如,爲了更好的穩定性,你須要確保RabbitMQ pod比你的應用pod更重要。或者你的入口控制器pods比數據處理pods更重要,以保持服務對用戶可用。
零停機時間
經過在HA中運行全部服務,支持集羣和服務的零停機升級。這也將保證您的客戶得到更高的可用性。
使用pod反親和性來確保在不一樣的節點上調度一個pod的多個副本,從而經過計劃中的和計劃外的集羣節點停機來確保服務可用性。
使用pod Disruptions策略,不惜一切代價確保您有最低的Pod副本數量!
計劃失敗
硬件最終會失敗,軟件最終會運行。--(邁克爾·哈頓)
結論
衆所周知,Kubernetes實際上已經成爲DevOps領域的編排平臺標準。Kubernetes從可用性、可伸縮性、安全性、彈性、資源管理和監控的角度來應對生產環境產生的風暴。因爲許多公司都在生產中使用Kubernetes,所以必須遵循上面提到的最佳實踐,以順利和可靠地擴展應用程序。
推薦
本文分享自微信公衆號 - 雲原生技術愛好者社區(programmer_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。