使用 Kubernetes 工具建立已啟用 Azure Arc 的 SQL 受控實例

本文示範如何使用 Kubernetes 工具部署適用于 Azure Arc 的 Azure SQL 受控實例。

必要條件

您應該已經建立 資料控制器

若要使用 Kubernetes 工具來建立 SQL 受控實例,您必須安裝 Kubernetes 工具。 本文中的範例會使用 kubectl ,但類似的方法可以搭配其他 Kubernetes 工具使用,例如 Kubernetes 儀表板、, ochelm 如果您熟悉這些工具和 Kubernetes yaml/json。

安裝 kubectl 工具

概觀

若要建立 SQL 受控實例,您需要:

  1. 建立 Kubernetes 秘密,以安全地儲存系統管理員登入和密碼
  2. 根據 SqlManagedInstance 自訂資源定義建立 SQL 受控實例自訂資源

在 yaml 檔案中定義這兩個專案。

建立 yaml 檔案

使用 範本 yaml 檔案作為起點,以建立您自己的自訂 SQL 受控實例 yaml 檔案。 將此檔案下載到本機電腦,並在文字編輯器中開啟它。 使用 VS Code 之類的文字編輯器,可支援 yaml 檔案的語法醒目提示和 Linting。

注意

從 2022 年 2 月版本開始, ReadWriteMany 必須針對備份指定 (RWX) 可用的儲存類別。 深入瞭解 存取模式。 如果未針對備份指定任何儲存體類別,則會使用 Kubernetes 中的預設儲存體類別。 如果預設值不是 RWX,SQL 受控實例安裝可能不會成功。

範例 yaml 檔案

請參閱下列 yaml 檔案範例:

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: sql1-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v5
kind: SqlManagedInstance
metadata:
  name: sql1
  annotations:
    exampleannotation1: exampleannotationvalue1
    exampleannotation2: exampleannotationvalue2
  labels:
    examplelabel1: examplelabelvalue1
    examplelabel2: examplelabelvalue2
spec:
  dev: true #options: [true, false]
  licenseType: LicenseIncluded #options: [LicenseIncluded, BasePrice].  BasePrice is used for Azure Hybrid Benefits.
  tier: GeneralPurpose #options: [GeneralPurpose, BusinessCritical]
  security:
    adminLoginSecret: sql1-login-secret
  scheduling:
    default:
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer
  storage:
    #backups:
    #  volumes:
    #  - className: azurefile # Backup volumes require a ReadWriteMany (RWX) capable storage class
    #    size: 5Gi
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    datalogs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

自訂登入和密碼

Kubernetes 秘密會儲存為 base64 編碼字串-一個用於使用者名稱,另一個用於密碼。 您必須將系統管理員登入和密碼編碼為 base64,並將其放在 和 data.username 的預留位置位置 data.password 。 請勿在 < 範本中包含 提供的 和 > 符號。

注意

為了獲得最佳安全性,登入 不允許使用 值 sa 。 遵循 密碼複雜度原則

您可以使用線上工具來將所需的使用者名稱和密碼編碼為 base64,也可以根據您的平臺使用內建 CLI 工具。

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

自訂名稱

範本具有 name 屬性的 值 sql1 。 您可以變更此值,但必須包含遵循 DNS 命名標準的字元。 您也必須變更要符合的秘密名稱。 例如,如果您將 SQL 受控實例的名稱變更為 sql2 ,則必須將秘密的名稱從 sql1-login-secret 變更為 sql2-login-secret

自訂資源需求

您可以視需要變更資源需求 - RAM 和核心限制和要求。

注意

您可以深入瞭解 Kubernetes 資源控管

資源限制和要求的需求:

  • 需要核心限制 值才能計費
  • 其餘的資源要求和限制都是選擇性的。
  • 如果指定,核心限制和要求必須是正整數值。
  • 如果指定,核心要求至少需要 1 個核心。
  • 記憶體值格式遵循 Kubernetes 標記法。
  • 如果指定,記憶體要求至少需要 2 Gi。
  • 一般指導方針是,針對生產環境使用案例,每個 1 個核心都應該有 4 GB 的 RAM。

自訂服務類型

如有需要,服務類型可以變更為 NodePort。 將會指派隨機埠號碼。

自訂儲存體

您可以自訂儲存體的儲存體類別,以符合您的環境。 如果您不確定有哪些儲存體類別可用,請執行 命令 kubectl get storageclass 來檢視它們。

範本的預設值為 default

例如:

storage:
    data:
      volumes:
      - className: default 

這個範例表示有名為 default 的儲存類別,而不是有預設的儲存類別。 您也可以選擇性地變更儲存體的大小。 如需詳細資訊,請參閱儲存體設定

建立 SQL 受控實例

既然您已自訂 SQL 受控實例 yaml 檔案,您可以執行下列命令來建立 SQL 受控實例:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\sqlmi.yaml

監視建立狀態

建立 SQL 受控實例需要幾分鐘的時間才能完成。 您可以使用下列命令,監視另一個終端機視窗中的進度:

注意

下列範例命令假設您已建立名為 sql1 的 SQL 受控實例,以及名為 arc 的 Kubernetes 命名空間。 如果您使用不同的命名空間/SQL 受控實例名稱,則可以以您的名稱取代 arcsqlmi

kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc

您也可以檢查任何特定 Pod 的建立狀態。 執行 kubectl describe pod ...。 使用此命令對任何問題進行疑難排解。 例如:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/sql1-0 --namespace arc

針對部署問題進行疑難排解

如果您在部署時遇到問題,請參閱 疑難排解指南

後續步驟

連線到已啟用 Azure Arc 的 SQL 受控執行個體