博客 / 詳情

返回

終態部署、易擴展、無感升級,Doris Operator 支持高效 Kubernetes 容器化部署方案

容器化憑藉其靈活性、跨平台性、自動化管理和極致彈性,吸引了眾多企業的關注。一些企業希望將 Apache Doris 容器化部署,以實現高效的資源利用與部署迭代。Kubernetes 提供的編排和管理功能,能完成大規模容器部署,但 Kubernetes 自身的複雜性也導致眾多企業面臨部署複雜、運維困難、使用難度高等挑戰。

為滿足用户在 Kubernetes 平台上對 Doris 的高效部署和運維要求,飛輪科技推出了 Doris 的 Kubernetes Operator 開源項目(簡稱:Doris Operator),並捐贈給 Apache 基金會。 該工具集成了原生 Kubernetes 資源的複雜管理能力,並融合了 Doris 組件間的分佈式協同、用户集羣形態的按需定製等經驗,為用户提供了一個更簡潔、高效、易用的容器化部署方案。

本文將深入探討 Doris Operator 在 Kubernetes 上如何實現 Doris 數據倉庫部署及管理,包括架構設計、關鍵功能以及使用演示。通過這些內容,幫助讀者更好地理解並應用 Doris Operator。

Doris Operator 是什麼?

Doris Operator 由 Apache Doris 商業化公司飛輪科技主導開發 ,旨在實現 Doris 在 Kubernetes 上的高效管控,幫助用户減少運維管理和學習成本的同時,提供強大的功能和靈活的配置能力。Doris Operator(初始版本 24.0.0)經過一年多時間的打磨及完善,已於 2024 年下半年正式開源,並捐贈給 Apache 基金會,成為 Apache Doris 的子項目。

Doris Operator 基於 Kubernetes CustomResourceDefinitions(CRD)實現了 Doris 在 Kubernetes 平台的配置、管理和調度。

Doris Operator 是什麼?.png

Doris Operator 能夠根據用户自定義的期望狀態,自動創建 Pods 及其他資源以啓動服務。通過自動註冊機制,可將所有啓動的服務整合成一個完整的 Doris 集羣。這一實現顯著降低了在 Doris 集羣中處理配置信息、節點發現與註冊、訪問通信及健康檢查等生產環境必備操作的複雜性和學習成本。當前:

  • Doris Operator 兼容 Kubernetes 1.20 及以後版本的標準 Kubernetes 環境
  • Doris Operator 支持 Apache Doris 2.0 及以後版本的部署安裝、配置管理、擴縮容、升級和故障管理等關鍵功能

Doris Operator 架構形態

Doris Operator 的設計基於二層調度器的原理。每個組件的第一層調度使用原生的 StatefulSet 和 Service 資源直接管理相應的 Pod 服務,這使其能夠完全兼容開源 Kubernetes 集羣,包括公有云、私有云以及自建的 Kubernetes 平台。

Doris Operator 架構形態.png

基於 Doris Operator 提供的部署定義,用户可自定義 Doris 部署狀態,並通過 Kubernetes 的 kubectl 管理命令將其下發到 Kubernetes 集羣中。Doris Operator 會根據自定義狀態將每個服務的部署轉換為 StatefulSet 及其附屬資源(如 Service),再通過 StatefulSet 調度出期望的 Pods。它通過抽象 Doris 集羣的終態,簡化了 StatefulSet 規格中不必要的配置,從而降低了用户的學習成本。

關鍵能力

接下來,將從以下幾個方面介紹 Doris Operator:終態部署、易擴展、無感升級、宿主機系統配置、存儲配置以及運行時調試。通過對關鍵能力的介紹,全面展示 Doris Operator 的強大功能和實際應用價值。

01 終態部署

Kubernetes 採用終態運維模式來管理服務,而 Doris Operator 則定義了一種能夠描述 Doris 集羣的資源類型——DorisCluster。用户可以參考相關文檔和使用示例,輕鬆配置所需的集羣。

用户通過 Kubernetes 的命令行工具 kubectl,可以將配置下發到 Kubernetes 集羣中。Doris Operator 會自動構建所需的集羣,並實時更新集羣狀態至相應的資源中。這一過程確保了集羣的高效管理與監控,極大地簡化了運維操作。

舉例説明,通過如下簡單配置即可讓 Doris Operator 啓動一個最簡單、用於功能測試的集羣。

  1. 自動拉起集羣: 將以下配置下發 Kubernetes 集羣后,Doris Operator 將自動拉起一個包含一個 FE 和一個 BE 的集羣,並將狀態顯示到部署的資源中。
kind: DorisCluster
metadata:
  name: doriscluster-sample
spec:
  feSpec:
    image: apache/doris:fe-ubuntu-2.1.7
    replicas: 1
  beSpec:
    replicas: 1
    image: apache/doris:be-ubuntu-2.1.7
  1. 查看部署狀態: 通過 Kubernetes 的命令行工具查看集羣的部署狀態,部署完成的狀態如下
kind: DorisCluster
metadata:
  name: doriscluster-sample
spec:
  beSpec:
    replicas: 1
    image: apache/doris:be-ubuntu-2.1.7
  feSpec:
    image: apache/doris:fe-ubuntu-2.1.7
    replicas: 1
  status:
    beStatus:
      accessService: doriscluster-sample-be-service
      componentCondition:
        lastTransitionTime: "2024-12-20T07:47:13Z"
        message: ""
        phase: available
        reason: ""
        subResourceName: doriscluster-sample-be
      runningInstances:
      - doriscluster-sample-be-0
    feStatus:
      accessService: doriscluster-sample-fe-service
      componentCondition:
        lastTransitionTime: "2024-12-20T07:47:13Z"
        message: ""
        phase: available
        reason: ""
        subResourceName: doriscluster-sample-fe
      runningInstances:
      - doriscluster-sample-fe-0

02 易擴展

Doris Operator 在基於雲盤的環境中支持併發實時橫向擴容。Doris 的所有組件服務均通過 Kubernetes 的 StatefulSet 進行部署和管理。在部署或擴容時,採用 StatefulSet 的 Paralle 模式創建 Pods,這樣理論上可以在啓動一個節點的時間內啓動所有副本。每個副本的啓動互不干擾,當某個服務啓動失敗時,其他服務的啓動不會受到影響。

Doris Operator 採用併發模式啓動服務,並內置分佈式架構,極大簡化了服務擴展的過程。用户只需設置副本數量,即可輕鬆完成擴容,徹底解放了運維操作的複雜性。

03 無感變更

在分佈式環境中,服務重啓可能會引發服務的暫時不穩定。尤其對於數據庫這類對穩定性要求極高的服務而言,如何在重啓過程中保證服務的穩定性是一個非常重要的課題。Doris 在 Kubernetes 上通過三種機制確保服務重啓過程中的穩定性,從而實現業務在重啓和升級過程中無感知的體驗。

機制一:優雅退出策略

Doris 的 BE 服務實現了優雅退出策略。當服務接收到終止信號時,它會等待當前節點上所有查詢任務執行完成後再退出。為了兼顧時效性並防止大查詢佔用過長時間,Doris Operator 提供了超時退出策略,與優雅退出結合使用。在部署服務時,用户可以設置超時時間,一旦超過該時間,服務將被強制終止。

機制二:滾動重啓

Doris Operator 採用滾動變更策略,以確保服務的高穩定性。在變更過程中,每當一個節點完成變更後,才會進行下一個節點的變更,這樣可以避免一次性變更過多節點導致服務不穩定。如果某個節點的變更失敗,系統會重試該節點的變更,直到該節點服務恢復健康後,再繼續進行後續節點的變更。

機制三:主動停止查詢分配

在 BE 服務主動退出時,它會向 FE 服務發送通知,以停止分配新的查詢任務。當 BE 服務重新啓動並恢復正常後,FE 服務會通過反向檢測確認這一狀態,並恢復新的查詢任務分配。Doris 通過主動彙報和反向檢查機制,實現了服務的安全退出,並能夠在 BE 服務健康時及時處理任務。

Doris Operator 採用三種機制實現服務的無感變更,確保在容器化環境中仍能保持極高的穩定性。在不斷追求穩定性的過程中,Doris 正在實現落盤與重試機制。未來,Doris Operator 將持續演化,增強對 Doris 內核的配置能力。

04 宿主機系統配置

在某些場景中,需要配置宿主機系統參數來達到 Apache Doris 的理想性能。而在容器化場景下,宿主機的部署不確定和參數修改難度高給用户帶來挑戰。為解決該問題,Doris Operator 通過利用 Kubernetes 的初始化容器,實現了宿主機參數的可配置化。

Doris Operator 允許用户配置在宿主機上執行的命令,並通過初始化容器使其生效。為了提升可用性,Doris Operator 抽象了 Kubernetes 初始化容器的配置方式,使宿主機命令的設置更加簡單直觀。

以下是設置 BE 所在的宿主機對操作系統可用最大內存塊數量的配置示例:

kind: DorisCluster
metadata:
  name: doriscluster-sample-system-params
spec:
  feSpec:
    replicas: 1
    image: apache/doris:fe-ubuntu-2.1.7
  beSpec:
    replicas: 3
    image: apache/doris:be-ubuntu-2.1.7
    systemInitialization:
      command: ["/sbin/sysctl", "-w", "vm.max_map_count=2000000"]

05 存儲配置

Doris Operator 採用 Kubernetes StorageClass 模式為各個服務提供存儲配置。它允許用户自定義掛載目錄,在自定義啓動配置時,如果修改了存儲目錄,可以在自定義資源中將該目錄設置為持久化位置,從而使服務使用容器內指定的目錄來存儲數據。

默認配置存儲 FE 元數據目錄和 BE 數據目錄的配置如下:

kind: DorisCluster
metadata:
  name: doriscluster-sample
spec:
  feSpec:
    replicas: 1
    image: apache/doris:fe-ubuntu-2.1.7
     persistentVolumes:
     - mountPath: /opt/apache-doris/fe/doris-meta
       name: fe-meta
       persistentVolumeClaimSpec:
         accessModes:
         - ReadWriteOnce
         resources:
           requests:
             storage: 10Gi
  beSpec:
    replicas: 3
    persistentVolumes:
    - mountPath: /opt/apache-doris/be/storage
      name: be-storage
      persistentVolumeClaimSpec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
    image: apache/doris:be-ubuntu-2.1.7

Doris Operator 提供自定義定製 annotations 的能力,能夠適應各種私有云環境。此外,Doris Operator 還提供了實時在線擴容的 Beta 版本(計劃在 25.0.0 版本中正式發佈)。在雲盤模式下,允許在運行時擴展磁盤容量,無需重啓服務。如需啓用磁盤擴容功能,請將 persistentVolume 的 provisioner 設置為 Operator,示例如下:

kind: DorisCluster
metadata:
  name: doriscluster-sample
spec:
  feSpec:
    replicas: 1
    image: apache/doris:fe-ubuntu-2.1.7
     persistentVolumes:
     - mountPath: /opt/apache-doris/fe/doris-meta
       name: fe-meta
       persistentVolumeClaimSpec:
         accessModes:
         - ReadWriteOnce
         resources:
           requests:
             storage: 10Gi
  beSpec:
    replicas: 3
    persistentVolumes:
    - mountPath: /opt/apache-doris/be/storage
      name: be-storage
      provisioner: Operator
      persistentVolumeClaimSpec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
    image: apache/doris:be-ubuntu-2.1.7

注意:如果使用運行時修改存儲的能力後,以後 provisioner 的值不會再允許修改。

06 運行時調試

容器化服務對於 Trouble Shotting 來説最大挑戰之一是如何在運行時進行調試。Doris Operator 在追求可用性和易用性的同時,也為問題定位提供了更便利的條件。在 Doris 的基礎鏡像中,預置了多種用於問題定位的工具。當需要實時查看狀態時,可以通過 kubectl 提供的 exec 命令進入容器,使用內置工具進行故障排查。

當服務因未知原因無法啓動時,Doris Operator 提供了Debug運行模式。當一個 Pod 被設置為Debug啓動模式時,容器將自動進入運行狀態。這時可通過exec命令進入容器,手動啓動服務並進行問題定位。詳細使用請參考: Doris Operator 的官網

集羣創建及管理使用演示

01 創建集羣

使用如下配置創建 3 個 FE 和 3 個 BE 的簡易測試集羣:

kind: DorisCluster
metadata:
  labels:
    app.kubernetes.io/name: doriscluster
    app.kubernetes.io/instance: doriscluster-sample
  name: doriscluster-sample
spec:
  feSpec:
    replicas: 3
    image: apache/doris:fe-ubuntu-2.1.7
    service:
      type: NodePort
  beSpec:
    replicas: 3
    image: apache/doris:be-ubuntu-2.1.7

執行命令如下:

kubectl apply -f doriscluster-sample.yaml
kubectl get pods

部署方式和結果檢測:

部署方式和結果檢測.gif

02 集羣管理

部署集羣后,可直接通過修改部署資源對應組件的副本數進行擴縮容。當修改後,Doris Operator 接收後會根據指定的服務的副本數對服務進行擴縮容。將 BE 服務從 3 副本數擴充到 5 副本數樣例如下:

執行命令如下:

kubectl get pods
kubectl patch doriscluster doriscluster-sample --type merge --patch '{"spec":{"beSpec":{"replicas":3}}}'
kubectl get pods

集羣管理.gif

通過直接修改 BE 的副本數,Doris Operator 接收變更後會自動創建新的 Pod 節點,將服務加入 Doris 集羣中。

除上述主要功能外,Doris Operator 還提供了 Kubernetes 服務調度及其他能力,可通過: Kubernetes 部署 詳細瞭解。

未來規劃

  • 終態化: Doris Operator 未來將會把 Doris 在 Kubernetes 所有運維操作終態化,用户只需要通過 Kubernetes 的設置資源方式就可以實現所有 Doris 的管控。
  • 精細化: 未來 Doris Operator 會與 Doris 更緊密的結合,提供更加清晰明瞭的服務側寫,幫助用户更加清晰的感知 Doris 狀態。藉助 Doris 提供的可觀測性服務及管理能力,在 Kubernetes 平台上實現精細化管理,推動 Doris 的 serverless 無感知化發展,為用户提供更穩定保障。
  • 自動化與智能化: 實現基於 Kubernetes 平台的服務自動化運維管理,可基於當前數據庫的狀態側寫以及歷史可觀測性信息,將 Doris 服務維穩到最佳狀態。從最簡單的自動化擴縮容,到服務狀態的自我診斷,最終到服務最佳狀態的調整,邁向 AI 智能化之境。
user avatar u_12190 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.