快速入門:在 Azure 上部署 SQL Server 容器叢集
適用於:SQL Server - Linux
本快速入門示範如何在 Azure Kubernetes Service (AKS) 或 Red Hat OpenShift 上具有永續性儲存體的容器中設定高可用性 SQL Server 執行個體。 如果 SQL Server 執行個體失敗,則會在新的 Pod 中自動重新建立協調器。 叢集服務還可針對節點失敗提供復原能力。
本快速入門使用下列命令列工具來管理叢集。
叢集服務 | 命令列工具 |
---|---|
Azure Kubernetes Service (AKS) | kubectl (Kubernetes CLI) |
Azure Red Hat OpenShift | oc (OpenShift CLI) |
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Kubernetes 叢集。 如需有關使用
kubectl
在 AKS 中建立和連線至 Kubernetes 叢集的詳細資訊,請參閱部署 Azure Kubernetes Service (AKS) 叢集。注意
為了防止節點失敗,Kubernetes 叢集需要一個以上的節點。
Azure CLI。 若要安裝最新版本,請參閱如何安裝 Azure CLI。
建立 SA 密碼
系統管理員 (sa
) 帳戶必須使用強密碼來保護。 您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
在 Kubernetes 叢集中建立
sa
密碼。 Kubernetes 可以管理敏感性設定資訊,例如作為 Secret 的密碼。若要在 Kubernetes 中建立名為
mssql
的祕密,以保存MSSQL_SA_PASSWORD
的值<password>
,請執行下列命令。 將取代<password>
為您的複雜密碼。重要
SA_PASSWORD
環境變數已被取代。 請改用MSSQL_SA_PASSWORD
。kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
建立儲存體
Kubernetes 叢集中的資料庫必須使用永續性儲存體。 您可以在 Kubernetes 叢集中使用下列步驟設定永續性磁碟區和永續性磁碟區宣告:
建立資訊清單,以定義儲存體類別和永續性磁碟區宣告。 資訊清單會指定儲存體佈建程式、參數和回收原則。 Kubernetes 叢集會使用這個資訊清單來建立永續性儲存體。
下列 YAML 範例會定義儲存類別和永續性磁碟區宣告。 儲存類別佈建程式是
azure-disk
,因為此 Kubernetes 叢集位於 Azure 中。 儲存體帳戶類型為Standard_LRS
。 永續性磁碟區宣告名為mssql-data
。 永續性磁碟區宣告中繼資料包含可將其連接回儲存體類別的注釋。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azure-disk provisioner: kubernetes.io/azure-disk parameters: storageaccounttype: Standard_LRS kind: Managed --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mssql-data annotations: volume.beta.kubernetes.io/storage-class: azure-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi
儲存檔案 (例如
pvc.yaml
)。在 Kubernetes 中建立永續性磁碟區宣告,其中
<path to pvc.yaml file>
是您儲存檔案的位置:kubectl apply -f <path to pvc.yaml file>
系統會自動將永續性磁碟區建立為 Azure 儲存體帳戶,並繫結至永續性磁碟區宣告。
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" created
驗證永續性磁碟區宣告,其中
<persistentVolumeClaim>
是永續性磁碟區宣告的名稱:kubectl describe pvc <persistentVolumeClaim>
在先前的步驟中,永續性磁碟區宣告名為
mssql-data
。 若要查看永續性磁碟區宣告的相關中繼資料,請執行下列命令:kubectl describe pvc mssql-data
所傳回中繼資料包含名為
Volume
的值。 這個值會對應至 Blob 的名稱。Name: mssql-data Namespace: default StorageClass: azure-disk Status: Bound Volume: pvc-d169b88e-f26d-11e7-bc3e-0a58ac1f09a4 Labels: ‹none> Annotations: kubectl.kubernetes.io/last-applied-configuration-{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta. kubernetes.io/storage-class":"azure-disk"},"name":"mssq1-data... pv.kubernetes.io/bind-completed-yes pv.kubernetes.io/bound-by-controller=yes volume.beta.kubernetes.io/storage-class=azure-disk volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/azure-disk Capacity: 8Gi Access Modes: RWO Events: <none>
磁碟區的值會比對 Azure 入口網站 中 Blob 名稱的一部分。
驗證永續性磁碟區。
kubectl describe pv
kubectl
會傳回永續性磁碟區 (之前由系統自動建立並繫結至永續性磁碟區宣告) 的相關中繼資料。
建立部署
裝載 SQL Server 執行個體的容器被描述為 Kubernetes「部署物件」。 部署會建立「複本集」。 複本集會建立 Pod。
您可建立資訊清單,以根據 SQL Server mssql-server-linux Docker 映像來描述容器。
- 資訊清單會參考
mssql-server
永續性磁碟區宣告,以及您已套用至 Kubernetes 叢集的mssql
Secret。 - 資訊清單也會描述服務。 此服務是負載平衡器。 負載平衡器可確保在 SQL Server 執行個體復原之後,IP 位址會持續保留。
- 資訊清單描述了資源「要求」和「限制」。 這些內容都是基於最低系統需求。
建立資訊清單 (YAML 檔案) 來描述部署。 下列為描述部署的範例,包括以 SQL Server 容器映像為基礎的容器。
apiVersion: apps/v1 kind: Deployment metadata: name: mssql-deployment spec: replicas: 1 selector: matchLabels: app: mssql template: metadata: labels: app: mssql spec: terminationGracePeriodSeconds: 30 hostname: mssqlinst securityContext: fsGroup: 10001 containers: - name: mssql image: mcr.microsoft.com/mssql/server:2022-latest resources: requests: memory: "2G" cpu: "2000m" limits: memory: "2G" cpu: "2000m" ports: - containerPort: 1433 env: - name: MSSQL_PID value: "Developer" - name: ACCEPT_EULA value: "Y" - name: MSSQL_SA_PASSWORD valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD volumeMounts: - name: mssqldb mountPath: /var/opt/mssql volumes: - name: mssqldb persistentVolumeClaim: claimName: mssql-data --- apiVersion: v1 kind: Service metadata: name: mssql-deployment spec: selector: app: mssql ports: - protocol: TCP port: 1433 targetPort: 1433 type: LoadBalancer
將上述程式碼複製到名為
sqldeployment.yaml
的新檔案中。 更新下列值:MSSQL_PID
value: "Developer"
:設定容器以執行 SQL Server Developer 版本。 Developer 版本未獲授權用於生產環境資料。 如果部署是供生產環境使用,請設定適當的版本 (Enterprise
、Standard
或Express
)。 如需詳細資訊,請參閱如何授權 SQL Server。persistentVolumeClaim
:此值需要使用與永續性磁碟區宣告所用名稱對應的claimName:
項目。 本教學課程使用mssql-data
。name: MSSQL_SA_PASSWORD
:設定容器映射以設定sa
密碼,如本節中所定義。valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD
當 Kubernetes 部署容器時,它會參考名為
mssql
的 Secret,以取得密碼的值。securityContext
:定義 Pod 或容器的權限和存取控制設定。 在此情況下,將會在 Pod 層級指定此值,因此所有容器都會遵守該資訊安全內容。 在資訊安全內容中,我們會使用值10001
來定義fsGroup
,該值是mssql
群組的群組識別碼 (GID)。 這個值表示容器的所有流程也是補充 GID10001
(mssql
) 的一部分。/var/opt/mssql
磁碟區擁有者和在該磁碟區中建立的任何檔案都會是 GID10001
(mssql
群組)。
警告
藉由使用
LoadBalancer
服務類型,您可以在連接埠 1433 遠端存取 (透過網際網路) SQL Server 執行個體。儲存檔案。 例如:
sqldeployment.yaml
。建立部署,其中
<path to sqldeployment.yaml file>
是您儲存檔案的位置:kubectl apply -f <path to sqldeployment.yaml file>
您已建立部署和服務。 SQL Server 執行個體所在的容器已連線至永續性儲存體。
deployment "mssql-deployment" created service "mssql-deployment" created
您已建立部署和服務。 SQL Server 執行個體所在的容器已連線至永續性儲存體。
若要檢視 Pod 的狀態,請鍵入
kubectl get pod
。NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17m
Pod 的狀態為
Running
。 此狀態表示容器已就緒。 建立部署之後,可能需要幾分鐘的時間才能顯示 Pod。 因為叢集是從 Microsoft 成品登錄提取 mssql-server-linux 映像,所以導致延遲。 第一次提取映像之後,如果部署抵達的節點中已經快取映像,則後續部署可能會更快速。驗證服務是否正在執行。 執行以下命令:
kubectl get services
此命令會傳回正在執行的服務,以及服務的內部和外部 IP 位址。 記下
mssql-deployment
服務的外部 IP 位址。 使用此 IP 位址連接到 SQL Server。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 52m mssql-deployment LoadBalancer 10.0.113.96 52.168.26.254 1433:30619/TCP 2m
如需 Kubernetes 叢集中物件狀態的詳細資訊,請執行下列命令。 請記得將
<MyResourceGroup>
和<MyKubernetesClustername>
取代為您的資源群組和 Kubernetes 叢集名稱:az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
您還可以執行下列命令來驗證容器是否以非根身分執行,其中
<nameOfSqlPod>
是您 SQL Server Pod 的名稱:kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
如果您執行
whoami
,就可以看到使用者名稱是否為mssql
。mssql
是非根使用者。whoami
連接到 SQL Server 執行個體
您可以使用 sa
帳戶和服務的外部 IP 位址,從 Azure 虛擬網路外部與應用程式連線。 使用您設定為 OpenShift 祕密的密碼。
您可以使用下列應用程式來連接到 SQL Server 執行個體。
使用 sqlcmd 連線
若要使用 sqlcmd
連線,請執行下列命令。
sqlcmd -S <External IP address> -U sa -P "<password>"
取代為mssql-deployment
服務的 IP 位址,並以<password>
您的複雜密碼取代 <External IP address>
。
警告
您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
驗證失敗和復原
若要驗證失敗和復原,您可以使用下列步驟刪除 Pod:
列出執行 SQL Server 的 Pod。
kubectl get pods
記下執行 SQL Server 的 Pod 名稱。
刪除 Pod。
kubectl delete pod mssql-deployment-0
mssql-deployment-0
即為上一個步驟傳回的 Pod 名稱值。
Kubernetes 會自動重新建立 Pod,以復原 SQL Server 執行個體,並連線到永續性儲存體。 使用 kubectl get pods
來驗證是否已部署新的 Pod。 使用 kubectl get services
來驗證新容器的 IP 位址是否相同。
清除資源
如果您不打算進行後續教學課程,請清除不必要的資源。 使用 az group delete
命令來移除資源群組、容器服務及所有相關資源。 將 <MyResourceGroup>
取代為包含您的叢集的資源群組名稱。
az group delete --name <MyResourceGroup> --yes --no-wait