<Sample> <Slide>
太田 智行
Walkmanと同い年
データベース技術ひと筋
SQL on Linux のアーキテクチャ
Linux向けにポーティングされたものではない
“SQLPAL”により長年稼働してきたWindowsコードを共有
SQL Platform Abstraction Layer
(SQLPAL)
RDBMS SSIS SSAS SSRS
Windows Linux
Windows Host Ext.
Linux Host
Extension
SQL Platform Abstraction Layer
(SQLPAL)
Host extension mapping to OS system calls
(IO, Memory, CPU scheduling)
Win32-like APIsSQL OS API
SQL OS v2
All other systems
System resource & latency
sensitive code paths
on Linux
on Container
on Kubernetes
Popular and Commonly Used
Portable, Lightweight, Immutable, Efficient
Orchestration, Scalable, Self Healing
lib
app
lib
app
lib
app
lib
app
lib
app
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
課題
• HWパワーが足りなければイチカラ組みなおし。逆にHWが暇でも部分返品不可。
• 対応OSが異なるアプリを動かしたければ別途HW調達から必要。
課題解決:HW仮想化により都度のHW調達を削減
• 仮想マシンに割りあてるHWパワーを増減可能
• 必要OSが異なるなら別途仮想サーバーをたてればよい(HW調達不要)
• OSレベルの可搬性が生まれた(新しい仮想基盤への引っ越しが可能)
HW削減
lib
app
lib
app
lib
app
lib
app
lib
app
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
さらなる課題
• 仮想サーバ内部の負荷凸凹をもっと最適化できないものか(仮想サーバを減らしOS分の
オーバーヘッドをカットしたい)
• HW調達&移設の問題は根本解決に至っていない(仮想基盤HWのパワー不足、パワー余剰)
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
HW削減
lib
app app app
lib lib
app
lib
app
lib
課題解決:アプリに可搬性を持たせ集積度を高めることでサーバを削減
• OSを含まないので可搬性が高く起動も早い≒必要な時に”どこかのリソース”を
使って稼働させるという考え方
• サーバ(OS)削減&HW削減、OSへのパッチ当てなどサーバ運用コスト削減
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
HW削減
app
lib
app
lib
app
liblib
app app
lib
← サーバ(OS)削減(4->2)
lib
app
lib
app
lib
app
lib
app
lib
app
HW削減
lib
app app app
lib lib
app
lib
app
lib
HW削減
app
lib
app
lib
app
liblib
app app
lib
← サーバ(OS)削減(4->2)
リ
ソ
ー
ス
利
用
効
率
向
上
仮想化を選択するケース例
• 独立性が高い(OSを共有するコンテナに比較し有事他者影響が小さい)
• OSが選択可能(コンテナはOSに依存するため例えばWindows用に構成された
コンテナを稼働させるにはWindowsが必要)
HW削減
lib
app app
lib
app
lib
app
lib
app
lib
HW削減
app
lib
app
lib
app
liblib
app app
lib
← サーバ(OS)削減(4->2)
課題解決:アプリに可搬性を持たせることで集積度を高めるサーバを削減
• OSを含まないので可搬性が高く起動も早い≒必要な時に”どこかのリソース”を
使って稼働させる
• OS稼働分のHWリソース削減、OSへのパッチ当てなどサーバ運用コスト削減
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
HW削減
app
lib
app
lib
app
liblib
app app
lib
← サーバ(OS)削減(4->2)
さらなる課題
• “どこかのリソース(最適なアプリの起動場所)”の判断、アプリ起動・停止、アプリ監視・
リカバリを瞬時に行うことは困難。
• 未だHW調達&移設の問題は根本解決に至っていない(コンテナ基盤HWのパワー不足、パワー余剰)。
アプリを
動かしたい
ライブラリ
入手
サーバ(OS)
構築
HW
調達
HW削減
app
lib
app
lib
app
liblib
app app
lib
app
liblib
app app
lib
Kubernetes 開発貢献 Top10
https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&var-period_name=Last%20year&var-metric=contributions
機能 概説
スケジューリング
とサービスディスカバリー
コンテナアプリケーション(Pod)の要件やその配置
先となるノードの状態を踏まえて最適なリソース配置
を動的に行う。またその所在を管理・提供する。
セルフヒーリング プロセス監視やヘルスチェックを行い、異常を検知し
た際は宣言コードで定義されたシステムの形を維持す
るよう自己修復を行う。
スケーリング 負荷に応じてシステムに必要なPod数(≒処理パ
ワー)のスケールアウトを行う(自動スケールアップ
機能はアルファ段階)。
ロードバランシング 分散配置されたコンテナアプリケーションのロードバ
ランスに対応したエンドポイントを提供する(Podス
ケールにも対応)
YAML形式で記述した宣言コード
API
server
replication, namespace,
serviceaccounts, etc.
Controller
manager scheduler
KVS(etcd)
Master
Worker(Node)
kubelet kube-proxy
Docker
Pod Pod
Containers Containers
Worker(Node)
Docker
Pod Pod
kubelet kube-proxy
Containers Containers
概説
Master クラスタの司令塔となるノード
API Server K8sを管理するためのREST API
Scheduler Podのスケジューリングを制御
Contoller
Manager
クラスタのセルフヒーリングを
制御
KVS(etcd) クラスターに関わる情報を格納
Worker Podを動作させるワーカーノード
Pod
スケジューリングの最小単位と
なるコンテナアプリケーション
Pod内には1つ以上のコンテナが
定義可能
kubelet
API serverを通じてMasterと通信
しNode内を制御
kube-proxy 通信制御
kubectl
manifest
K8s内部構造
API
server
Master
Worker
kubelet
kubectl 概説
リ
ソ
ー
ス
管
理
create リソースの定義、manifestに従ったリソースの定義
delete リソースの破棄、manifestに従ったリソースの破棄
apply manifestに従ったリソース定義
set/patch 設定値の更新
edit エディタを使用した設定値の更新
diff クラスタが保持する情報と該当manifestとのdiffを確認
情
報
取
得
cluster-info クラスタ情報の取得
get リソース情報の取得
describe リソース詳細情報の取得
top NodeたPodのリソース使用の取得
logs 該当コンテナのログの取得
操
作
exec 該当コンテナでコマンド実行
cp 該当コンテナのファイルのコピー
メ
ン
テ cordon/uncordon 該当Nodeをスケジュール対象外/対象とする
drain 該当Node内のPodを退避
kubectl
manifest
kubectl
Worker
kubelet
~/.kube/config
https://kubernetes.io/docs/reference/kubectl/overview/
API
server
Master
Worker
kubelet
kubectl
manifest
manifest ⚫ クラスタで動かすコンテナやNW、ロードバランサなどの
各種リソースを定義
➢ フォーマットはYAML(本家推奨) もしくは JSON
⚫ kubectlを通じてクラスタへ渡す
➢ Masterは受け取った定義をetcdで管理
Worker
kubelet
etcd
apiVersion: apps/v1 #APIのバージョン
kind: Deployment #リソースの種類
metadata:
name: mssql-deployment #リソースの名前
spec: #リソースの詳細(種類に応じた詳細設定)
replicas: 1
template:
metadata:
labels:
app: mssql
spec:
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2019-latest
< manifestファイルの基本構造 >
https://kubernetes.io/docs/reference/#api-reference
カテゴリ 解説 リソース
Workload クラスタ上で実行させるワーク
ロードに関連するリソース群
Pod, ReplicaSet, Deployment, DaemonSet,
StatefulSet, Job, CronJob
Discovery /
LoadBalancer
クラスタ上で提供するサービス
へのエントリポイントを提供す
るリソース群
Service( ClusterIP, ExternalIP, NodePort,
LoadBalancer, Headless, ExternalName, None-
Selecor ), Ingress
Config /
Storage
設定や永続ボリュームに関連す
るリソース群
Secret, ConfigMap, PersistentVolumeClainm
Cluster セキュリティやクォータに関連
するリソース群
Node, Namespace, PersistentVolume,
ResourceQuota, ServiceAccount, Role,
ClusterRole, RoleBinding, ClusterRoleBinding,
NetworkPolicy
Metadata 各種リソース制御に関連するリ
ソース群
LimitRange, HorizontalPodAutoscaler,
PodDescriptionBudget,
CustomResourceDefinition
Pod 一つ以上のコンテナをグルーピングしたものでデプロイの最小単位。IPア
ドレスはPod単位で割り当てられるためPod内のコンテナはNW的に分離
されておらずIPアドレスを共有する。
ReplicaSet 指定された数のPodレプリカの作成と維持(セルフヒーリング、スケーリ
ング)を行う。
DaemonSet ReplicaSetの特殊系。単一ノードに単一Podの作成維持を行う。
StatefuleSet ReplicaSetの特殊系。DBなどのステートフルなコンテナ用にデータ永続化
するための仕組みを持つ。
Deployment ReplicaSetを履歴管理し新旧のReplicaSetを徐々に増減させることでロー
リングアップデートやロールバックなどを行う。
Job コンテナを利用したバッチ処理の実行管理を行う。
CronJob スケジューリングされたJob実行管理を行う。
Service-ClusterIP クラスタ内で利用可能な仮想IP。クラスタ内でのロードバランサとして機
能する。
Service-ExternalIP クラスタ外からの疎通を提供する。指定したNodeのIP:Portで受信したト
ラフィックをコンテナに転送する。
Service-NodePort クラスタ外からの疎通を提供する。ExternalIPと異なりすべてのNodeの
IP:Portで受信したトラフィックをコンテナに転送する。
Service-LoadBalancer クラスタ外のLB用の仮想IPを提供する。
Node PodやJobを実行するためのコンピューティングリソースとなるワーカー
サーバ
Namespace 共有環境としてのK8sクラスタをPJ単位など論理的に分割するためのリ
ソース。RBACやResourceQuota、NetworkPolicyの範囲指定単位にもなる。
PersistentVolume データ永続化のための外部のストレージサービスをアタッチするための
リソース
https://kubernetes.io/docs/concepts/storage/persistent-
volumes/#types-of-persistent-volumes
Secret パスワードなどの機密情報をセキュアに管理するためのリソース。ただ
しSecretを定義するマニュフェストが暗号化されることはないため、そ
れをGitリポジトリ等に格納する際にはkubesec(OSS)を活用し暗号化
するのが望ましい。
ConfigMap 設定等のユーザ情報をKeyValueで管理するためのリソース。
PersistentVolumeClaim PersistentVolumeの利用を宣言するためのリソース。
Persistent Volume
User
Node
Pod
SQL Server
Node
Load Balance
Service
Node
Pod
SQL Server
Pod
SQL Server
AG
Pod
Operator
Pod
Load balancer
Pod
SQL Server
primary
AG agent
Pod
Load balancer
Pod
SQL Server
secondary
AG agent
Pod
SQL Server
secondary
AG agent
SQL Server
primary
SQL Server
secondary
Data Virtualization
ODBC NoSQL RDBMS Big Data
重複するストレージコスト
データパイプラインの構築と維持
データコピーに伴う鮮度劣化
セキュリティリスクの増大
ETL時のデータ品質問題の組み込み
ガバナンス制御の複雑化
Data
Virtualization
Big Data Cluster
2016 2025
16 ZBs 163 ZBs
of data was generated of data will generated
*IDC White Paper, Data Age 2025: The Evolution of Data to Life-Critical
Model
& serve
Store
Storage Pool
(HDFS)
Data Pool(Scale-out
SQL Data Mart)
Ingest
SQL Server
Integration
Services
Prep
& train
SQL Server
ML Services
Master
instance
Master instance
(SQL Server)
REST API
containers
for models
Big Data Cluster
パッケージングされたAIプラットフォーム
パッケージングされた構築済みAIプラットフォーム
Kubernetes だけでは 足りないもの
セキュリティを損なわずにインフラストラクチャ管理の手間を節約し迅速に更新プログラムを展開
• インフラストラクチャの自動化
プロビジョニング、パッチ、
アップグレードをシンプルに
• コンテナー化されたアプリ開発
と CI/CD ワークフローのため
のツール群
• セキュリティ、ガバナンス、ID
およびアクセス管理をサポート
するサービス
IDE container
support
Registry
supporting
Helm
CI/CD
Monitoring
Microservice
debugging
NetworkingVirtual machines
Security Governance Identity
Source code
repository<>
Kubernetes
Storage Data
Infrastructure automation
Managed Kubernetes Service
Amazon Elastic
Kubernetes Service
Google
Kubernetes Engine
Microsoft Azure
Kubernetes Service
⇒ on Google Cloud Platform
⇒ on Microsoft Azure Platform
⇒ on Amazon Web Services Platform
Kubernetes the hard way
API server
Controller
ManagerScheduler
etcd
Store
Cloud
Controller
Self-managed master node(s)
• 自動更新、自動パッチ
Automated upgrades, patches
• 高信頼性、高可用性
High reliability, availability
• 簡単でセキュアなクラスタスケール
Easy, secure cluster scaling
• 自己回復
Self-healing
• API サーバーモニタリング
API server monitoring
• 無料
At no charge
Customer VMs
App/
workload
definitionUser
Docker
Pods
Docker
Pods
Docker
Pods
Docker
Pods
Docker
Pods
Schedule pods over
private tunnel
Kubernetes
API endpoint
Azure managed control plane
Azure Container Instances
サーバーレス コンテナー環境
GPU 対応のコンテナがサポート
az container create ¥
-g aci_grp ¥
--name nginx ¥
--image library/nginx ¥
--ip-address public ¥
–cpu 2 --memory 5
 ACI Connector for Kubernetes により、Kubernetes クラスターがコン
テナーをACIに直接展開可能。必要に応じて VM と ACI を混在可能
Virtual Kubelet: Kubernetes から ACI を利用
Kubernetes
control pane
Application
architect
Infrastructure
architect
Azure Container Instances (ACI)
ACI
Connector
Pod
Pod Pod
Pod
Pod Pod
Pod
Pod Pod
Pod
Pod Pod
VM VM
VM VM
Deployment/
tasks
Pod Pod Pod Pod Pod
Pod Pod Pod Pod Pod
Pod Pod Pod Pod Pod
Pod Pod Pod Pod Pod
Pod Pod Pod Pod Pod
WasteWaste
WasteWaste PodPod
PodPod
https://github.com/virtual-
kubelet/virtual-kubelet
on Linux
on Container
on Kubernetes
Popular and Commonly Used
Portable, Lightweight, Immutable, Efficient
Orchestration, Scalable, Self Healing
SQL Server runs anywhere !
3rd party
Cloud
SQL Database
Managed Instance
SQL
Database
Kubernetes
Service
SQL Server
on Azure VM
SQL Server
Database
Migration Service
SQL Data
Warehouse
3rd
On-Premises
Cloud
OpenShiftKubernetesContainerLinuxWindows

SQL Server エンジニア のための コンテナ入門(k8s編)