Movatterモバイル変換


[0]ホーム

URL:


CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)

CloudNativePGを動かしてみた!~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)2022年7月29日NTTデータ技術開発本部 先進コンピューティング技術センタ加藤 健

Embed presentation

© 2022 NTT DATA CorporationCloudNativePGを動かしてみた!~PostgreSQL on Kubernetes~2022年 7月 29日 第34回PostgreSQLアンカンファレンス@オンライン株式会社NTTデータ 技術開発本部加藤 健
© 2022 NTT DATA Corporation 2自己紹介加藤 健【経歴】• PostgreSQLの研究開発+サポート• 社会人2年目• PostgreSQL歴 1年• Kubernetes歴 半年【これまでのPostgreSQLアンカンファレンス】• 第29回「OSS-DB Gold 合格体験記」
© 2022 NTT DATA Corporation 3PostgreSQL OperatorとはPostgreSQL Operatorを使うことで、Kubernetes上にPostgreSQLを簡単に構築できる。Kubernetes上でPostgreSQLを動かすことにより、様々な運用管理を自動化できる。KubernetesモニタリングPostgreSQL PostgreSQLPostgreSQLバックアップ ログ管理HA構成 HA構成
© 2022 NTT DATA Corporation 4PostgreSQL Operator 一覧Kubernetes上での運用が注目され始めており、様々な企業/コミュニティがPostgreSQL Operatorを提供している。今回は、最近リリースされたばかりのCloudNativePGについて調査する。• CloudNativePG (旧称 Cloud Native PostgreSQL)• Zalando Postgres Operator• Crunchy Data PostgreSQL Operator• StackGres• Stolon• KubeDB• Vmware Tanzu SQL with PostgreSQL for Kubernetes
© 2022 NTT DATA Corporation 5CloudNativePGとはCloudNativePGは、PostgreSQL専業ベンダーであるEnterpriseDBが開発し、OSSとして公開されている。EDB PostgreSQL for Kubernetesは、CloudNativePGをベースに一部機能を追加して提供されている。メイン開発企業 EnterpriseDB初回リリース 2022年4月最新バージョン 1.16.0対応PostgreSQLメジャーバージョンPostgreSQL 10+ライセンス Apache License 2.0スター数 366コントリビュータ数 23商用サポート EDB PostgreSQL for Kubernetesメイン実装言語 Go
© 2022 NTT DATA Corporation 6CloudNativePGのアーキテクチャCloudNativePGではクライアントからのリクエストをServiceで受け、Podに割り振る。Operator(図中のcnpg-controller-manager)がPodの配置、状態を管理する。Client Requestcluster-example-rw(Service)Client Requestcluster-example-ro(Service)cnpg-controller-manager (Deployment)cluster-example-1(Pod)postgres(Container)cluster-example-2(Pod)postgres(Container)cluster-example-3(Pod)postgres(Container)カスタムリソースの定義に従って管理
© 2022 NTT DATA Corporation 7確認項目現時点で最新バージョンであるCloudNativePG v1.16.0を動かしてみる。今回の環境として、minikube v1.25.2を使用する。以下の項目について確認する。• CloudNativePGデプロイ• PostgreSQLクラスタ作成• PostgreSQLインスタンスへの接続確認• 同期レプリケーション確認• 自動フェールオーバー• ローリングアップデート
© 2022 NTT DATA Corporation 8CloudNativePGデプロイCloudNativePGをデプロイする方法は2つ: ①マニフェストを使用する ②Helm Chartを使用する今回は①の方法でCloudNativePGをデプロイする。1. 既に用意されているOperatorのマニフェストを使用し、CloudNativePGをデプロイする。$ kubectl apply -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.16/releases/cnpg-1.16.0.yaml2. CloudNativePGがデプロイされたか確認する。$ kubectl get deployments –n cnpg-systemNAME READY UP-TO-DATE AVAILABLE AGEcnpg-controller-manager 1/1 1 1 52s
© 2022 NTT DATA Corporation 9PostgreSQLクラスタ作成 (1/2)CloudNativePGの機能を使えば、簡単にHA構成のクラスタを作成できる。今回はプライマリx1、同期スタンバイx1 非同期スタンバイx1の3台構成とする。$ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-example #クラスタ名spec:instances: 3 #インスタンス数imageName: ghcr.io/cloudnative-pg/postgresql:14.3 #イメージの指定minSyncReplicas: 1 #同期レプリケーションの最小数maxSyncReplicas: 1 #同期レプリケーションの最大数primaryUpdateStrategy: unsupervised #アップデート時のプライマリの挙動storage:size: 1Gi #ストレージサイズ1. マニフェストに設定を定義する。
© 2022 NTT DATA Corporation 10PostgreSQLクラスタ作成 (2/2)CloudNativePGの機能を使えば、簡単にHA構成のクラスタを作成できる。今回はプライマリx1、同期スタンバイx1 非同期スタンバイx1の3台構成とする。$ kubectl apply –f cluster-example.yamlcluster.postgresql.cnpg.io/cluster-example created$ kubectl get allNAME READY STATUS RESTARTS AGEpod/cluster-example-1 1/1 Running 0 71spod/cluster-example-2 1/1 Running 0 56spod/cluster-example-3 1/1 Running 0 47sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/cluster-example-any ClusterIP 10.102.86.16 <none> 5432/TCP 75sservice/cluster-example-r ClusterIP 10.109.11.121 <none> 5432/TCP 75sservice/cluster-example-ro ClusterIP 10.111.129.103 <none> 5432/TCP 75sservice/cluster-example-rw ClusterIP 10.100.52.161 <none> 5432/TCP 75sservice/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35d2. 定義したマニフェストをもとにPostgreSQLクラスタを作成する。
© 2022 NTT DATA Corporation 11PostgreSQLインスタンスへの接続確認 (1/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ minikube addons enable ingress1. MinikubeでIngressを有効化する。2. ConfigMapを編集し、Ingressの5432ポートからプライマリにリダイレクトするように設定する。$ kubectl patch configmap tcp-services -n ingress-nginx > --patch '{"data":{"5432":"default/cluster-example-rw:5432"}}'
© 2022 NTT DATA Corporation 12PostgreSQLインスタンスへの接続確認 (2/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ vi patch.yamlspec:template:spec:containers:- name: controllerports:- containerPort: 5432hostPort: 5432name: postgresprotocol: TCP$ kubectl patch deployment ingress-nginx-controller --patch "$(cat patch.yaml)" -ningress-nginxdeployment.apps/ingress-nginx-controller patched3. 外部からIngressの5432ポートにアクセスできるように編集し、その設定を適用する。
© 2022 NTT DATA Corporation 13PostgreSQLインスタンスへの接続確認 (3/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ export PGPASSWORD=$(kubectl get secrets cluster-example-app -o go-template='{{.data.password | base64decode}}’)$ psql –h $(minikube ip) –p 5432 –U apppsql (14.1, server 14.3 (Debian 14.3-1.pgdg110+1))SSL connection (protocol: TLSv1.2, cipher: ECDHE-ECDSA-AES256-GCM-SHA384, bits: 256,compression: off)Type "help" for help.app=>4. psqlを使い、プライマリインスタンスへ接続する。
© 2022 NTT DATA Corporation 14同期レプリケーション確認 (1/2)CloudNativePGでは、クォーラムコミットの同期レプリケーションがサポートされている。$ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-example #クラスタ名spec:instances: 3 #インスタンス数minSyncReplicas: 1 #同期レプリケーションの最低数maxSyncReplicas: 1 #同期レプリケーションの最大数storage:size: 1Gi #ストレージサイズ1. マニフェストに“minSyncReplicas”と”maxSyncReplicas”を指定し、PostgreSQLクラスタを作成すると、同期レプリケーションが有効化される。(「PostgreSQLクラスタ作成」で実施済み)
© 2022 NTT DATA Corporation 15同期レプリケーション確認 (2/2)CloudNativePGでは、クォーラムコミットの同期レプリケーションがサポートされている。postgres=# SELECT application_name, state, sync_state FROM pg_stat_replication;application_name | state | sync_state-------------------+-----------+------------cluster-example-2 | streaming | quorumcluster-example-3 | streaming | quorum(2 rows)postgres=# SHOW synchronous_standby_names;synchronous_standby_names-------------------------------------------------ANY 1 ("cluster-example-2","cluster-example-3")(1 row)2. synchronous_standby_namesを確認すると、クォーラムコミットの設定になっている。3. pg_stat_replicationを見てみると、クォーラムコミットで同期レプリケーションされていることが確認できる。
© 2022 NTT DATA Corporation 16自動フェールオーバー (1/2)多くのOperatorは、Patroniという外部ツールを使い、自動フェールオーバーを実現している。CloudNativePGは、Postgres instance managerという独自ツールを使い実現している。$ kubectl delete pod cluster-example-1pod "cluster-example-1" deleted$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"n"}{end}’cluster-example-1 primary Runningcluster-example-2 replica Runningcluster-example-3 replica Running1. フェールオーバー前の状態を確認する。2. 今回はPodの障害を想定し、プライマリのPodを削除する
© 2022 NTT DATA Corporation 17自動フェールオーバー (2/2)多くのOperatorは、Patroniという外部ツールを使い、自動フェールオーバーを実現している。CloudNativePGは、Postgres instance managerという独自ツールを使い実現している。$ ps aux | grep instance26 126048 0.1 0.2 747084 45864 ? Ssl 07:06 0:01 /controller/managerinstance run --log-level=info26 130997 0.2 0.2 747084 41092 ? Ssl 07:21 0:00 /controller/managerinstance run --log-level=info26 131878 3.2 0.2 747340 41940 ? Ssl 07:23 0:00 /controller/manager instancerun --log-level=info$ kill -9 126048$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"n"}{end}'cluster-example-1 replica Runningcluster-example-2 primary Runningcluster-example-3 replica Running3. 更新系クエリを投げ続けながら実施したが、ダウンタイム10秒ほどで切り替わった。補足: コンテナプロセスに障害を起こした場合も、同様に10秒ほどで切り替わった。
© 2022 NTT DATA Corporation 18ローリングアップデート (1/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。$ $ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-examplespec:instances: 3imageName: ghcr.io/cloudnative-pg/postgresql:14.4 #イメージを14.3 -> 14.4に変更するprimaryUpdateStrategy: unsupervised #アップデート時のプライマリの挙動storage:size: 1Gi1. PostgreSQLクラスタ作成時に定義したマニフェストの、イメージ名を変更する。“primaryUpdateStrategy”を”unsupervised”にすると、スイッチオーバーが自動化される。(“supervised”にすると、手動でスイッチオーバーを実施しなければならない。)
© 2022 NTT DATA Corporation 19ローリングアップデート (2/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。2. 変更前の状態を確認する。3. 編集したマニフェストを適用する。$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}’cluster-example-1 primary Running ghcr.io/cloudnative-pg/postgresql:14.3cluster-example-2 replica Running ghcr.io/cloudnative-pg/postgresql:14.3cluster-example-3 replica Running ghcr.io/cloudnative-pg/postgresql:14.3$ kubectl apply -f cluster-example.yamlcluster.postgresql.cnpg.io/cluster-example configured
© 2022 NTT DATA Corporation 20ローリングアップデート (3/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。4. 新しいイメージに変更され、スイッチオーバーが発生したことが確認できる。$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}’cluster-example-1 replica Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-2 primary Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-3 replica Running ghcr.io/cloudnative-pg/postgresql:14.4補足: 存在しないイメージ(14.5)を指定しアップデートに失敗すると、元のイメージ(14.4)を指定し直しても復旧できなくなる。$ $ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}'cluster-example-1 replica Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-2 primary Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-3 Pending ghcr.io/cloudnative-pg/postgresql:14.5
© 2022 NTT DATA Corporation 21まとめ最近リリースされたばかりのCloudNativePG v1.16.0を動かしてみての感想。• ドキュメントがしっかりしていて、初めてでもとっつきやすかった。• 最低限の機能だけでなく、ローリングアップデートなどの仕組みが備わっていてとても高機能な印象を受けた。• クォーラムコミットの同期レプリケーションなど、他のOperatorにない機能がある。• 異常時の挙動についてはまだ検討の余地がありそう。• フェールオーバーの仕組みにPatroniを使っていないので、もう少し詳細にフェールオーバーの仕組み・実装を見てみたい。
© 2022 NTT DATA Corporationその他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

Recommended

PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
PostgreSQL 15の新機能を徹底解説
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
AWS で Presto を徹底的に使いこなすワザ
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
Vacuum徹底解説
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
あなたの知らないPostgreSQL監視の世界
PPTX
Spanner移行について本気出して考えてみた
PDF
PostgreSQLでスケールアウト
PDF
PostgreSQL 15 開発最新情報
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
まずやっとくPostgreSQLチューニング
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online

More Related Content

PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
PostgreSQL 15の新機能を徹底解説
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQL 15の新機能を徹底解説
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
アーキテクチャから理解するPostgreSQLのレプリケーション

What's hot

PDF
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
AWS で Presto を徹底的に使いこなすワザ
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
Vacuum徹底解説
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
あなたの知らないPostgreSQL監視の世界
PPTX
Spanner移行について本気出して考えてみた
PDF
PostgreSQLでスケールアウト
PDF
PostgreSQL 15 開発最新情報
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
まずやっとくPostgreSQLチューニング
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
PostgreSQL: XID周回問題に潜む別の問題
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
AWS で Presto を徹底的に使いこなすワザ
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
Vacuum徹底解説
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
あなたの知らないPostgreSQL監視の世界
Spanner移行について本気出して考えてみた
PostgreSQLでスケールアウト
PostgreSQL 15 開発最新情報
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
まずやっとくPostgreSQLチューニング
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PostgreSQL: XID周回問題に潜む別の問題

Similar to CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)

PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PPTX
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
Let's scale-out PostgreSQL using Citus (Japanese)
PDF
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
PDF
kubernetes(GKE)環境におけるdatadog利用
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
PDF
Postgresql on kubernetesへの道
PPTX
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
PDF
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
PDF
最近良く聞く Kubernetes を体験してみた イントロ + 活用編
PDF
AWSとGCPを使用したインフラ環境
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PDF
PostgreSQL9.3新機能紹介
PDF
Architecting on Alibaba Cloud - Fundamentals - 2018
PPTX
AKS (k8s) Hands on Lab Contents
PPTX
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
PDF
Tech Dojo 02/09 IBM Japan CSM
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
Let's scale-out PostgreSQL using Citus (Japanese)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
kubernetes(GKE)環境におけるdatadog利用
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
インフラエンジニアのためのRancherを使ったDocker運用入門
Postgresql on kubernetesへの道
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
最近良く聞く Kubernetes を体験してみた イントロ + 活用編
AWSとGCPを使用したインフラ環境
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PostgreSQL9.3新機能紹介
Architecting on Alibaba Cloud - Fundamentals - 2018
AKS (k8s) Hands on Lab Contents
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
Tech Dojo 02/09 IBM Japan CSM

More from NTT DATA Technology & Innovation

PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)

CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1.
    © 2022 NTTDATA CorporationCloudNativePGを動かしてみた!~PostgreSQL on Kubernetes~2022年 7月 29日 第34回PostgreSQLアンカンファレンス@オンライン株式会社NTTデータ 技術開発本部加藤 健
  • 2.
    © 2022 NTTDATA Corporation 2自己紹介加藤 健【経歴】• PostgreSQLの研究開発+サポート• 社会人2年目• PostgreSQL歴 1年• Kubernetes歴 半年【これまでのPostgreSQLアンカンファレンス】• 第29回「OSS-DB Gold 合格体験記」
  • 3.
    © 2022 NTTDATA Corporation 3PostgreSQL OperatorとはPostgreSQL Operatorを使うことで、Kubernetes上にPostgreSQLを簡単に構築できる。Kubernetes上でPostgreSQLを動かすことにより、様々な運用管理を自動化できる。KubernetesモニタリングPostgreSQL PostgreSQLPostgreSQLバックアップ ログ管理HA構成 HA構成
  • 4.
    © 2022 NTTDATA Corporation 4PostgreSQL Operator 一覧Kubernetes上での運用が注目され始めており、様々な企業/コミュニティがPostgreSQL Operatorを提供している。今回は、最近リリースされたばかりのCloudNativePGについて調査する。• CloudNativePG (旧称 Cloud Native PostgreSQL)• Zalando Postgres Operator• Crunchy Data PostgreSQL Operator• StackGres• Stolon• KubeDB• Vmware Tanzu SQL with PostgreSQL for Kubernetes
  • 5.
    © 2022 NTTDATA Corporation 5CloudNativePGとはCloudNativePGは、PostgreSQL専業ベンダーであるEnterpriseDBが開発し、OSSとして公開されている。EDB PostgreSQL for Kubernetesは、CloudNativePGをベースに一部機能を追加して提供されている。メイン開発企業 EnterpriseDB初回リリース 2022年4月最新バージョン 1.16.0対応PostgreSQLメジャーバージョンPostgreSQL 10+ライセンス Apache License 2.0スター数 366コントリビュータ数 23商用サポート EDB PostgreSQL for Kubernetesメイン実装言語 Go
  • 6.
    © 2022 NTTDATA Corporation 6CloudNativePGのアーキテクチャCloudNativePGではクライアントからのリクエストをServiceで受け、Podに割り振る。Operator(図中のcnpg-controller-manager)がPodの配置、状態を管理する。Client Requestcluster-example-rw(Service)Client Requestcluster-example-ro(Service)cnpg-controller-manager (Deployment)cluster-example-1(Pod)postgres(Container)cluster-example-2(Pod)postgres(Container)cluster-example-3(Pod)postgres(Container)カスタムリソースの定義に従って管理
  • 7.
    © 2022 NTTDATA Corporation 7確認項目現時点で最新バージョンであるCloudNativePG v1.16.0を動かしてみる。今回の環境として、minikube v1.25.2を使用する。以下の項目について確認する。• CloudNativePGデプロイ• PostgreSQLクラスタ作成• PostgreSQLインスタンスへの接続確認• 同期レプリケーション確認• 自動フェールオーバー• ローリングアップデート
  • 8.
    © 2022 NTTDATA Corporation 8CloudNativePGデプロイCloudNativePGをデプロイする方法は2つ: ①マニフェストを使用する ②Helm Chartを使用する今回は①の方法でCloudNativePGをデプロイする。1. 既に用意されているOperatorのマニフェストを使用し、CloudNativePGをデプロイする。$ kubectl apply -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.16/releases/cnpg-1.16.0.yaml2. CloudNativePGがデプロイされたか確認する。$ kubectl get deployments –n cnpg-systemNAME READY UP-TO-DATE AVAILABLE AGEcnpg-controller-manager 1/1 1 1 52s
  • 9.
    © 2022 NTTDATA Corporation 9PostgreSQLクラスタ作成 (1/2)CloudNativePGの機能を使えば、簡単にHA構成のクラスタを作成できる。今回はプライマリx1、同期スタンバイx1 非同期スタンバイx1の3台構成とする。$ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-example #クラスタ名spec:instances: 3 #インスタンス数imageName: ghcr.io/cloudnative-pg/postgresql:14.3 #イメージの指定minSyncReplicas: 1 #同期レプリケーションの最小数maxSyncReplicas: 1 #同期レプリケーションの最大数primaryUpdateStrategy: unsupervised #アップデート時のプライマリの挙動storage:size: 1Gi #ストレージサイズ1. マニフェストに設定を定義する。
  • 10.
    © 2022 NTTDATA Corporation 10PostgreSQLクラスタ作成 (2/2)CloudNativePGの機能を使えば、簡単にHA構成のクラスタを作成できる。今回はプライマリx1、同期スタンバイx1 非同期スタンバイx1の3台構成とする。$ kubectl apply –f cluster-example.yamlcluster.postgresql.cnpg.io/cluster-example created$ kubectl get allNAME READY STATUS RESTARTS AGEpod/cluster-example-1 1/1 Running 0 71spod/cluster-example-2 1/1 Running 0 56spod/cluster-example-3 1/1 Running 0 47sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/cluster-example-any ClusterIP 10.102.86.16 <none> 5432/TCP 75sservice/cluster-example-r ClusterIP 10.109.11.121 <none> 5432/TCP 75sservice/cluster-example-ro ClusterIP 10.111.129.103 <none> 5432/TCP 75sservice/cluster-example-rw ClusterIP 10.100.52.161 <none> 5432/TCP 75sservice/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35d2. 定義したマニフェストをもとにPostgreSQLクラスタを作成する。
  • 11.
    © 2022 NTTDATA Corporation 11PostgreSQLインスタンスへの接続確認 (1/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ minikube addons enable ingress1. MinikubeでIngressを有効化する。2. ConfigMapを編集し、Ingressの5432ポートからプライマリにリダイレクトするように設定する。$ kubectl patch configmap tcp-services -n ingress-nginx > --patch '{"data":{"5432":"default/cluster-example-rw:5432"}}'
  • 12.
    © 2022 NTTDATA Corporation 12PostgreSQLインスタンスへの接続確認 (2/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ vi patch.yamlspec:template:spec:containers:- name: controllerports:- containerPort: 5432hostPort: 5432name: postgresprotocol: TCP$ kubectl patch deployment ingress-nginx-controller --patch "$(cat patch.yaml)" -ningress-nginxdeployment.apps/ingress-nginx-controller patched3. 外部からIngressの5432ポートにアクセスできるように編集し、その設定を適用する。
  • 13.
    © 2022 NTTDATA Corporation 13PostgreSQLインスタンスへの接続確認 (3/3)インスタンスへ接続する方法は3つ: ①コンテナに直接入る ②ポートフォワードを使用する ③Ingressを使用する今回は③の方法でインスタンスへ接続する。$ export PGPASSWORD=$(kubectl get secrets cluster-example-app -o go-template='{{.data.password | base64decode}}’)$ psql –h $(minikube ip) –p 5432 –U apppsql (14.1, server 14.3 (Debian 14.3-1.pgdg110+1))SSL connection (protocol: TLSv1.2, cipher: ECDHE-ECDSA-AES256-GCM-SHA384, bits: 256,compression: off)Type "help" for help.app=>4. psqlを使い、プライマリインスタンスへ接続する。
  • 14.
    © 2022 NTTDATA Corporation 14同期レプリケーション確認 (1/2)CloudNativePGでは、クォーラムコミットの同期レプリケーションがサポートされている。$ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-example #クラスタ名spec:instances: 3 #インスタンス数minSyncReplicas: 1 #同期レプリケーションの最低数maxSyncReplicas: 1 #同期レプリケーションの最大数storage:size: 1Gi #ストレージサイズ1. マニフェストに“minSyncReplicas”と”maxSyncReplicas”を指定し、PostgreSQLクラスタを作成すると、同期レプリケーションが有効化される。(「PostgreSQLクラスタ作成」で実施済み)
  • 15.
    © 2022 NTTDATA Corporation 15同期レプリケーション確認 (2/2)CloudNativePGでは、クォーラムコミットの同期レプリケーションがサポートされている。postgres=# SELECT application_name, state, sync_state FROM pg_stat_replication;application_name | state | sync_state-------------------+-----------+------------cluster-example-2 | streaming | quorumcluster-example-3 | streaming | quorum(2 rows)postgres=# SHOW synchronous_standby_names;synchronous_standby_names-------------------------------------------------ANY 1 ("cluster-example-2","cluster-example-3")(1 row)2. synchronous_standby_namesを確認すると、クォーラムコミットの設定になっている。3. pg_stat_replicationを見てみると、クォーラムコミットで同期レプリケーションされていることが確認できる。
  • 16.
    © 2022 NTTDATA Corporation 16自動フェールオーバー (1/2)多くのOperatorは、Patroniという外部ツールを使い、自動フェールオーバーを実現している。CloudNativePGは、Postgres instance managerという独自ツールを使い実現している。$ kubectl delete pod cluster-example-1pod "cluster-example-1" deleted$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"n"}{end}’cluster-example-1 primary Runningcluster-example-2 replica Runningcluster-example-3 replica Running1. フェールオーバー前の状態を確認する。2. 今回はPodの障害を想定し、プライマリのPodを削除する
  • 17.
    © 2022 NTTDATA Corporation 17自動フェールオーバー (2/2)多くのOperatorは、Patroniという外部ツールを使い、自動フェールオーバーを実現している。CloudNativePGは、Postgres instance managerという独自ツールを使い実現している。$ ps aux | grep instance26 126048 0.1 0.2 747084 45864 ? Ssl 07:06 0:01 /controller/managerinstance run --log-level=info26 130997 0.2 0.2 747084 41092 ? Ssl 07:21 0:00 /controller/managerinstance run --log-level=info26 131878 3.2 0.2 747340 41940 ? Ssl 07:23 0:00 /controller/manager instancerun --log-level=info$ kill -9 126048$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"n"}{end}'cluster-example-1 replica Runningcluster-example-2 primary Runningcluster-example-3 replica Running3. 更新系クエリを投げ続けながら実施したが、ダウンタイム10秒ほどで切り替わった。補足: コンテナプロセスに障害を起こした場合も、同様に10秒ほどで切り替わった。
  • 18.
    © 2022 NTTDATA Corporation 18ローリングアップデート (1/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。$ $ vi cluster-example.yamlapiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: cluster-examplespec:instances: 3imageName: ghcr.io/cloudnative-pg/postgresql:14.4 #イメージを14.3 -> 14.4に変更するprimaryUpdateStrategy: unsupervised #アップデート時のプライマリの挙動storage:size: 1Gi1. PostgreSQLクラスタ作成時に定義したマニフェストの、イメージ名を変更する。“primaryUpdateStrategy”を”unsupervised”にすると、スイッチオーバーが自動化される。(“supervised”にすると、手動でスイッチオーバーを実施しなければならない。)
  • 19.
    © 2022 NTTDATA Corporation 19ローリングアップデート (2/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。2. 変更前の状態を確認する。3. 編集したマニフェストを適用する。$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}’cluster-example-1 primary Running ghcr.io/cloudnative-pg/postgresql:14.3cluster-example-2 replica Running ghcr.io/cloudnative-pg/postgresql:14.3cluster-example-3 replica Running ghcr.io/cloudnative-pg/postgresql:14.3$ kubectl apply -f cluster-example.yamlcluster.postgresql.cnpg.io/cluster-example configured
  • 20.
    © 2022 NTTDATA Corporation 20ローリングアップデート (3/3)PostgreSQLのマイナーバージョンアップに際して、ローリングアップデートがサポートされている。全てのスタンバイが1つずつアップデートされた後、プライマリがアップデートされる。4. 新しいイメージに変更され、スイッチオーバーが発生したことが確認できる。$ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}’cluster-example-1 replica Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-2 primary Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-3 replica Running ghcr.io/cloudnative-pg/postgresql:14.4補足: 存在しないイメージ(14.5)を指定しアップデートに失敗すると、元のイメージ(14.4)を指定し直しても復旧できなくなる。$ $ kubectl get pods --selector=cnpg.io/cluster=cluster-example -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.metadata.labels.role}{"t"}{.status.phase}{"t"}{.spec.containers[].image}{"n"}{end}'cluster-example-1 replica Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-2 primary Running ghcr.io/cloudnative-pg/postgresql:14.4cluster-example-3 Pending ghcr.io/cloudnative-pg/postgresql:14.5
  • 21.
    © 2022 NTTDATA Corporation 21まとめ最近リリースされたばかりのCloudNativePG v1.16.0を動かしてみての感想。• ドキュメントがしっかりしていて、初めてでもとっつきやすかった。• 最低限の機能だけでなく、ローリングアップデートなどの仕組みが備わっていてとても高機能な印象を受けた。• クォーラムコミットの同期レプリケーションなど、他のOperatorにない機能がある。• 異常時の挙動についてはまだ検討の余地がありそう。• フェールオーバーの仕組みにPatroniを使っていないので、もう少し詳細にフェールオーバーの仕組み・実装を見てみたい。
  • 22.
    © 2022 NTTDATA Corporationその他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

[8]ページ先頭

©2009-2025 Movatter.jp