如今企業(yè)IT已經(jīng)不再質(zhì)疑容器化應(yīng)用的價值,,采用DevOps和云原生架構(gòu)成為趨勢,利用容器功能以實現(xiàn)數(shù)字轉(zhuǎn)換至關(guān)重要,。Google的Kubernetes(K8s)是一個開源容器編排系統(tǒng),,已成為云原生應(yīng)用程序(架構(gòu),、組件、部署和管理方式)的事實標準 - 也是關(guān)鍵的推動者,,企業(yè)正在使用Kubernetes創(chuàng)建由微服務(wù)和無服務(wù)器功能組成的現(xiàn)代架構(gòu),。 在生產(chǎn)環(huán)境中大規(guī)模部署Kubernetes兩年時間里,我們吸取總結(jié)了Kubernetes在企業(yè)中面臨的挑戰(zhàn)和實際經(jīng)驗教訓(xùn),,在這篇文章中,,我們分享了大型企業(yè)需要圍繞其Kubernetes投資的七項基本能力,,以便能夠有效地實施并利用它來推動業(yè)務(wù)發(fā)展,。 介紹通常,當開發(fā)人員開始嘗試使用Kubernetes時,,首先會進行基本驗證(POC),,在一組服務(wù)器上部署Kubernetes。但我們看到的這個基本部署,,并不可用于生產(chǎn)中,,因為它缺少關(guān)鍵組件來確保關(guān)鍵任務(wù)在Kubernetes的順利運行。雖然部署本地Kubernetes環(huán)境可以是一個在幾天內(nèi)完成的簡單程序,,但企業(yè)級部署完全是一項不同的挑戰(zhàn),。 完整的Kubernetes基礎(chǔ)架構(gòu)需要正確的配置DNS,負載平衡,,Ingress和基于角色的訪問控制(RBAC),,以及一系列其他組件,這些組件會使部署過程非常困難,。一旦部署了Kubernetes,,就會增加監(jiān)控和所有相關(guān)的操作手冊,以便在出現(xiàn)問題時解決問題 - 例如,,當容量不足時,,確保HA,備份等等,。最后,,每當社區(qū)發(fā)布新版Kubernetes時, 您的生產(chǎn)集群需要升級,,且需確保任何應(yīng)用程序不會有停機風險,。 對于真實應(yīng)用程序,簡單的Kubernetes集群是遠遠不夠,,以下總結(jié)了關(guān)于生產(chǎn)中使用Kubernetes 的7項關(guān)鍵考慮因素: #1 托管Kubernetes服務(wù)確保SLA并簡化操作是的:Kubernetes太棒了,。容器是現(xiàn)代軟件交付的未來,而Kubernetes是編排容器的最佳方案(事實上的標準),。但是管理企業(yè)工作負載是出了名的復(fù)雜,,其中SLA是關(guān)鍵,。 Kubernetes控制組對Pod進行調(diào)度、部署,、伸縮以及如何利用網(wǎng)絡(luò)和底層存儲,。部署Kubernetes集群后,IT運維團隊必須保障Pod的運行正常,,HA,、0停機、環(huán)境升級等,,隨著集群規(guī)模增加,,需要開發(fā)人員能夠快速加載、啟動監(jiān)控,、故障排查并確保順利運行,。 Kubernetes運營一些常見事項: 1. 大規(guī)模配置持久化存儲和網(wǎng)絡(luò) 2. 及時了解Kubernetes社區(qū)發(fā)布的版本 3. 修補應(yīng)用程序和底層Kubernetes版本的安全性以及定期更新 4. 設(shè)置和維護監(jiān)控和日志記錄 5. Kubernetes的災(zāi)備恢復(fù) 等等 管理生產(chǎn)級Kubernetes的操作非常痛苦,因行業(yè)人才稀缺和技術(shù)差距而加劇?,F(xiàn)今,,大多數(shù)企業(yè)缺乏Kubernetes管理經(jīng)驗,正大力聘請備受追捧的Kubernetes專家,,以確保大規(guī)模的集群能穩(wěn)定運營,。 托管Kubernetes服務(wù)基本上提供企業(yè)級Kubernetes,沒有運營負擔,。這些服務(wù)可以是由AWS或Google Cloud等公共云提供商獨家提供的服務(wù),。也能幫助企業(yè)提供解決方案,在自己的數(shù)據(jù)中心或混合/多云環(huán)境中運行Kubernetes,。 即使使用托管服務(wù),,您也需要注意不同類型的解決方案,即使用“托管”或“Kubernetes-as-a-service”來描述不同級別的管理,。有些只允許您以簡單的自助方式部署Kubernetes集群,,一些則提供運行中的集群的操作管理,也有些會提供完整的管理服務(wù),,為你完成所有復(fù)雜工作,。 #2 群集監(jiān)控和日志記錄生產(chǎn)環(huán)境中的Kubernetes部署,通??蓴U展到數(shù)百個pod,,缺乏有效的監(jiān)控和日志記錄可能導(dǎo)致無法診斷和導(dǎo)致服務(wù)中斷,以至影響業(yè)務(wù)的嚴重故障,。 監(jiān)控提供Kubernetes基礎(chǔ)架構(gòu)的可見性和詳細指標,。這包括所有云提供商或私有數(shù)據(jù)中心,區(qū)域,,服務(wù)器,,網(wǎng)絡(luò),,存儲以及單個VM或容器的使用和性能的精細度量指標。這些指標的關(guān)鍵用途應(yīng)該是在本地和公共云資源上提高數(shù)據(jù)中心效率和利用率(這顯然轉(zhuǎn)化為成本),。 日志記錄是有效監(jiān)控的補充和必需功能,。日志記錄可確保在架構(gòu)的每一層(Kubernetes基礎(chǔ)架構(gòu)及其組件以及應(yīng)用程序)中的日志都被捕獲,以進行分析,,故障排除和診斷,。集中式、分布式的日志管理和可視化,,可使用專有工具或開源工具來實現(xiàn)關(guān)鍵的功能(如FluentBit,,F(xiàn)luentd,Elasticsearch和Kibana(也稱EFK堆棧)),。 監(jiān)控不僅是7 X 24小時,,還要提供針對生產(chǎn)中可能出現(xiàn)的瓶頸或問題的主動警報,以及基于角色的儀表板,,其中包括有關(guān)性能、容量管理等的KPI,。
Kubernetes監(jiān)控 - 架構(gòu) #3 Registry 和 包管理 - Helm / Terraform私有Registry 服務(wù)器是一個重要的功能,,它可以安全地存儲Docker鏡像。Registry 支持鏡像管理工作流程,,具有鏡像簽名,、安全性、LDAP集成等功能,。軟件包管理器(Helm)提供了一個模板(在Helm中稱為“chart”),,用于Kubernetes應(yīng)用程序的定義、安裝和升級,。 一旦開發(fā)人員構(gòu)建代碼成功,,正常情況下,將使用Registry 重新生成Docker鏡像,,該鏡像最終使用Helm部署到一組目標pod,。 這簡化了基于Kubernetes的應(yīng)用程序的CI / CD發(fā)布過程。開發(fā)人員可以更輕松地協(xié)作處理應(yīng)用程序,、更改代碼版本,、確保部署和配置一致性、確保合規(guī)性和安全性,,并在需要時回滾版本,。私有Registry 以及Helm工具確保將正確的鏡像部署到正確的容器中,并且安全性也集成到流程中,。 #4 DevOps的 CI / CD工具鏈使用CI/CD對于提高基于Kubernetes的應(yīng)用程序的質(zhì)量,、安全性和加快版本發(fā)布速度至關(guān)重要,。我們使用GitOps方法和工具配置持續(xù)集成(例如單元測試、集成測試等)和持續(xù)交付(例如從開發(fā)環(huán)境一直到生產(chǎn)的部署過程),。開發(fā)人員工作流通常以“git push”開頭 - 每次代碼簽入通常會觸發(fā)構(gòu)建,、測試和部署過程。這包括使用Spinnaker等工具自動部署B(yǎng)lue / Green或Canary部署,。重要的是,,您的Kubernetes基礎(chǔ)架構(gòu)可以輕松地“插入”這些CI/CD工具,以使開發(fā)人員能夠提高工作效率和發(fā)布質(zhì)量,。 #5 群集配置和負載平衡生產(chǎn)級Kubernetes基礎(chǔ)架構(gòu)通常需要創(chuàng)建高可用,、多主機、多etcd 的Kubernetes集群,,這些集群可以跨私有云,、公共云環(huán)境中的可用區(qū)。提供這些集群通常涉及Ansible或Terraform等工具,。 一旦設(shè)置了集群并為運行應(yīng)用創(chuàng)建了pod,,這些pod就會被負載均衡器所支持,負載均衡器會將流量路由到服務(wù),。負載均衡器不是Kubernetes項目中的默認功能,,因此您需要NGINX Ingress控制器,HAProxy或ELB(在AWS VPC上)或其他工具集成到Kubernetes,,來擴展Kubernetes中的Ingress插件以提供負載均衡,。 #6 安全毫無疑問,安全性是云原生應(yīng)用程序的關(guān)鍵部分,,需要從一開始就考慮和設(shè)計,。安全性在整個容器生命周期中是一個常量,它影響基于容器的應(yīng)用程序的設(shè)計,、開發(fā),、DevOps實踐和基礎(chǔ)設(shè)施的選擇??梢允褂靡幌盗屑夹g(shù)選擇來覆蓋各種領(lǐng)域,,例如應(yīng)用程序的安全性,以及容器和基礎(chǔ)設(shè)施本身的安全性,。包括使用基于角色的訪問控制,、多因素身份驗證(MFA)、使用OAuth,,OpenID,,SSO等協(xié)議的A&A(身份驗證和授權(quán)); 為容器內(nèi)部的(如image Registry,鏡像簽名,打包),、CVE掃描等提供認證和安全性的不同工具,。 #7 治理 圍繞治理、審計和合規(guī)性的流程,,以及基于Kubernetes的應(yīng)用程序在大型企業(yè)和受監(jiān)管行業(yè)中的日益增長,,標志著Kubernetes日益成熟。您的Kubernetes基礎(chǔ)架構(gòu)和相關(guān)的發(fā)布流程需要與工具集成,,以便為Kubernetes應(yīng)用程序或基礎(chǔ)架構(gòu)的任何更新,,在不同任務(wù)和權(quán)限級別提供可見性和自動審計跟蹤,從而實現(xiàn)正確的合規(guī)性實施,。 總之,,為企業(yè)的應(yīng)用程序上Kubernetes需要的不僅僅是部署Kubernetes集群,上述7點關(guān)鍵因素可幫助您生產(chǎn)負載的Kuberentes基礎(chǔ)結(jié)構(gòu)的設(shè)計適用于現(xiàn)在和未來,。
作者:Vamsi Chemitiganti / Peter Fray |
|