Kubernetes ツールを使用して Azure Arc で有効になっている SQL Managed Instance をデプロイする

この記事では、Kubernetes ツールを使用して Azure Arc 用の Azure SQL Managed Instance をデプロイする方法について説明します。

前提条件

データ コントローラーが既に作成されている必要があります。

Kubernetes ツールを使用して SQL マネージド インスタンスを作成するには、Kubernetes ツールがインストールされている必要があります。 この記事の例では kubectl を使用しますが、Kubernetes ダッシュボード、ochelm などの Kubernetes の他のツールや Kubernetes yaml/json を使い慣れている場合は、それらのツールでも同様のアプローチを使用できます。

kubectl ツールをインストールする

概要

SQL Managed Instance を作成するには、次の手順を行います。

  1. システム管理者のログインとパスワードを安全に格納するための Kubernetes シークレットを作成する
  2. SqlManagedInstance カスタム リソース定義に基づいて、SQL Managed Instance カスタム リソースを作成する

これらの両方の項目を yaml ファイルで定義します。

yaml ファイルを作成する

テンプレート yaml ファイルを出発点として使用して、独自のカスタム SQL マネージド インスタンスの yaml ファイルを作成します。 このファイルをローカル コンピューターにダウンロードし、テキスト エディターで開きます。 yaml ファイルの構文の強調表示とリンティングがサポートされている VS Code などのテキスト エディターを使用します。

Note

2022 年 2 月のリリースより、バックアップ用に ReadWriteMany (RWX) 対応のストレージ クラスを指定する必要があります。 アクセス モードの詳細についてご確認ください。 バックアップにストレージ クラスが指定されていない場合は、Kubernetes の既定のストレージ クラスが使用されます。 既定が RWX 対応ではない場合、SQL Managed Instance のインストールが失敗するおそれがあります。

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/v12
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 でエンコードされた文字列として格納されます。1 つはユーザー名、1 つはパスワード用です。 システム管理者のログインとパスワードを base64 でエンコードし、プレースホルダーの場所 data.passworddata.username に配置する必要があります。 テンプレートで使用されている <> の記号は含めないでください。

Note

最適なセキュリティを実現するため、ログインに値 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 とコアの制限および要求のリソース要件を変更できます。

Note

詳細については、Kubernetes リソースのガバナンスに関する記事を参照してください。

リソースの制限と要求の要件:

  • コア数の制限値は、課金のために必要です。
  • それ以外のリソースの要求と制限は省略可能です。
  • コア数の制限と要求を指定する場合は、正の整数値にする必要があります。
  • コア数の要求を指定する場合は、少なくとも 1 コアを指定する必要があります。
  • メモリ値の形式は、Kubernetes の表記に従います。
  • メモリ要求には、少なくとも 2 GB が必要です (指定されている場合)。
  • 一般的なガイドラインとして、運用環境のユース ケースの場合は、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 マネージド インスタンスの作成が完了するまでに数分かかります。 次のコマンドを使用して、別のターミナル ウィンドウで進行状況を監視できます。

Note

次のコマンド例では、sql1 という名前の SQL マネージド インスタンスと、arc という名前の Kubernetes 名前空間が作成されていることを前提としています。 名前空間または SQL マネージド インスタンスに異なる名前を使用している場合は、arcsqlmi をお使いの名前に置き換えることができます。

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

特定のポッドの作成状態を確認することもできます。 kubectl describe pod ... を実行します。 このコマンドを使用して、問題のトラブルシューティングを行います。 次に例を示します。

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

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

デプロイの問題に関するトラブルシューティング

デプロイで問題が発生した場合は、トラブルシューティング ガイドを参照してください。

Azure Arc で有効な SQL Server Managed Instance に接続する