編輯

共用方式為


Apache NiFi 的 Helm 型部署

Azure Kubernetes Service (AKS)

此解決方案說明如何在 Azure Kubernetes Service (AKS) 上部署 NiFi 時使用 Helm 圖表。 Helm 可簡化安裝和管理 Kubernetes 應用程式的程式。

Apache、Apache® NiFi 和 NiFi®® 是 美國 和/或其他國家/地區的 Apache Software Foundation 註冊商標或商標。 使用這些標記不會隱含 Apache Software Foundation 的背書。

架構

此圖顯示使用者如何設定 Helm 圖表,以在 Kubernetes 上部署應用程式。元件包括 Kubernetes 所建立的 Pod 和磁碟區。

下載此架構的 Visio 檔案

工作流程

  • Helm 圖表包含檔案 values.yaml 。 該檔案會列出使用者可以編輯的輸入值。

  • 使用者調整圖表中的設定,包括下列專案的值:

    • 磁碟區大小。
    • Pod 的數目。
    • 使用者驗證和授權機制。
  • 使用者執行 Helm install 命令來部署圖表。

  • Helm 會檢查使用者輸入是否包含所有必要變數的值。

  • Helm 會建立指令清單,描述要部署在 Kubernetes 上的物件。

  • Helm 會將指令清單傳送至 Kubernetes 叢集。 Apache ZooKeeper 提供叢集協調。

  • Kubernetes 會建立指定的物件。 NiFi 部署需要下列物件:

    • 組態物件。
    • 數據磁碟區。 Pod 記憶體是暫時的。
    • 記錄磁碟區。
    • 使用映像在容器中執行 NiFi 的 Pod。 Kubernetes 會使用 StatefulSet 工作負載資源來管理 Pod。
    • 可讓使用者使用 NiFi UI 的 Kubernetes 服務。
    • 如果叢集使用輸入讓UI可在外部使用,則輸入路由。

元件

Helm 圖表是具有樹狀結構之資料夾中的檔案集合。 這些檔案描述 Kubernetes 資源。 您可以在 Helm 圖表中設定下列元件:

ZooKeeper

ZooKeeper 會使用不同的圖表。 您可以使用 Kubernetes 在其 孵化器圖表存放庫中提供的標準 ZooKeeper 圖表。 但是,當您的相依性包含公用登錄內容時,您會對映射開發和部署工作流程帶來風險。 若要降低此風險,請在您可以時保留公用內容的本機複本。 如需詳細資訊,請參閱 使用 Azure Container Registry 管理公用內容。

或者,您可以自行部署 ZooKeeper。 如果您選擇此選項,請提供 ZooKeeper 伺服器和埠號碼,讓執行 NiFi 的 Pod 可以存取 ZooKeeper 服務。

Kubernetes StatefulSet

若要在 Kubernetes 上執行應用程式,請執行 Pod。 這個基本單元會執行不同的容器,以實作應用程式的不同活動。

Kubernetes 提供兩個解決方案來管理執行 NiFi 之類的應用程式的 Pod:

  • ReplicaSet,它會維護一組穩定且在任何指定時間執行的複本 Pod。 您通常會使用 ReplicaSet 來保證指定數目相同 Pod 的可用性。
  • StatefulSet,這是您用來管理具狀態應用程式的工作負載 API 物件。 StatefulSet 會管理以相同容器規格為基礎的 Pod。 Kubernetes 會從相同的規格建立這些 Pod。 但這些 Pod 無法交換。 每個 Pod 都有一個持續識別碼,它會在重新排程時維護。

由於您使用 NiFi 來管理數據,StatefulSet 為 NiFi 部署提供最佳解決方案。

ConfigMaps

Kubernetes 提供 ConfigMaps 來儲存非機密數據。 Kubernetes 會使用這些物件來管理各種組態檔,例如 nifi.properties。 執行應用程式的容器會透過掛接的磁碟區和檔案來存取組態資訊。 ConfigMaps 可讓您輕鬆地管理部署後設定變更。

ServiceAccount

在受保護的實例中,NiFi 會使用驗證和授權。 NiFi 會在文件系統檔案中管理這項資訊。 具體而言,每個叢集節點都需要維護 authorizations.xml 檔案和 users.xml 檔案。 所有成員都必須能夠寫入這些檔案。 叢集中的每個節點都必須有相同的此資訊複本。 否則,叢集會脫離同步並中斷。

若要符合這些條件,您可以將這些檔案從叢集的第一個成員複製到存在的每個成員。 然後,每個新成員都會維護自己的複本。 Pod 通常沒有從另一個 Pod 複製內容的授權。 但 Kubernetes ServiceAccount 提供取得授權的方式。

服務

Kubernetes 服務可讓 Kubernetes 叢集的使用者使用應用程式服務。 服務物件也可讓 NiFi 叢集的成員節點彼此通訊。 針對 Helm 圖表部署,請使用兩種服務類型:無前端服務和 IP 型服務。

輸入

輸入會管理叢集服務的外部存取。 具體而言,預先設定的輸入控制器會將 HTTP 和 HTTPS 路由從叢集外部公開至叢集內的服務。 您可以定義輸入規則,以決定控制器如何路由傳送流量。 Helm 圖表包含組態中的輸入路由。

密碼

若要設定安全的 NiFi 叢集,您必須儲存認證。 Kubernetes 秘密提供安全的方式來儲存和擷取這些認證。

案例詳細資料

Apache NiFi 使用者通常需要在 Kubernetes 上部署 NiFi。 Kubernetes 部署牽涉到許多物件,例如 Pod、磁碟區和服務。 Kubernetes 針對這個數目的物件,很難管理 指令清單或規格檔案。 當您部署數個使用不同組態的 NiFi 叢集時,難度會增加。

Helm 圖表 提供管理指令清單的解決方案。 Helm 是 Kubernetes 的套件管理員。 藉由使用 Helm 工具,您可以簡化安裝和管理 Kubernetes 應用程式的程式。

圖表是 Helm 所使用的封裝格式。 您會在圖表檔案中輸入組態需求。 Helm 會追蹤每個圖表的歷程記錄和版本。 Helm 接著會使用圖表來產生 Kubernetes 指令清單檔案。

從單一圖表中,您可以部署使用不同的組態的應用程式。 當您在 Azure 上執行 NiFi 時,您可以使用 Helm 圖表在 Kubernetes 上部署不同的 NiFi 組態。

Apache、Apache® NiFi 和 NiFi®® 是 美國 和/或其他國家/地區的 Apache Software Foundation 註冊商標或商標。 使用這些標記不會隱含 Apache Software Foundation 的背書。

考量

這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。

資料磁碟

針對磁碟使用量,請考慮針對存放庫使用等量磁碟集。 在使用 虛擬機器擴展集 的測試部署中,此方法效果最佳。 下列摘錄 nifi.properties 顯示磁碟使用量設定:

nifi.flowfile.repository.directory=/data/partition1/flowfiles
nifi.provenance.repository.directory.stripe1=/data/partition1/provenancenifi.provenance.repository.directory.stripe2=/data/partition2/provenancenifi.provenance.repository.directory.stripe3=/data/partition3/provenancenifi.content.repository.directory.stripe2=/data/partition2/content
nifi.content.repository.directory.stripe3=/data/partition3/content

此組態會使用三個大小相等的磁碟區。 您可以調整值和等量,以符合您的系統需求。

部署案例

您可以使用公用或私人負載平衡器或輸入控制器來公開 NiFi 叢集。 當您使用此實作的 Helm 圖表時,有兩種設定可供使用:

  • 不安全的 NiFi 叢集,可透過 HTTP URL 存取,而不需要使用者驗證或授權。
  • 可透過 HTTPS URL 存取的安全 NiFi 叢集。 這種叢集是使用 TLS 保護的。 當您設定受保護的叢集時,您可以提供自己的憑證。 或者,圖表可以產生憑證。 基於此目的,圖表會使用提供自我簽署證書頒發機構單位 (CA) 的 NiFi 工具組。

如果您將 NiFi 叢集設定為以 TLS 通訊作為安全叢集執行,則必須開啟使用者驗證。 使用下列其中一個支援的使用者驗證方法:

  • 憑證型用戶驗證。 使用者會由他們向 NiFi UI 呈現的憑證進行驗證。 若要使用這類使用者驗證系統,請將 CA 的公開憑證新增至 NiFi 部署。
  • LDAP型用戶驗證。 LDAP 伺服器會驗證用戶認證。 當您部署圖表時,請提供LDAP伺服器和資訊樹狀結構的相關信息。
  • OpenID 型用戶驗證。 使用者會將資訊提供給 OpenID 伺服器來設定部署。

資源組態和使用方式

若要優化資源使用量,請使用下列 Helm 選項來設定 CPU 和記憶體值:

  • request選項,指定容器要求之資源的初始數量
  • limit選項,指定容器可以使用的資源數量上限

當您設定 NiFi 時,請考慮系統的記憶體設定。 由於 NiFi 是 Java 應用程式,因此您應該調整最低和最大 Java 虛擬機器 (JVM) 記憶體值的設定。 使用下列設定:

  • jvmMinMemory
  • jvmMaxMemory
  • g1ReservePercent
  • conGcThreads
  • parallelGcThreads
  • initiatingHeapOccupancyPercent

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性要素的概觀

使用 Kubernetes 安全性內容來改善執行 NiFi 二進位檔之基礎容器的安全性。 安全性內容可管理這些容器及其Pod的存取權。 透過安全性內容,您可以授與非根使用者執行容器的許可權。

安全性內容的其他用法包括:

  • 限制執行容器的 OS 型使用者存取。
  • 指定哪些群組可以存取容器。
  • 限制對檔案系統的存取。

容器映像

Kubernetes 容器是執行 NiFi 二進位檔的基本單位。 若要設定 NiFi 叢集,請將焦點放在您用來執行這些容器的映像上。 此映像有兩個選項:

  • 使用標準 NiFi 影像來執行 NiFi 圖表。 Apache NiFi 社群會提供該映像。 但您必須將二進位檔新增 kubectl 至容器,以設定受保護的叢集。
  • 使用自定義映像。 如果您採用這種方法,請考慮文件系統需求。 請確定 NiFi 二進位檔的位置正確無誤。 如需所設定文件系統的詳細資訊,請參閱 Apache NiFi 原始程式碼中的 Dockerfile。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主體作者:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步