如何在 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 提供具備動態佈建的內建儲存類別。 您可以在部署設定檔中自訂儲存類別 (
default
或managed-premium
)。 內建設定檔會使用default
儲存類別。 - 若正在以使用
kubeadm
所部署的 Kubernetes 叢集上進行部署,則您將需要確定針對所需規模的叢集具備了足夠儲存體,且該儲存體已經設定且可供使用。 若要自訂儲存體的使用方式,建議在繼續前先執行此操作。 請參閱在 Kubernetes 上使用 SQL Server 巨量資料叢集的資料持續性。
安裝 SQL Server 2019 巨量資料工具
部署 SQL Server 2019 巨量資料叢集之前,請先安裝巨量資料工具:
- Azure Data CLI (
azdata
) kubectl
- Azure Data Studio
- 適用於 Azure Data Studio 的資料虛擬化延伸模組
- Azure CLI,如果部署至 AKS 的話
部署概觀
大部分的巨量資料叢集設定都定義於 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 命名空間,請務必了解這一點。
自訂組態
您也可以自訂部署來容納正在規劃執行的工作負載。 您無法在巨量資料叢集服務部署後變更規模 (複本數目) 或儲存體設定,因此請務必謹慎規劃部署設定,以避免發生容量問題。 若要自訂部署,請遵循下列步驟:
從符合您 Kubernetes 環境的其中一個標準部署設定檔開始。 您可以使用
azdata bdc config list
命令來將其列出:azdata bdc config list
若要自訂部署,請使用
azdata bdc config init
命令來建立部署設定檔的複本。 例如,下列命令會在名為custom
的目標目錄中建立aks-dev-test
部署設定檔複本:azdata bdc config init --source aks-dev-test --target custom
提示
--target
會根據--source
參數來指定包含設定檔 (bdc.json
和control.json
) 的目錄。若要在您的部署組態設定檔中自訂設定,您可以在適用於編輯 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 修補檔案。 如需詳細資訊,請參閱設定巨量資料叢集資源和服務的部署設定。
將自訂設定檔傳遞至
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 (15.x) CU 5 開始,當您使用基本驗證部署新的叢集時,所有端點 (包括閘道) 都會使用 AZDATA_USERNAME 和 AZDATA_PASSWORD 。 升級至 CU 5 的叢集上的端點會繼續使用 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 (15.x) CU 5 開始,當您使用基本驗證部署新的叢集時,所有端點 (包括閘道) 都會使用 AZDATA_USERNAME
和 AZDATA_PASSWORD
。 升級至 CU 5 的叢集上的端點會繼續使用 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
。
取出端點
成功完成部署指令碼之後,您可以使用下列步驟來取得巨量資料叢集的外部端點位址。
部署之後,可從部署標準輸出來尋找控制器端點的 IP 位址,或查看下列
kubectl
命令的外部 IP 輸出來尋找該位址:kubectl get svc controller-svc-external -n <your-big-data-cluster-name>
提示
如果您未在部署期間變更預設名稱,則在上一個命令中使用
-n mssql-cluster
。mssql-cluster
是巨量資料叢集的預設名稱。使用 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
是巨量資料叢集名稱。 如果未在登入命令中指定,系統會提示您提供認證。執行 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 會傳回與控制管理服務建立關聯的所有元件健全狀態
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 巨量資料叢集部署,請參閱下列資源: