Kubernetes ツールを使用して、Azure Arc により有効化された SQL Managed Instance をデプロイする
この記事では、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 などのテキスト エディターを使用します。
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.password
と data.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 マネージド インスタンスに異なる名前を使用している場合は、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
デプロイの問題に関するトラブルシューティング
デプロイで問題が発生した場合は、トラブルシューティング ガイドを参照してください。