この記事では、Kubernetes ツールを使用して Azure Arc 用の Azure SQL Managed Instance をデプロイする方法について説明します。
前提条件
データ コントローラーが既に作成されている必要があります。
Kubernetes ツールを使用して SQL マネージド インスタンスを作成するには、Kubernetes ツールがインストールされている必要があります。 この記事の例では kubectl を使用しますが、Kubernetes ダッシュボード、oc、helm などの Kubernetes の他のツールや Kubernetes yaml/json を使い慣れている場合は、それらのツールでも同様のアプローチを使用できます。
概要
SQL Managed Instance を作成するには、次の手順を行います。
- システム管理者のログインとパスワードを安全に格納するための Kubernetes シークレットを作成する
-
SqlManagedInstanceカスタム リソース定義に基づいて、SQL Managed Instance カスタム リソースを作成する
これらの両方の項目を yaml ファイルで定義します。
yaml ファイルを作成する
テンプレート yaml ファイルを出発点として使用して、独自のカスタム SQL マネージド インスタンスの yaml ファイルを作成します。 このファイルをローカル コンピューターにダウンロードし、テキスト エディターで開きます。 yaml ファイルの構文の強調表示とリンティングがサポートされている VS Code などのテキスト エディターを使用します。
注意
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.password と data.username に配置する必要があります。 テンプレートで使用されている < と > の記号は含めないでください。
注意
最適なセキュリティを実現するため、ログインに値 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 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 マネージド インスタンスの作成が完了するまでに数分かかります。 次のコマンドを使用して、別のターミナル ウィンドウで進行状況を監視できます。
注意
次のコマンド例では、sql1 という名前の SQL マネージド インスタンスと、arc という名前の Kubernetes 名前空間が作成されていることを前提としています。 名前空間または SQL マネージド インスタンスに異なる名前を使用している場合は、arc と sqlmi をお使いの名前に置き換えることができます。
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
デプロイの問題に関するトラブルシューティング
デプロイで問題が発生した場合は、トラブルシューティング ガイドを参照してください。