SQL Server on Kubernetes Designing and Building a Modern Data Platform という SQL Server on Kubernetes (k8s) に特化した書籍が発売されました。
ざっと一通り目を通したのですが、Windows エンジニアが、Linux 上に k8s の複数ワーカーノードの環境を一から作成して、操作を行うというような流れとなっており、SQL Server のエンジニアが k8s を学習を始めるのに適している書籍ではないかと思います。
私の場合は、Windows Server 2019 がインストールされている環境がいくつかりますので、Azure Stack HCI 検証方法 Tips に記載しているような、Windows Server 上に AKS on Azure Stack HCI を構築して検証を行っていますが、この環境でも書籍内の操作は問題なく行うことができました。
書籍内には、https://www.centinosystems.com/blog/category/kubernetes/ の記事も参照されており、こちらも併せて読むとよさそうです。
k8s 上に展開した SQL Server を Deploymentの更新 で最新バージョンに更新する流れや、NFS を使用した PVC の作成などにも触れられており、単純に Pod を展開する以外のスキルも身に着けることができます。
NFS のマウントオプションについては触れられていなかったので、What are the NFS mount options for databases on NetApp? / Oracle DatabaseのNFSバッファ・サイズ・パラメータの構成 あたりをマウントオプションの参考にするのもよさそうですね。
Service については、LoadBarancer ではなく NodePort を使用するようになっていますので、MetalLB も別に学習するとよいかもしれません。
SQL Server と k8s の組み合わせについては、SQL Server 2017 でコンテナー版の SQL Server の提供が開始された時から情報の公開が始まり、Big Data Cluster (BDC) / Azure Arc Enabled SQL Managed Instance で、k8s に最適化された SQL Server ベースの環境が提供され、いくつかのドキュメントが公開されています。
本投稿では、SQL Server on Kubernetes について、MS から提供されているドキュメントについて記載しておこうと思います。
SQL Server を単体で動作させるもの / Big Data Cluster / Arc Enabled SQL MI / Azure SQL Edge といくつかの利用形態を k8s 上で使用するための情報が公開されています。
Contents
学習用コンテンツ
これから k8s を学習しようとした際には、次のようなコンテンツが提供されています。
内容については AKS 向けとなっていますが、汎用的な内容が多く含まれていますので一読しておくとよいのではないでしょうか。
Big Data Cluster / Azure Arc Enabled SQL Managed Instance は、単一ではなく、複数のコンテナーが Pod に展開される形で起動が行われます。
DB 以外にモニタリング用のツール (collectd / fluentbit) がサイドカーとして動作する形となっていますので、次のデザインパターンも確認しておくとよいのではないでしょうか。
SQL Server
k8s 上で動作する SQL Server ベースの環境のおおもとになるのが、通常の SQL Server になるかと思いますので、SQL Server の基本情報からコンテナーで SQL Server を動作させる際の情報を把握しておくことも重要です。
SQL Server のコンテナーについては Vin Yu 氏が情報を発信されていますので氏の GitHub / ブログ と Microsoft の次のリポジトリもになります。
ドキュメント
コンテナーイメージ
- https://mcr.microsoft.com/v2/mssql/server/tags/list
- https://mcr.microsoft.com/v2/mssql/rhel/server/tags/list
Windows Server コンテナー版 SQL Server
Update- Beta program for SQL Server on Windows container is suspended. でアナウンスが行われましたが、SQL Server on Windows Container については、ベータプログラムが中止され、Docker Hub からのイメージ提供も行われなくなるようです。
SQL Server on Container は、SQL Server on Linux て提供が行われることになります。(SQL Server on Linux のコンテナーイメージは今回のアナウンスの影響を受けることはなく、継続して開発/提供が行われます)
k8s の Windows ノード は何に使うんだろうと思っている派なので、Windows コンテナー版の SQL Server の提供が中止されても、特に問題はないとは思うのですが。
非 root コンテナー
SQL Server 2019 以降のコンテナーイメージは、デフォルトで非 root コンテナーとして起動しているはずですが、SQL Server 2017 のコンテナーイメージついては root コンテナーとして起動していたはずですので、以下の情報も確認しておくとよいのではないでしょうか。
モニタリング
冒頭で紹介した、SQL Server on Kubernetes Designing and Building a Modern Data Platform ではサイドカーパターンではありませんが、k8s 上に展開した SQL Server のモニタリングとして、telegraf / fluent-bit を Pod として展開する方法についても触れられています。(BDC / Azure Arc については、collectd / fluent-bit が使用されています)
これをもとにしてサイドカーとして Pod に機能を注入する方法を勉強するのもよさそうですね。
AlwaysOn 可用性グループ
SQL Server の 2019 のプレビュー時代には、AlwaysOn 可用性グループを構築するためのオペレーターが提供されていたのですが、こちらは Preview 機能で終了しており、GA には含まれませんでした。
自分で AlwaysOn を k8s 上に構築することはもちろん可能ですが、自動フェールオーバーを可能にするための仕組みについては自前で実装しなくてはいけません。
SQL Server 2019 時点では、k8s 上で AlwaysOn 可用性グループによる HA 環境を構築する場合には Big Data Cluster または、Azure Arc Enabled SQL Managed Instance を使用することになるのではないでしょうか。
Big Data Cluster (BDC)
SQL Server を k8s 上に展開してデータ分析基盤を構築する際に活用できるのが Big Data Cluster であり、リリースから 1 年以上経過していますので、SQL Servr on k8s としては、Big Data Cluster が一番情報がまとまっているかもしれません。
ドキュメント
コンテナーイメージ
Dynamic Storage Provisioning
BDC や、Azure Arc Enabled SQL Managed Instance では Dynamic Provisioning が可能な Storage Class を使用する必要があったかと思います。
そこで、以前、よく確認していたのが、setup-bdc.sh です。
このシェルの中には、local-storage-provisioner.yaml を使用した Local Storage Provisioner の展開方法が載っていましたので、手元に構築した k8s のストレージとして、この方法で展開したものを活用していました。
Dynamic Provisioning が可能な検証用ストレージについては、次のような情報も確認しておくとよさそうですね。
- Quay.io のリポジトリ
- kubernetes-sigs のリポジトリ
今は AKS on Azure Stack HCI を使用していますので Storage については VHDX を使用した動的プロビジョナーが使用でき、Local Storage は使用していないのですが、上記の内容は以前検証していた際にはとても重宝しました。
Azure Arc Enabled SQL Managed Instance
Azure Arc Enabled SQL Managed Instance は、k8s 上での動作に最適化された SQL Server です。
Big Data Cluster よりシンプルな構成でありながら、AlwaysOn 可用性グループによる可用性環境も構築できますので、SQL Server を k8s で動作させる際の情報を追うのには、この利用形態の情報はとても参考になります。
ドキュメント
コンテナーイメージ
- https://mcr.microsoft.com/v2/arcdata/arc-sqlmi/tags/list
- https://mcr.microsoft.com/v2/arcdata/arc-controller/tags/list
Azure SQL Edge
Azure SQL Edge は IoT 向けの SQL Server ベースのデータベースエンジンとなります。
x64 の CPU だけでなく、ARM 64 での動作もサポートされていますので Raspberry Pi 4 上で SQL Server を動作させることもできますので、Raspberry Pi で構築した k8s 上で使用することも可能です。
IoT Edge ハブを使用したストリーミングプロセスにも対応していますので、幅広く活用できるかと。
[…] https://blog.engineer-memo.com/2021/08/11/sql-server-on-kubernetes-%e3%81%ae-ms-%e6%8f%90%e4%be%9b%e… […]
【後で読みたい!】SQL Server on Kubernetes の MS 提供ドキュメント | Tak's Bar
13 8月 21 at 23:24