#kichijojipm Database on Kubernetesのお話(短縮版)

Cd891a89dfec6ca7bd278b5f5bd87c90?s=47 tzkoba
August 02, 2019

#kichijojipm Database on Kubernetesのお話(短縮版)

CNDTで話した内容のRecapです。15分用。

Cd891a89dfec6ca7bd278b5f5bd87c90?s=128

tzkoba

August 02, 2019
Tweet

Transcript

  1. 2.

    2 自己紹介  名 前: Takahiro Kobayashi  職 種:

    DBを中心としたインフラエンジニア  好 物: 速いDB、太い帯域、小さなレイテンシ  出没する場所 Oracle、PostgreSQL、Kubernetesなどの勉強会
  2. 3.

    3 PostgreSQL on Kubernetes、色々やってます CloudNativeDays Tokyo 2019 Cloud Native Storageが拓く

    Database on Kubernetesの未来 PGConf.Asia 2019 @Bali Building PostgreSQL as a Service with Kubernetes  + =∞
  3. 4.

    4 アジェンダ 1. そもそもKubernetesって何? 2. Kubernetes上でデータベースを動かす際の課題 3. Database on Kubernetesの検証

     HAパターン  Replication(Operator)パターン 4. DBプラットフォームとしてのKubernetes
  4. 7.

    7 Kubernetes=コンテナ・オーケストレーター コンテナ コンテナ コンテナ コンテナ コンテナ • 軽量VMであるコンテナを良い感じに管理してくれる。 特徴として以下がある。

    • 宣言的設定  構築手順を定めるのではなく、 状態を定義する。 • 自己修復  上記の状態に自動で復旧 • Immutable  Drop & Create  PetではなくCattle
  5. 8.

    8 Kubernetesはデータベースに不向き? Node Node Node Master Slave Replicate • DBやSDSは、K8sで扱うには向いていないとされてきた。

    特徴が足枷に。 • 宣言的設定 • 自己修復  一貫性を担保するために、リカ バリ手順が必要  起動順序などが問われるケース もある • Immutable  データ消失はありえない  ペット的な扱いが必要
  6. 10.

    11 Compute Control plane Data plane Kubernetesから使える2種類のストレージ Controler Controler •

    K8sがストレージのどこまでを管理する/できるかで違いがある。 Kubernetes Ready Kubernetes Native
  7. 12.

    13 Kubernetesの本質は分散システム • K8sクラスタはetcdを中心とした分散システムとして構築される。 • つまりノードが未応答の際に、 – ネットワーク分断? – プロセス(kubelet)障害?

    – ノード障害? どれに該当するか、判断が難しい。 • ディスクリソースがattachされて いれば、その状態も把握する必要 がある。 永続ボリュームを利用する workloadが嫌われる理由はこれ。 FailOver?
  8. 14.

    15 分散システムへの対応① HA構成におけるFencing VIP Linux-HA Controller Controller << 状態不明なマスターが発生したら>> ①

    強制的にノードの電源落とす i. プロセスを確実に停止 ii. ストレージのマウントを外す iii. VIPを外す ② その上で別ノードでリソースを 獲得して、マスターを起動 ※強制電源断はHWベンダ提供の管理ポートや クラウドAPIを通して行われる。 • 障害ノードをフェンスで囲うこと(隔離) =Fencing
  9. 15.

    16 分散システムへの対応② Replicationにおけるリーダー選出 WAL データは最新、 リーダーに選出。 他はスレーブ。 • 複数候補から常に1台のマスタ を選出

    • 元マスタが復帰後もスレーブに なっていることを通知する <<状態不明なマスタが発生したら>> ① 残ったスレーブから1台の リーダーを選出する ② 選出されたらマスターへ昇格 ③ 復帰ノードはスレーブになる • アルゴリズムとしてはPaxos、Raftなどが有名。 マスタ スレーブ
  10. 17.

    18 HA構成パターン(i): Replicas:1 • PostgreSQLはStatefulSet、PVとしてRook/Cephを用いる。 • DBもストレージも全て K8sで管理するHA構成 • 共有ディスクはCeph

    • kube-fencingでNode 障害時のFencing << 課題 >> • 複雑すぎるCeph • ネットワーク越しのIO による性能劣化 kube-fencing
  11. 18.

    19 HA構成パターン(ii): Replicas:1 kube-fencing • LINSTORがProvisioning/AttachするDRBDボリュームを用いる。 • DBもストレージも全て K8sで管理するHA構成 •

    DRBDでデータ冗長化 • シンプル • ReadはローカルIO、 性能面でCephに優る << 課題 >> • スケール上限あり
  12. 20.

    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等にスナップショット の保存が可能
  13. 23.

    24 DB/Storage プラットフォームとしてのKubernetes DBaaS by Kubernetes STaaS by Kubernetes <<DBaaSの基本要素>>

    • HA • Replication • DB Operator <<STaaSの基本要素>> • シンプルな冗長化 • 分散ストレージ • 互換性の高いIF(CSI) • “Platform for Platforms”として、K8sが各Serviceを支える。