如何在 Kubernetes 上部署 SQL Server 巨量資料叢集

適用於:SQL Server 2019 (15.x)

重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將於 2025 年 2 月 28 日結束。 平台上將完全支援含軟體保證 SQL Server 2019 的所有現有使用者,而且軟體將會持續透過 SQL Server 累積更新來維護,直到該時間為止。 如需詳細資訊,請參閱公告部落格文章Microsoft SQL Server 平台上的巨量資料選項

SQL Server 巨量資料叢集會部署為 Kubernetes 叢集上的 Docker 容器。 這是安裝和設定步驟的概觀:

  • 在單一 VM、VM 叢集、Azure Kubernetes Service (AKS)、Red Hat OpenShift 或 Azure Red Hat OpenShift (ARO) 中設定 Kubernetes 叢集。
  • 在您的用戶端電腦上,安裝叢集組態工具 Azure Data CLI (azdata)。
  • 在 Kubernetes 叢集中部署 SQL Server 巨量資料叢集。

已測試的組態

如需經驗證可部署 SQL Server 巨量資料叢集其各種 Kubernetes 平台的完整清單,請參閱已測試的組態

SQL Server 版本

版本 注意
Enterprise
標準
開發人員
巨量資料叢集版本是由 SQL Server 主要執行個體版本所決定。 在部署時,預設會部署 Developer Edition。 在部署後可以變更此版本。 請參閱設定 SQL Server 主要執行個體

Kubernetes

Kubernetes 叢集設定

如果您已經有滿足上述先決條件的 Kubernetes 叢集,則可直接跳到部署步驟。 本節假設您對 Kubernetes 概念有基本瞭解。 如需 Kubernetes 的詳細資訊,請參閱 Kubernetes 文件 \(英文\)。

您可選擇使用下列方式來部署 Kubernetes:

在下列項目上部署 Kubernetes: 描述 連結
Azure Kubernetes Service (AKS) Azure 中的受控 Kubernetes 容器服務。 指示
單一或多部電腦 (kubeadm) 使用 kubeadm,在實體或虛擬機器上部署 Kubernetes 叢集 指示
Azure Red Hat OpenShift 在 Azure 中執行的受控 OpenShift 供應項目。 指示
Red Hat OpenShift 混合式雲端的企業 Kubernetes 應用程式平台。 指示

提示

您也可以透過單一步驟編寫部署 AKS 和巨量資料叢集的指令碼。 如需詳細資訊,請參閱如何在 Python 指令碼或 Azure Data Studio 筆記本中執行此動作。

確認 Kubernetes 組態

執行 kubectl 命令來檢視叢集設定。 確定 kubectl 指向正確的叢集內容。

kubectl config view

重要

如果您要在使用 kubeadm 所啟動的多節點 Kubernetes 叢集上部署,則在開始進行巨量資料叢集部署之前,請確定部署的所有目標 Kubernetes 節點上時鐘已同步。 巨量資料叢集針對仰賴正確時間的各項服務具有內建健全狀況屬性,而時鐘誤差可能會導致狀態不正確。

設定 Kubernetes 叢集之後,您可以繼續部署新的 SQL Server 巨量資料叢集。 如果您從前一個版本升級,請參閱如何升級 SQL Server 巨量資料叢集

確定已設定儲存體

大多數的巨量資料叢集部署都應該擁有永續性儲存體。 此時,在部署之前,您需要先確定已為如何在 Kubernetes 叢集上提供永續性儲存體進行規劃。

  • 若您在 AKS 中進行部署,則不需要任何儲存體設定。 AKS 提供具備動態佈建的內建儲存類別。 您可以在部署設定檔中自訂儲存類別 (defaultmanaged-premium)。 內建設定檔會使用 default 儲存類別。
  • 若正在以使用 kubeadm 所部署的 Kubernetes 叢集上進行部署,則您將需要確定針對所需規模的叢集具備了足夠儲存體,且該儲存體已經設定且可供使用。 若要自訂儲存體的使用方式,建議在繼續前先執行此操作。 請參閱在 Kubernetes 上使用 SQL Server 巨量資料叢集的資料持續性

安裝 SQL Server 2019 巨量資料工具

部署 SQL Server 2019 巨量資料叢集之前,請先安裝巨量資料工具

部署概觀

大部分的巨量資料叢集設定都定義於 JSON 部署組態檔中。 您可以針對 AKS 和透過 kubeadm 所建立的 Kubernetes 叢集使用預設部署設定檔,或自訂自己的部署設定檔以在設定期間使用。 基於安全因素,驗證設定會透過環境變數來傳遞。

下列各節會提供更多有關如何設定巨量資料叢集部署的詳細資訊,以及一般自訂的範例。 此外,您一律可以使用 VS Code 之類的編輯器來編輯自訂部署組態檔。

預設組態

巨量資料叢集部署選項均定義於 JSON 組態檔中。 您可以從 Azure Data CLI (azdata) 中可用的內建部署設定檔開始自訂叢集部署。

注意

巨量資料叢集部署所需容器映像會裝載於 Microsoft 容器登錄 (mcr.microsoft.com) 的 mssql/bdc 存放庫中。 根據預設,這些設定已包含在 Azure Data CLI (azdata) 所隨附每個部署設定檔的 control.json 組態檔中。 此外,每個版本的容器映像標籤也會預先填入相同設定檔。 如果您需要將容器映像提取到自己的私人容器登錄中,以及/或修改容器登錄/存放庫設定,請遵循<離線安裝>一文中的指示

執行此命令來尋找可用的範本:

azdata bdc config list -o table 

SQL Server 2019 CU5 提供下列範本:

部署設定檔 Kubernetes 環境
aks-dev-test 在 Azure Kubernetes Service (AKS) 上部署 SQL Server 巨量資料叢集
aks-dev-test-ha 在 Azure Kubernetes Service (AKS) 上部署 SQL Server 巨量資料叢集。 這會設定任務關鍵性服務 (例如 SQL Server 主要和 HDFS 名稱節點) 以取得高可用性。
aro-dev-test 在 Azure Red Hat OpenShift 上部署 SQL Server 巨量資料叢集,以進行開發和測試。

在 SQL Server 2019 CU5 中引進。
aro-dev-test-ha 在 Red Hat OpenShift 叢集上部署具有高可用性的 SQL Server 巨量資料叢集,以進行開發和測試。

在 SQL Server 2019 CU5 中引進。
kubeadm-dev-test 在使用單一或多部實體或虛擬機器,搭配 kubeadm 建立的 Kubernetes 叢集上部署 SQL Server 巨量資料叢集。
kubeadm-prod 在使用單一或多部實體或虛擬機器,搭配 kubeadm 建立的 Kubernetes 叢集上部署 SQL Server 巨量資料叢集。 使用此範本可讓巨量資料叢集服務與 Active Directory 整合。 這會在高可用性設定中部署任務關鍵性服務 (例如 SQL Server 主要執行個體和 HDFS 名稱節點)。
openshift-dev-test 在 Red Hat OpenShift 叢集上部署 SQL Server 巨量資料叢集,以進行開發和測試。

在 SQL Server 2019 CU5 中引進。
openshift-prod 在 Red Hat OpenShift 叢集上部署具有高可用性的 SQL Server 巨量資料叢集。

在 SQL Server 2019 CU5 中引進。

您可以執行 azdata bdc create 來部署巨量資料叢集。 這會提示您選擇其中一個預設組態,然後引導您完成部署。

第一次執行 Azure Data CLI (azdata) 時,您必須包含 --accept-eula=yes 以接受使用者授權合約 (EULA)。

azdata bdc create --accept-eula=yes

在此案例中,系統會提示您輸入任何不屬於預設組態 (例如密碼) 一部分的設定。

重要

巨量資料叢集的預設名稱為 mssql-cluster。 若要執行任何 kubectl 命令,以使用 -n 參數來指定 Kubernetes 命名空間,請務必了解這一點。

自訂組態

您也可以自訂部署來容納正在規劃執行的工作負載。 您無法在巨量資料叢集服務部署後變更規模 (複本數目) 或儲存體設定,因此請務必謹慎規劃部署設定,以避免發生容量問題。 若要自訂部署,請遵循下列步驟:

  1. 從符合您 Kubernetes 環境的其中一個標準部署設定檔開始。 您可以使用 azdata bdc config list 命令來將其列出:

    azdata bdc config list
    
  2. 若要自訂部署,請使用 azdata bdc config init 命令來建立部署設定檔的複本。 例如,下列命令會在名為 custom 的目標目錄中建立 aks-dev-test 部署設定檔複本:

    azdata bdc config init --source aks-dev-test --target custom
    

    提示

    --target 會根據 --source 參數來指定包含設定檔 (bdc.jsoncontrol.json) 的目錄。

  3. 若要在您的部署組態設定檔中自訂設定,您可以在適用於編輯 JSON 檔案的工具 (例如 VS Code) 中編輯部署組態檔。 針對已編寫指令碼的自動化,您也可以使用 azdata bdc config 命令來編輯自訂部署設定檔。 例如,下列命令會改變自訂部署設定檔,以將部署的叢集名稱從預設值 (mssql-cluster) 變更為 test-cluster

    azdata bdc config replace --config-file custom/bdc.json --json-values "metadata.name=test-cluster"
    

    提示

    您也可以使用 azdata create bdc 命令的 --name 參數,在部署期間傳入叢集名稱。 命令中的參數優先於組態檔中的值。

    尋找 JSON 路徑的實用工具是 JSONPath Online Evaluator \(英文\)。

    除了傳遞索引鍵/值組,您也可以提供內嵌的 JSON 值,或傳遞 JSON 修補檔案。 如需詳細資訊,請參閱設定巨量資料叢集資源和服務的部署設定

  4. 將自訂設定檔傳遞至 azdata bdc create。 請注意,您必須設定必要的環境變數,否則終端會提示您輸入下列值:

    azdata bdc create --config-profile custom --accept-eula yes
    

警告

必須在部署設定檔 control.json 檔案中將參數 imagePullPolicy 設定為 "Always"

如需部署組態檔結構的詳細資訊,請參閱部署組態檔參考。 如需更多組態範例,請參閱設定巨量資料叢集的部署設定

環境變數

下列環境變數用於不會儲存於部署組態檔中的安全性設定。 請注意,您可以在組態檔中設定認證以外的 Docker 設定。

環境變數 需求 描述
AZDATA_USERNAME 必要 SQL Server 巨量資料叢集管理員的使用者名稱。 SQL Server 主要執行個體中會建立具有相同名稱的系統管理員登入。 基於安全性最佳做法,sa 帳戶已停用。

從 SQL Server 2019 CU5 開始,當您使用基本驗證部署新的叢集時,所有端點 (包括閘道) 都會使用 AZDATA_USERNAMEAZDATA_PASSWORD。 升級至 CU5 的叢集上的端點會繼續使用 root 作為使用者名稱,以連線至閘道端點。 這項變更不適用於使用 Active Directory 驗證的部署。 請參閱版本資訊中的透過閘道端點存取服務的認證
AZDATA_PASSWORD 必要 以上所建立使用者帳戶的密碼。 在 SQL Server 2019 CU5 之前部署的叢集上,root 使用者會使用相同的密碼來保護 Knox 閘道和 HDFS。
ACCEPT_EULA 第一次使用 Azure Data CLI (azdata) 時需要 設定為 [是]。 設定為環境變數時,其會將 EULA 同時套用至 SQL Server 和 Azure Data CLI (azdata)。 如果未設定為環境變數,您可以在第一次使用 Azure Data CLI (azdata) 命令時包含 --accept-eula=yes
DOCKER_USERNAME 選用 用來存取容器映像的使用者名稱,以防它們儲存於私人存放庫中。 如需如何使用私人 Docker 存放庫來進行巨量資料叢集部署的詳細資訊,請參閱離線部署主題。
DOCKER_PASSWORD 選用 用來存取上述私人存放庫的密碼。

呼叫 azdata bdc create 之前,必須先設定這些環境變數。 如果未設定任何變數,系統就會提示您輸入。

下列範例示範如何設定適用於 Linux (Bash) 和 Windows (PowerShell) 的環境變數:

export AZDATA_USERNAME=admin
export AZDATA_PASSWORD=<password>
export ACCEPT_EULA=yes
SET AZDATA_USERNAME=admin
SET AZDATA_PASSWORD=<password>

注意

在 SQL Server 2019 CU5 之前部署的叢集上,您必須針對 Knox 閘道使用 root 使用者搭配上述密碼。 root 是此基本驗證 (使用者名稱/密碼) 中唯一支援的使用者。

從 SQL Server 2019 CU5 開始,當您使用基本驗證部署新的叢集時,所有端點 (包括閘道) 都會使用 AZDATA_USERNAMEAZDATA_PASSWORD。 升級至 CU5 的叢集上的端點會繼續使用 root 作為使用者名稱,以連線至閘道端點。 這項變更不適用於使用 Active Directory 驗證的部署。 請參閱版本資訊中的透過閘道端點存取服務的認證

若要使用基本驗證連線到 SQL Server,請使用與 AZDATA_USERNAME 和 AZDATA_PASSWORD 環境變數相同的值。

設定環境變數之後,您必須執行 azdata bdc create 來觸發部署。 此範例會使用上方所建立的叢集組態設定檔:

azdata bdc create --config-profile custom --accept-eula yes

請注意下列方針:

  • 如果密碼包含任何特殊字元,請務必以雙引號括住密碼。 您可以將 AZDATA_PASSWORD 設定為您喜歡的任何內容,但請確定密碼夠複雜,且不要使用 !&' 字元。 請注意,雙引號分隔符號僅適用於 Bash 命令。
  • AZDATA_USERNAME 登入是在設定期間所建立 SQL Server 主要執行個體上的系統管理員。 建立您的 SQL Server 容器之後,在容器中執行 echo $AZDATA_PASSWORD,即可探索您指定的 AZDATA_PASSWORD 環境變數。 基於安全性考量,最佳做法是變更密碼。

自動安裝

針對自動部署,您必須設定所有必要的環境變數、使用組態檔,並使用 --accept-eula yes 參數來呼叫 azdata bdc create 命令。 上一節的範例會示範自動安裝的語法。

監視部署

在叢集啟動程序期間,用戶端命令視窗會傳回部署狀態。 在部署程序中,您應該會看到一系列訊息,表示其正在等候控制器 Pod:

Waiting for cluster controller to start.

在 15 到 30 分鐘內,您應該會收到控制器 Pod 正在執行的通知:

Cluster controller endpoint is available at 11.111.111.11:30080.
Cluster control plane is ready.

重要

由於下載巨量資料叢集元件的容器映像需要時間,因此整個部署可能會很費時。 不過,應該不會花費到數小時。 如果您在部署期間遇到問題,請參閱監視並針對 SQL Server 巨量資料叢集進行疑難排解

完成部署時,輸出會通知您成功:

Cluster deployed successfully.

提示

除非是透過自訂組態來修改,否則所部署巨量資料叢集的預設名稱會是 mssql-cluster

取出端點

成功完成部署指令碼之後,您可以使用下列步驟來取得巨量資料叢集的外部端點位址。

  1. 部署之後,可從部署標準輸出來尋找控制器端點的 IP 位址,或查看下列 kubectl 命令的外部 IP 輸出來尋找該位址:

    kubectl get svc controller-svc-external -n <your-big-data-cluster-name>
    

    提示

    如果您未在部署期間變更預設名稱,則在上一個命令中使用 -n mssql-clustermssql-cluster 是巨量資料叢集的預設名稱。

  2. 使用 azdata login 來登入巨量資料叢集。 將 --endpoint 參數設定為控制器端點的外部 IP 位址。

    azdata login --endpoint https://<ip-address-of-controller-svc-external>:30080 --username <user-name>
    

    指定您在部署期間為巨量資料叢集管理員所設定的使用者名稱和密碼 (AZDATA_USERNAME 和 AZDATA_PASSWORD)。

    提示

    如果您是 Kubernetes 叢集管理員並可存取叢集設定檔 (Kube 設定檔),您可以將目前的內容設定為指向目標 Kubernetes 叢集。 在此情況下,您可以使用 azdata login -n <namespaceName> 登入,其中 namespace 是巨量資料叢集名稱。 如果未在登入命令中指定,系統會提示您提供認證。

  3. 執行 azdata bdc endpoint list 來取得一份清單,其中包含每個端點的描述及其對應 IP 位址和連接埠值。

    azdata bdc endpoint list -o table
    

    下列清單顯示此命令的範例輸出:

    Description                                             Endpoint                                                   Ip              Name               Port    Protocol
    ------------------------------------------------------  ---------------------------------------------------------  --------------  -----------------  ------  ----------
    Gateway to access HDFS files, Spark                     https://11.111.111.111:30443                               11.111.111.111  gateway            30443   https
    Spark Jobs Management and Monitoring Dashboard          https://11.111.111.111:30443/gateway/default/sparkhistory  11.111.111.111  spark-history      30443   https
    Spark Diagnostics and Monitoring Dashboard              https://11.111.111.111:30443/gateway/default/yarn          11.111.111.111  yarn-ui            30443   https
    Application Proxy                                       https://11.111.111.111:30778                               11.111.111.111  app-proxy          30778   https
    Management Proxy                                        https://11.111.111.111:30777                               11.111.111.111  mgmtproxy          30777   https
    Log Search Dashboard                                    https://11.111.111.111:30777/kibana                        11.111.111.111  logsui             30777   https
    Metrics Dashboard                                       https://11.111.111.111:30777/grafana                       11.111.111.111  metricsui          30777   https
    Cluster Management Service                              https://11.111.111.111:30080                               11.111.111.111  controller         30080   https
    SQL Server Master Instance Front-End                    11.111.111.111,31433                                       11.111.111.111  sql-server-master  31433   tcp
    HDFS File System Proxy                                  https://11.111.111.111:30443/gateway/default/webhdfs/v1    11.111.111.111  webhdfs            30443   https
    Proxy for running Spark statements, jobs, applications  https://11.111.111.111:30443/gateway/default/livy/v1       11.111.111.111  livy               30443   https
    

您也可以執行下列 kubectl 命令來取得針對叢集部署的所有服務端點:

kubectl get svc -n <your-big-data-cluster-name>

確認叢集狀態

部署之後,您可以使用 azdata bdc status show 命令來檢查叢集的狀態。

azdata bdc status show

提示

若要執行狀態命令,您必須先使用 azdata login 命令登入,此動作已於先前的端點一節中示範過。

下列顯示此命令的範例輸出:

Bdc: ready                                                                                                                                                                                                          Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Services: ready                                                                                                                                                                                                     Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Servicename    State    Healthstatus    Details

 sql            ready    healthy         -
 hdfs           ready    healthy         -
 spark          ready    healthy         -
 control        ready    healthy         -
 gateway        ready    healthy         -
 app            ready    healthy         -


 Sql Services: ready                                                                                                                                                                                                 Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 master          ready    healthy         StatefulSet master is healthy
 compute-0       ready    healthy         StatefulSet compute-0 is healthy
 data-0          ready    healthy         StatefulSet data-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy


 Hdfs Services: ready                                                                                                                                                                                                Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 nmnode-0        ready    healthy         StatefulSet nmnode-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy
 sparkhead       ready    healthy         StatefulSet sparkhead is healthy


 Spark Services: ready                                                                                                                                                                                               Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 sparkhead       ready    healthy         StatefulSet sparkhead is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy


 Control Services: ready                                                                                                                                                                                             Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 controldb       ready    healthy         -
 control         ready    healthy         -
 metricsdc       ready    healthy         DaemonSet metricsdc is healthy
 metricsui       ready    healthy         ReplicaSet metricsui is healthy
 metricsdb       ready    healthy         StatefulSet metricsdb is healthy
 logsui          ready    healthy         ReplicaSet logsui is healthy
 logsdb          ready    healthy         StatefulSet logsdb is healthy
 mgmtproxy       ready    healthy         ReplicaSet mgmtproxy is healthy


 Gateway Services: ready                                                                                                                                                                                             Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 gateway         ready    healthy         StatefulSet gateway is healthy


 App Services: ready                                                                                                                                                                                                 Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 appproxy        ready    healthy         ReplicaSet appproxy is healthy

您也可以使用下列命令來取得更詳細的狀態:

azdata bdc control status show

範例輸出:

Control: ready                                                                                                                                                                                                      Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Resources: ready                                                                                                                                                                                                    Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 controldb       ready    healthy         -
 control         ready    healthy         -
 metricsdc       ready    healthy         DaemonSet metricsdc is healthy
 metricsui       ready    healthy         ReplicaSet metricsui is healthy
 metricsdb       ready    healthy         StatefulSet metricsdb is healthy
 logsui          ready    healthy         ReplicaSet logsui is healthy
 logsdb          ready    healthy         StatefulSet logsdb is healthy
 mgmtproxy       ready    healthy         ReplicaSet mgmtproxy is healthy
  • azdata bdc sql status show 會傳回具有 SQL Server 服務的所有資源健全狀態
azdata bdc sql status show

範例輸出:

Sql: ready                                                                                                                                                                                                          Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Resources: ready                                                                                                                                                                                                    Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 master          ready    healthy         StatefulSet master is healthy
 compute-0       ready    healthy         StatefulSet compute-0 is healthy
 data-0          ready    healthy         StatefulSet data-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy

重要

使用 --all 參數時,這些命令之輸出會包含 Kibana 和 Grafana 儀表板的 URL,以取得更詳細分析。

除了使用 Azure Data CLI (azdata),您也可以使用 Azure Data Studio 來尋找端點和狀態資訊。 如需使用 Azure Data CLI (azdata) 和 Azure Data Studio 來檢視叢集狀態的詳細資訊,請參閱如何檢視巨量資料叢集的狀態

連線至叢集

如需如何連線到巨量資料叢集的詳細資訊,請參閱使用 Azure Data Studio 連線到 SQL Server 巨量資料叢集

後續步驟

若要深入了解 SQL Server 巨量資料叢集部署,請參閱下列資源: