Slide 1

Slide 1 text

Cloud Native Storageが拓く Database on Kubernetesの未来 吉祥寺.pm #19 2019/8/2 @tzkb

Slide 2

Slide 2 text

2 自己紹介  名 前: Takahiro Kobayashi  職 種: DBを中心としたインフラエンジニア  好 物: 速いDB、太い帯域、小さなレイテンシ  出没する場所 Oracle、PostgreSQL、Kubernetesなどの勉強会

Slide 3

Slide 3 text

3 PostgreSQL on Kubernetes、色々やってます CloudNativeDays Tokyo 2019 Cloud Native Storageが拓く Database on Kubernetesの未来 PGConf.Asia 2019 @Bali Building PostgreSQL as a Service with Kubernetes  + =∞

Slide 4

Slide 4 text

4 アジェンダ 1. そもそもKubernetesって何? 2. Kubernetes上でデータベースを動かす際の課題 3. Database on Kubernetesの検証  HAパターン  Replication(Operator)パターン 4. DBプラットフォームとしてのKubernetes

Slide 5

Slide 5 text

5 1. そもそもKubernetesって何?

Slide 6

Slide 6 text

6 Kubernetesを知っていますか? 「おれがKubernetesだ。」 「Kubernetes、完全に理解した。」 「Kubernetes、なにもわからない。」

Slide 7

Slide 7 text

7 Kubernetes=コンテナ・オーケストレーター コンテナ コンテナ コンテナ コンテナ コンテナ • 軽量VMであるコンテナを良い感じに管理してくれる。 特徴として以下がある。 • 宣言的設定  構築手順を定めるのではなく、 状態を定義する。 • 自己修復  上記の状態に自動で復旧 • Immutable  Drop & Create  PetではなくCattle

Slide 8

Slide 8 text

8 Kubernetesはデータベースに不向き? Node Node Node Master Slave Replicate • DBやSDSは、K8sで扱うには向いていないとされてきた。 特徴が足枷に。 • 宣言的設定 • 自己修復  一貫性を担保するために、リカ バリ手順が必要  起動順序などが問われるケース もある • Immutable  データ消失はありえない  ペット的な扱いが必要

Slide 9

Slide 9 text

10 Storageにも色々あるけれど • CNCFという団体で定めたLandscapeにStorageも沢山。 • ただ、今までのストレージと何が違うのか分かりづらい。

Slide 10

Slide 10 text

11 Compute Control plane Data plane Kubernetesから使える2種類のストレージ Controler Controler • K8sがストレージのどこまでを管理する/できるかで違いがある。 Kubernetes Ready Kubernetes Native

Slide 11

Slide 11 text

12 2. Kubernetes上で データベースを動かす際の課題

Slide 12

Slide 12 text

13 Kubernetesの本質は分散システム • K8sクラスタはetcdを中心とした分散システムとして構築される。 • つまりノードが未応答の際に、 – ネットワーク分断? – プロセス(kubelet)障害? – ノード障害? どれに該当するか、判断が難しい。 • ディスクリソースがattachされて いれば、その状態も把握する必要 がある。 永続ボリュームを利用する workloadが嫌われる理由はこれ。 FailOver?

Slide 13

Slide 13 text

14 解はあるのか?DBアーキテクトは知っている。 • 状態がわからないなら、安全側に倒して 処理を継続させたら良いんじゃない? • 共有リソースをつくらなければ 良いんじゃない? • それってクラスタリングでは昔から やっていることだよね。

Slide 14

Slide 14 text

15 分散システムへの対応① HA構成におけるFencing VIP Linux-HA Controller Controller << 状態不明なマスターが発生したら>> ① 強制的にノードの電源落とす i. プロセスを確実に停止 ii. ストレージのマウントを外す iii. VIPを外す ② その上で別ノードでリソースを 獲得して、マスターを起動 ※強制電源断はHWベンダ提供の管理ポートや クラウドAPIを通して行われる。 • 障害ノードをフェンスで囲うこと(隔離) =Fencing

Slide 15

Slide 15 text

16 分散システムへの対応② Replicationにおけるリーダー選出 WAL データは最新、 リーダーに選出。 他はスレーブ。 • 複数候補から常に1台のマスタ を選出 • 元マスタが復帰後もスレーブに なっていることを通知する <<状態不明なマスタが発生したら>> ① 残ったスレーブから1台の リーダーを選出する ② 選出されたらマスターへ昇格 ③ 復帰ノードはスレーブになる • アルゴリズムとしてはPaxos、Raftなどが有名。 マスタ スレーブ

Slide 16

Slide 16 text

17 3. Database on Kubernetesの検証

Slide 17

Slide 17 text

18 HA構成パターン(i): Replicas:1 • PostgreSQLはStatefulSet、PVとしてRook/Cephを用いる。 • DBもストレージも全て K8sで管理するHA構成 • 共有ディスクはCeph • kube-fencingでNode 障害時のFencing << 課題 >> • 複雑すぎるCeph • ネットワーク越しのIO による性能劣化 kube-fencing

Slide 18

Slide 18 text

19 HA構成パターン(ii): Replicas:1 kube-fencing • LINSTORがProvisioning/AttachするDRBDボリュームを用いる。 • DBもストレージも全て K8sで管理するHA構成 • DRBDでデータ冗長化 • シンプル • ReadはローカルIO、 性能面でCephに優る << 課題 >> • スケール上限あり

Slide 19

Slide 19 text

20 (参考)SDS別のベンチマーク結果 シングル構成(EBS) Rook/Ceph DRBD 1インスタンス 5インスタンス 2インスタンス 100 37.8 77.1 • pgbenchによる簡易ベンチマークでは以下のような差が出た。 TPS

Slide 20

Slide 20 text

21 Replicationパターン(Operator): • KubeDBはPostgreSQLに限らず、様々なDBを扱えるOperator。 kubedb-operator -0 -1 -2 postgres snapshot dormantdabases • KubeDBでは – PostgreSQL – MySQL – Redis 等のCRDが準備済。 • kubedb-operatorが PostgreSQLのSRを構成。 • SnapshotのCRDもあり、 バックアップ・リストア が可能。 S3等にスナップショット の保存が可能

Slide 21

Slide 21 text

22 4. DBプラットフォームとしてのKubernetes

Slide 22

Slide 22 text

23 ここまで見てきたこと  DBクラスタリングをKubernetes Nativeで行うことに ついては、SDSやFencingなど部品が揃いつつある。  Replication構成をK8s化する試みは続いており、 Operatorを利用してDBAタスクを自動化する流れが 生まれてきている。  しかし、それで終わりではない(かも知れない)。 Cloud Native Storage + + = ???

Slide 23

Slide 23 text

24 DB/Storage プラットフォームとしてのKubernetes DBaaS by Kubernetes STaaS by Kubernetes <> • HA • Replication • DB Operator <> • シンプルな冗長化 • 分散ストレージ • 互換性の高いIF(CSI) • “Platform for Platforms”として、K8sが各Serviceを支える。

Slide 24

Slide 24 text

Building PostgreSQL as a Service with Kubernetes PGConf.Asia 2019 2019/9/9 @tzkb

Slide 25

Slide 25 text

26 Questions? @tzkb @tzkoba