Slide 1

Slide 1 text

データベースのオペレーターである CloudNativePGがStatefulSetを使わない理由に迫 る 株式会社スリーシェイク nnaka2992

Slide 2

Slide 2 text

\du 2 株式会社スリーシェイク Sreake事業部 Alias - nnaka2992 - nkDATE - 中楯直希 業務内容 - DBRE兼SRE見習い - 全人類にデータベースを好きになってもらうために 活動しています - 自称データ雑用係 - DBAでもDBREでもデータエンジニアでも 興味あること - DBをKubernetesにのせること - SREっぽいこと - データベース関連ならなんでも nnaka2992 @nnaka2992 @nnaka2992.bsky.social

Slide 3

Slide 3 text

アジェンダ 3 ● CloudNativePGの特徴 ● CloudNativePGがStatefulSetを利用しない件について (デモ) ● なぜStatefulSetを使わないのか ● 他オペレーターの対応 ● まとめ

Slide 4

Slide 4 text

CloudNativePGの概要 4 ● CloudNativePGはKubernetesでPostgreSQLの構築・運 用を楽にするオペレーター ○ Primary / Secondary構成を簡単に作れる ○ バックアップ・リストアの効率化 ○ 宣言的な設定管理 ○ レプリカクラスタの作成 ≒ RDS / Cloud SQLみたいなものをKubernetesで作れる ● コンテナイメージの作成が必要なものの幅広い拡張機能も サポート可能

Slide 5

Slide 5 text

CloudNativePGの概要 5 ● PostgreSQLオペレーターの中では現在もっとも勢いのあ るプロジェクト

Slide 6

Slide 6 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 6 ● ここではシンプルなデータベースクラスタ作成で紹介

Slide 7

Slide 7 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 7 ● 前提となるyamlファイル # example.yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-sample spec: instances: 3 storage: storageClass: standard-rwo size: 1Gi # CNPGのAPIを使う # 作成するリソース=DBクラスタ # リソースのメタデータ ## クラスタ名・関連リソースPrefix # クラスタ設定 ## インスタンス数 ## ストレージ設定 ### 利用するストレージ ### ストレージ容量

Slide 8

Slide 8 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 8 1. GKEクラスタを作成 > gcloud container clusters create --zone asia-northeast1-a cloud-native-pg-demo Creating cluster cloud-native-pg-demo in asia-northeast1-a… 後略

Slide 9

Slide 9 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 9 2. GKEクラスタにアクセス > gcloud container clusters get-credentials --zone asia-northeast1-a \ cloud-native-pg-demo Fetching cluster endpoint and auth data. kubeconfig entry generated for cloud-native-pg-demo. > kubectl get nodes NAME STATUS ROLES AGE VERSION gke-cloud-native-pg-demo-default-pool-c92911f6-d487 Ready 25m v1.31.5-gke.1023000 gke-cloud-native-pg-demo-default-pool-c92911f6-gt41 Ready 25m v1.31.5-gke.1023000 gke-cloud-native-pg-demo-default-pool-c92911f6-nwvs Ready 25m v1.31.5-gke.1023000

Slide 10

Slide 10 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 10 3. CloudNativePG オペレーターをインストール > kubectl apply --server-side -f \ https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.25/release s/cnpg-1.25.0.yaml namespace/cnpg-system serverside-applied 中略 validatingwebhookconfiguration.admissionregistration.k8s.io/cnpg-validating-webhook-configuration serverside-applied

Slide 11

Slide 11 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 11 4. PostgreSQL クラスタを作成 > kubectl apply -f example.yaml cluster.postgresql.cnpg.io/cluster-sample created > kubectl get all -l cnpg.io/cluster=cluster-sample

Slide 12

Slide 12 text

CloudNativePGがStatefulSetを利用しない件について (デモ) 12 4. PostgreSQL クラスタを作成 > kubectl apply -f example.yaml cluster.postgresql.cnpg.io/cluster-sample created > kubectl get all -l cnpg.io/cluster=cluster-sample StatefulSetがいない!!!

Slide 13

Slide 13 text

なぜStatefulSetを使わないのか 13 ● PostgreSQLではPrimary / Secondaryで異なる設定項目が あるため単純なStatefulSetでは複雑になる ○ Primaryの設定にSecondaryのサーバ名の設定 ○ SecondaryにはPrimaryの接続情報の設定 ○ etc… ● StatefulSetではPVCのリサイズをサポートしていない ● 複数のPVC間での整合性を保ちにくい ○ WALとPGDATAを異なるPVCに保存している ● ノードのアップグレード時のPodの挙動を制御する必要があ る ○ Pod / PVCを削除して他のノードで作り直すのか? ○ ノードの再起動を待つ方がいいのか? https://www.postgresql.jp/document/16/html/runtime-config-replication.html

Slide 14

Slide 14 text

他オペレーターの対応 14 ● zalando/postgres-operator ○ PrimaryもSecondaryも同じStatefulSetを利用 ● CrunchyData/postgres-operator ○ PrimaryとSecondaryで異なるStatefulSetを利用 ● Timescale (非公開) ○ PodとPVCをオペレーターで管理する ■ (CloudNativePGと同じ) ● Altinity/clickhouse-operator ○ DBインスタンス毎にStatefulSetをカスタムしたCRDを利用する 情報があいまいです。嘘ついていたらごめんなさい

Slide 15

Slide 15 text

まとめ 15 ● CloudNativePGをつかうとKubernetesでのPostgreSQL 利用が楽になる ● CloudNativePGはStatefulSetを使っていない ● DBオペレーターは ○ StatefulSetを使っているものもあれば ○ StatefulSetをカスタムして使っているものもあれば ○ Pod / PVCを個別で管理しているもののある ● ほかオペレーターの調査に NotebookLMに資料作成手伝ってもらいましたが便利ですね ● オペレーターの挙動確認に KHIを使ってますがとても助かっています

Slide 16

Slide 16 text

おまけ 16 ● この資料でCloudNativePGに興味を持った方は下記の資 料も見てみてください ○ CloudNativePGを布教したい ■ https://speakerdeck.com/nnaka2992/cloudnativepgwobu-jiao-sitai ○ CloudNativePGがCNCF Sandboxプロジェクトになったぞ! ■ https://speakerdeck.com/nnaka2992/cloudnativepggacncf-sandboxpuroziekutoninatutazo-clou dnativepgnoshi-zu-minoshao-jie

Slide 17

Slide 17 text

参考 17 ● Custom Pod Controller | CloudNativePG v1.25 ○ https://cloudnative-pg.io/documentation/1.25/controller/ ● 20.6. レプリケーション | PostgreSQL 16.4文書 ○ https://www.postgresql.jp/document/16/html/runtime-config-replication.html ● zalando/postgres-operator: Postgres operator creates and manages PostgreSQL clusters running in Kubernetes ○ https://github.com/zalando/postgres-operator ● Detailed Architecture | Crunchy Postgres for Kubernetes ○ https://access.crunchydata.com/documentation/postgres-operator/latest/architecture ● High Availability | Crunchy Postgres for Kubernetes ○ https://access.crunchydata.com/documentation/postgres-operator/latest/tutorials/day-two/high-availa bility ● Replacing StatefulSets With a Custom K8s Operator in Our Postgres Cloud Platform | Timescale ○ https://www.timescale.com/blog/replacing-statefulsets-with-a-custom-k8s-operator-in-our-postgres-cl oud-platform#designing-an-alternative-to-statefulsets ● Adventures in Data- Leaning on Kubernetes Storage to Run Hundreds of Real-Time Analytic Databases ○ https://www.youtube.com/watch?v=ogN_DOHJTIY