Slide 1

Slide 1 text

Copyright © 3-shake, Inc. All Rights Reserved. KubernetesでDBを動かしたい SRETT#7 株式会社スリーシェイク 中楯 直希

Slide 2

Slide 2 text

\du 2 株式会社スリーシェイク Sreake事業部 業務内容 - DBRE兼SRE見習い - クラウドもオンプレも分からない - Kubernetesも分からない - データベースも分からない - 自称データ雑用係 - DBAでもDBREでもデータエンジニアでも 興味あること - データベース関連ならなんでも 中楯 直希 @nnaka2992 @nnaka2992.bsky.social

Slide 3

Slide 3 text

“GKEでクリティカルなデータを用いるアプリを運用する顧客が 増加している。GKEクラスタで動くステートフルなアプリは2019 年以来指数関数的に増えている。” Akshay Ram 背景 3 Google Joins Data on Kubernetes Community https://dok.community/newsroom/google-joins-data-on-kubernetes-community/

Slide 4

Slide 4 text

データベースをKubernetes上で動かすことが 当たり前な世界になりつつある - MySQL - PostgreSQL - Oracle Database - NewSQL - MongoDB - Redis - etc… 背景 4

Slide 5

Slide 5 text

今回はZalando PostgreSQL Operatorで試す - PostgreSQLクラスタの作成やフェイルオーバー、スケーリングなど DB運用に必要なことは大抵 やってくれる - 性能監視にはGrafana/Prometheusなどを自前で準備する必要がある - Quickstartをなぞれば最低限動く Zalando PostgreSQL Operator 5

Slide 6

Slide 6 text

実際のManifest Zalando PostgreSQL Operator 6 kind: "postgresql" apiVersion: "acid.zalan.do/v1" metadata: name: "nnaka2992-performance-comparison-cluster" namespace: "default" labels: team: nnaka2992 spec: teamId: "nnaka2992" postgresql: version: "15" numberOfInstances: 1 volume: size: "5Gi" users: test: [] databases: test: test enableMasterLoadBalancer: true resources: requests: cpu: 4000m # 4vCPU memory: 15258Mi # 16GB limits: cpu: 4000m memory: 15258Mi

Slide 7

Slide 7 text

動作確認 Zalando PostgreSQL Operator 7 2023-10-12 01:06:21 ⌚ nnaka2992-Dev in ~/Dev/gcloud/nnaka2992-kube-poc/manifests ○ → kubectl get pods NAME READY STATUS RESTARTS AGE nnaka2992-performance-comparison-cluster-0 1/1 Running 0 176m postgres-operator-77f6d658c-wwrc6 1/1 Running 0 14h postgres-operator-ui-7bf9676b84-gb7fh 1/1 Running 0 14h # ここより下はProxyサーバ $ export PGPASSWORD=$(kubectl get secret test.nnaka2992-performance-comparison-cluster.credentials.postgresql.acid.zalan.do -o 'jsonpath={.data.password}' | base64 -d) $ host=$(kubectl get node -ojson | jq -r '.items[0].status.addresses[0].address') $ port=$(kubectl get svc nnaka2992-performance-comparison-cluster -ojson | jq -r '.spec.ports[0].nodePort') $ export PGSSLMODE=require $ psql -U test -h $host -p $port psql -U test -h $host -p $port psql (15.4 (Debian 15.4-2.pgdg110+1), server 15.2 (Ubuntu 15.2-1.pgdg22.04+1)) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Type "help" for help. test=> select schemaname as schema, viewname as name, 'view' as type from pg_views limit 3; schema | name | type ----------------+-------------------------+------ public | pg_stat_statements_info | view public | pg_stat_statements | view public | pg_stat_kcache_detail | view

Slide 8

Slide 8 text

ただ動かすだけでは芸がないのでCloud SQL(VM)と比較 Cloud SQL for PostgreSQLとの比較 8 Kubernetes(GKE)のスペック - IOPS <=4000(2000x2) - Throughput <= 26MB - CPU 4000m - Memory 15258MiB IOPSとThroughputはiostatからの推定値 Cloud SQLのスペック - IOPS <=4500(2250x2) - Throughput <= 36MB - CPU 4vCPU - Memory 16GB

Slide 9

Slide 9 text

注意 - 完璧な対象実験ではありません - 特にストレージ周りはとても適当です - 実行タイミングでそれぞれのパフォーマンスは変わります - なのでどちらのパフォーマンスが優れているかといったことを結論づけるものではありません Cloud SQL for PostgreSQLとの比較 9

Slide 10

Slide 10 text

ベンチマークにはpgbench TPC-Bを利用 DB on Kubernetesの利用にパフォーマンス面での問題は少なそう Cloud SQL for PostgreSQLとの比較 10

Slide 11

Slide 11 text

- DBをKubernetesで動かすのは難しくない - パフォーマンス劣化も少なさそう - EKSならストレージのIOPSも細かく制御できるからEKSでやるべきだった - ちゃんとpgbenchのコネクション数に合わせたスレッド数を設定してあげるべきだった まとめ 11

Slide 12

Slide 12 text

参考資料 12 - Google Joins Data on Kubernetes Community | Data on Kubernetes Comunity - https://dok.community/newsroom/google-joins-data-on-kubernetes-community/ - Postgres Operator - https://postgres-operator.readthedocs.io/en/latest/ - Quickstart | Postgres Operator - https://postgres-operator.readthedocs.io/en/latest/quickstart/ - PostgreSQLをKubernetes上で活用するための Operator紹介!(Cloud Native Database Meetup #3 発表資料) - https://www.slideshare.net/nttdata-tech/postgresql-kubernetes-operator-cloud-native-database-meetup-3-nttdata - Zalando Postgres Operatorの紹介 | SRA OSS Tech Blog - https://www.sraoss.co.jp/tech-blog/pgsql/zalando-postgres-operator/ - pgbench | PostgreSQL Documentation 16 - https://www.postgresql.org/docs/current/pgbench.html