
基于微服務的現代云原生應用程序通常使用來自開源軟件的應用程序運行時和支持服務,例如緩存、數據庫、日志記錄、監視、消息傳遞等。這種做法背后的關鍵目標是標準化、社區杠桿和上市時間。但是在企業軟件開發中使用開源有其自身的挑戰。雖然可以實現速度和敏捷性,但如果開源依賴項存在漏洞并且未提前掃描,則安全性和合規性狀況可能會受到影響。
這篇文章提供了有關如何使用 Helm 圖表在基于 Kubernetes 的環境中以安全、可靠和一致的方式大規模自定義、部署和管理開源軟件的指導。Helm 是一個 Kubernetes包管理器,它使用 Helm 圖表促進 Kubernetes 工件的打包、部署和生命周期管理。開源 Helm 項目由云原生計算基金會支持。
在這篇文章中,我們將使用 Apache Kafka Helm 圖表,盡管我們將解釋的過程可以應用于任何 Helm 圖表。Apache Kafka 是一個社區分布式事件流平臺,每天能夠大規模處理數萬億個事件。Apache Kafka 的常見用例包括消息傳遞、網站活動跟蹤、指標、日志聚合、流處理和事件溯源。
(資料圖片僅供參考)
為了演示如何自定義、部署和管理開源 Kafka Helm 圖表,我們將使用以下內容:
用于配置和自定義 Helm 目錄的VMware Tanzu 應用程序目錄用于部署 Helm 圖表的 Helm 命令行界面 (CLI)掌舵 CLI 以管理已部署工作負載的生命周期可觀測性集成,為工作負載提供日志記錄、監控和擴展對于下圖,我們使用兩個關鍵角色:開發人員和操作員。開發人員角色是典型的微服務開發人員,負責設計、實現業務邏輯以及所有相應的持續集成 (CI) 活動。操作員角色負責部署、標準化和管理 Kubernetes 環境的生命周期以及在其上運行的微服務。實際上,每個組織中都有許多更細粒度的角色,但為了簡單起見,我們使用這兩個角色。
使用 Tanzu 應用程序目錄服務在 Kubernetes 集群中部署基于 Helm 的工作負載的典型工作流如下所示:
操作員了解團隊的開發需求。她使用本文檔中描述的步驟在 Tanzu 應用程序目錄中設置專用目錄??梢詣摻勺裱髽I安全性和隔離規則的自定義目錄。例如,操作員可能決定為各種業務應用程序使用的前端組件創建一個應用程序目錄,為集成組件創建另一個目錄,為后端組件創建另一個目錄?;蛘撸梢詾闉椴煌瑯I務部門部署的應用程序創建不同的自定義目錄。運營商通常尋求在隔離和標準化之間取得適當的平衡。
操作員使用特選的 Helm 圖表填充目錄。為了創建這些精選的 Helm 圖表,操作員指定了需要在 Kubernetes 中部署的基本操作系統映像和所需的開源軟件。如下圖所示,Tanzu 應用程序目錄服務附帶了用于基本操作系統映像的標準 Linux 發行版?;蛘?,正如企業方案中常見的那樣,操作員可以導入根據其企業標準構建的自定義基礎 OS 映像,以跨所有工作負載進行部署。
選擇基本操作系統和相應的軟件包后,Tanzu 應用程序目錄服務將生成并打包特選的 Helm 圖表。例如,下面是 Apache Kafka Helm 圖表的摘要信息。
Tanzu 應用程序目錄服務還會生成驗證、生成和測試報告。這些與映像一起打包。這種測試和驗證自動化通過將打包合規軟件所花費的時間重新分配給創造業務價值,從而提高了開發人員的工作效率。例如,Kafka Helm 圖表產生:
驗證報告,包括功能和集成測試構建報告,包括有關資產內容的詳細信息Kafka 的 Asset-spec.json 如下所示。如您所見,它枚舉了軟件資產及其相應的可審核詳細信息,可用于跟蹤已部署的軟件清單,以及標準化企業內給定范圍內的軟件組件使用。
Kafka 版本的集成測試結果如下所示。集成測試在所有云提供商上運行,包括Azure AKS,Google Cloud的Google Kubernetes Engine和本地VMware Tanzu Kubernetes Grid。
這些經過精心策劃、審查和測試的 Helm 圖表映像將推送到專用 Helm 注冊表。Tanzu 應用程序目錄服務監視上游社區存儲庫中容器映像中使用的開源軟件和基本操作系統映像的更新,并根據需要重新生成 Helm 圖表,從而使它們保持最新??梢允褂脴藴?Helm CLI 工具更新已部署的 Helm 圖表實例(稱為 Helm 版本)。
您可以使用 Tanzu 應用程序目錄 CLI 查看 Kafka Helm 圖表元數據。例如,可以通過 Kafka 應用程序 ID 獲取 Kafka 元數據,如下所示。Tanzu 應用程序目錄 CLI可以通過此文檔下載。
我們將使用 Helm CLI 將這個由 Tanzu 應用程序目錄服務創建的經過審查、測試和策劃的 Kafka Helm 圖表部署到標準 Kubernetes 集群。
我們將首先添加 Helm 圖表存儲庫。
我們還啟用了??Zookeeper??圖表安裝以及 Kafka。用于Zookeeper的配置如下。請注意,如果未指定存儲類,則使用默認的存儲類。
接下來,我們部署 Kafka Helm 圖表。
然后我們創建 Helm 發布 kafka-my-demo。
為了部署并運行 Kafka 客戶端,我們將部署 Kafka 客戶端 Pod。
部署并運行 Kafka 客戶端后,將創建以下 Pod 和持久卷聲明。Helm CLI 還部署了 Zookeeper。
讓我們執行到 Kafka 客戶端 pod 并啟動 Kafka 生產者和消費者。
為了確保我們的部署正常工作,我們將測試向生產者發布消息,并確保使用者通過訂閱主題來接收這些消息。
然后,Kafka 使用者訂閱此主題并檢索其上發布的消息。
我們現在已經成功部署了 Apache Kafka 企業級 Helm 圖表。
為確保成功部署企業級 Helm 圖表,我們建議執行以下步驟:
創建適當的基于角色的訪問控制,用于管理 Kubernetes 工件,包括 Helm 圖表參數化 Helm 圖表(通過 values.yaml),以確保容器以非根身份運行使用內置的 Kubernetes 實踐進行活動性和就緒性探測,在向 Pod 發送流量之前檢查它們的運行狀況確保容器到容器的流量使用 TLS 進行加密將部署的圖表與日志記錄和監視工具集成這些最佳實踐可以在這個開源的Apache Kafka圖表中看到。若要確保適當的參數化,請參閱 Helm 圖表的 values.yaml 文件。默認情況下,由 Kafka Helm 圖表創建的容器以非根用戶身份運行。啟用 serviceAccount.create 可為 Kafka Pod 啟用適當的服務帳戶創建,進而可用于實施適當的基于角色的訪問控制。
您還可以配置活動和就緒情況探測。檢查 Kafka 部署是否已準備好為客戶端請求提供服務,以及 。并設置為啟用 TLS 加密,以便 Kafka pod 與其他服務進行通信。??set livenessProbe.enabled?
???readinessProbe.enabled?
???auth.tls.autoGenerated: true?
?
要部署具有三個 Kafka 代理和 TLS 身份驗證的 Kafka 集群,以便進行代理間和客戶端通信,請使用以下參數。
啟用參數以創建獨立的 Kafka 導出器以公開 Kafka 指標。要向 Prometheus 公開 JMX 指標,請使用參數 。要啟用 Zookeeper 圖表指標,請使用參數 .??metrics.kafka.enabled: true?
???metrics.jmx.enabled : true?
???zookeeper.metrics.enabled: true?
?
Helm CLI 支持升級和刪除已部署的 Helm 實例(稱為 Helm 版本)。由于 Tanzu 應用程序目錄通過監視圖表依賴項的上游修訂來構建較新版本的 Helm 圖表,因此操作員可以通過升級現有部署來部署較新版本的 Helm 圖表。
您還可以升級、刪除和啟用 Kafka 的生命周期管理活動。
使用以下 Helm CLI 命令升級版本。
使用以下 Helm 命令刪除發布。如果要永久刪除部署和所有數據,還需要刪除永久性卷聲明。默認情況下,Helm 不會刪除永久性卷聲明,以防止意外丟失數據。
啟用參數以創建獨立的 Kafka Prometheus 導出器以公開 Kafka 指標,然后 Prometheus 可以抓取這些指標。要向 Prometheus 公開 JMX 指標,請使用參數 。要啟用 Zookeeper 圖表指標,請使用參數 .??metrics.kafka.enabled: true?
???metrics.jmx.enabled : true?
???zookeeper.metrics.enabled: true?
?
雖然 Tanzu 應用程序目錄允許您構建具有審計就緒功能的精選 Helm 圖表,但標準 Helm 工具允許您部署和管理 Helm 圖表的生命周期,并擴展它們打包的開源軟件。