Kubernetes クラスタで SQL Server コンテナを動かしてみよう

Microsoft Japan Data Platform Tech Sales Team

森本 信次

Linux 版 SQL Server の Docker コンテナ対応によって 過去のブログ でもご紹介したように、高いポータビリティや柔軟性の恩恵を十分に得ることが出来るとお伝えしましたが、Docker コンテナの普及とともに、コンテナをクラスタ化した際の運用管理ツールの重要性も高まってきています。そこで今回 はコンテナの運用管理機能を提供する Kubernetes を Azure Container Service (AKS) の Managed Kubernetes クラスター環境で SQL Server を 以降 ステップバイステップで動かしてみたいと思います。

1. Azure Portal から Red Hat Enterprise 7.3 の仮想マシンを作成します。
今回 仮想マシンの OS として Red Hat Enterprise を使用していますが、SUSE などお好みの Linux を選択頂いても構いません。

2. 任意の SSH クライアントを使用して 作成した仮想マシンに接続します。
例えば Windows環境でよく使われる ssh クライアントとしては 「PuTTY」などがあり、インストールについてはこちらが参考となるかと思います。

3. Azure CLI 2.0 をインストールします。 Azure CLI 2.0 は Python で作成されたクロスプラットフォームツールで、以降の手順ではこのツールを使って作業を進めていきます。こちらの “Install with yum package manager” セクションを参考にこのツールをインストールしてください。

4. リソースプロバイダーを登録します。
--- 以下のログインコマンドを実行、 表示された URL を任意のブラウザからアクセスし、同じく表示されたコードを入力します。
#az login k8s_device_login_01
任意のブラウザから 表示された URL にアクセスします。
k8s_device_login_02
login コマンド実行後に画面に表示されたコードを入力して続行します。
k8s_device_login_03

--- Azure Container Service (AKS) は現時点ではプレビューのためフラグのセットが必要となります。
--- ssh クライアントに戻り以下のコマンドを実行します。
#az provider register -n Microsoft.ContainerService

--- フラグが有効になっているかは、以下コマンドで確認可能です。 ”Registered” と表示されていれば OK です。
#az provider show -n Microsoft.ContainerService k8s_deploy_03

5. Kubernetes クラスターを作成します。
---- リソースグループを米国中央リージョンに作成します、”Succeeded” と表示されていれば OK です。
#az group create --name ApResourceGroup1 --location centralus k8s_deploy_05 リソースグループが作成され コンテナのサービス (管理) というリソースが追加されているのが確認できます。 k8s_deploy_rg

-- 次に以下コマンドを実行して 2 ノードを含む クラスターを作成します。
#az aks create --resource-group ApResourceGroup1 --name mySQLK8sCluster1 --node-count 2 --generate-ssh-keys
なお、Azure Kubernetes Services の管理コマンド az aks の詳細についてはこちらをご参照ください。 k8s_deploy_06
作成したリソースグループに関連するオブジェクトが生成されています。

6. Kubernetes クラスタ内にコンテナをスピンアップします。
--- SQL Server の配置について詳しく説明するマニフェストを  yaml ファイル ( sqlserver.yml ) は、今回のご紹介で実際に使用した ファイルを用意しておきましたので、こちらからダウンロード後 sqlserver.yml にリネームしてご使用ください。 SQL Server の sa アカウントのパスワードなどは nano などの任意のテキストエディタで適宜変更ください。
#nano sqlserver.yml

--- Kubernetes クラスタを管理するためのコマンドラインツール kubectl をインストールします。
#az aks install-cli

--- ローカルのシェルを作成したクラスターに接続します。
#az aks get-credentials --resource-group ApResourceGroup1 --name mySQLK8sCluster1
--- こちらを参考に kubectl をインストールします。

--- SQL Server コンテナを作成、正常に作成されたかをチェックします。
#kubectl create -f sqlserver.yml
#kubectl get pods

--- コンテナのデプロイ後、状況をチェックします。
#kubectl get service k8s_deploy_14

7. SQL Server Management Studio (SSMS) を使用して SQL Server に接続します。
上図の sqlserver-service の EXTERNAL-IP 列に表示されている IPアドレスと YAMLファイルで指定したポート番号と SA のパスワードを指定して接続します。サーバー名のフィールドに 13.67.141.246,1433 という風に指定します。
k8s_ssms_01

SQL Server に接続後は、データベース、テーブルなどの作成、SQL(DML, DDL)の実行など通常のデータベース操作が可能であることが確認できます。 k8s_ssms_07

8. 最後に今回作成したすべてのオブジェクトを削除します。
#az group delete --name ApResourceGroup1

最後にエンタープライズ領域でもコンテナ技術を適用する機会はどんどん増えてきています。特に開発環境を複数(大量に)準備しないといけないような場合、Azure Container Service を活用いただくことで、開発者とシステム管理者の双方にメリットがある柔軟な対応が可能なシステムを実現することが出来ます。