SlideShare una empresa de Scribd logo
1 de 84
© 2022 NTT DATA Corporation
【B2】 PGOを用いたPostgreSQL on Kubernetes入門
2022年11月11日 PostgreSQL Conference Japan 2022
株式会社NTTデータ 技術開発本部
加藤 慎也
© 2022 NTT DATA Corporation 2
自己紹介
• 名前
• 加藤 慎也 @ShinyaKato_
• 所属
• 株式会社NTTデータ 技術開発本部
• 業務
• PostgreSQLコミュニティでの開発
• PostgreSQLの研究開発やサポート業務
© 2022 NTT DATA Corporation 3
本講演について
• 講演資料はNTTデータのSlideShareで公開しています
• https://www.slideshare.net/nttdata-tech
• 講演資料に記載の情報は2022/11/1時点の情報となります
• スペースの都合上、コマンドの実行結果は一部省略している場合があります
• 質問は講演終了後やTwitterなどでお願いします
© 2022 NTT DATA Corporation 4
アジェンダ
Kubernetes上でPostgreSQLを運用管理するためのOperatorが複数
リリースされており、その1つであるPGOの機能や使い方、注意点を解説します!
• KubernetesとOperator
• PGOの基本機能
• PGOを使用する上での注意点
© 2022 NTT DATA Corporation 5
© 2022 NTT DATA Corporation 5
01
KubernetesとOperator
© 2022 NTT DATA Corporation 6
Kubernetes(K8s)とは
• コンテナ化されたアプリケーションのデプロイ、スケーリング、死活監視などを
自動化するためのコンテナオーケストレーションツール
• 初回リリース:2014年6月7日
• 最新版:1.25
デプロイ
スケーリング
死活監視
コンテナ
コンテナ
コンテナ
コンテナ
コンテナ
コンテナ
© 2022 NTT DATA Corporation 7
K8sクラスタのコンポーネント
• Pod
• K8sでコンテナを管理するための最小単位で、Pod内に1つ以上のコンテナを内包
• K8sクラスタはPodを実行するノードと呼ばれるワーカマシンの集合
• ワーカノード:Podをホスティング
• コントロールプレーン(マスタノード):ワーカノードとPodを管理
© 2022 NTT DATA Corporation 8
K8sの主な機能 - Infrastructure as Code (IaC)
• YAMLで記述した宣言的なコード(マニフェスト)によってリソースの管理
• 同一環境の再現や複製、環境のGitでの管理が可能
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
nginx.yaml
apply
Pod
Pod
Pod
Pod
Pod
nginx-
Pod
© 2022 NTT DATA Corporation 9
K8sの主な機能 - (オート)スケーリング
• 同じコンテナイメージを元に複数のコンテナ(レプリカ)をデプロイでき、
負荷分散や耐障害性の確保が可能
• 負荷に応じたオートスケールも可能
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replica
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
nginx.yaml
apply
Pod
Pod
Pod
Pod
Pod
nginx-
Pod
nginx-
Pod
nginx-
Pod
© 2022 NTT DATA Corporation 10
K8sの主な機能 - セルフヒーリング
• K8sはコンテナプロセスのヘルスチェックを行っている
• 例えば、ReplicaSetリソースに定義されたレプリカ数と実際にデプロイされている
Pod数を突合して、乖離があれば新たにPodをデプロイ
ReplicaSet(レプリカ数5)
Pod
Pod
Pod
Pod
Pod
Pod
© 2022 NTT DATA Corporation 11
K8sの主な機能 - リソースとコントローラ
• セルフヒーリングを実現する仕組みのように、
K8sには様々なリソースとその状態を管理するコントローラが存在する
リソース コントローラ 主な役割
ReplicSet ReplicaSet Controller Podのレプリカを作成し、指定したPod数を維持
Deployment Deployment Controller 複数のReplicaSetを管理
(ローリングアップデート等を実現)
DaemonSet DaemonSet Controller 各ノードにPodを1つずつ配置
StatefulSet StatefulSet Controller データを永続化するための仕組みを提供
… … …
© 2022 NTT DATA Corporation 12
K8s上でのデータベース運用
• データベース運用者の視点
• 前述したK8sの標準のリソースとコントローラだけでは、
データベースの管理に生じる複雑な構築・運用作業の自動化を実装することが困難
• 例えば、PostgreSQLのHAクラスタを構築する場合
• PostgreSQLとクラスタウェア(PacemakerやPatroniなど)の構築
• 設定ファイルに適切なパラメータを設定
• レプリケーションロールの作成
• など・・・
これらの設定の自動化をK8s標準機能で実現することは困難
© 2022 NTT DATA Corporation 13
K8s Operator
• カスタムリソース(Custom Resource)
• K8sの標準リソースを利用しつつ、独自のリソース(あるべき状態)を定義
• カスタムコントローラ(Custom Controller)
• カスタムリソースに示したあるべき状態を保持するためのコントローラ
• Operator
• カスタムリソース+カスタムコントローラにより、前述の運用作業の自動化を実現
Operator
カスタム
リソース
カスタム
コントローラ
= +
© 2022 NTT DATA Corporation 14
OperatorによるK8s上のPostgreSQL運用管理
• Operatorにより機能の差異はあるが、
このようなPostgreSQLの環境を簡単に実現可能
バックアップ
モニタリング ログ集約
PostgreSQL
HA構成
PostgreSQL PostgreSQL
HA構成
セットアップ
操作・監視
ユーザ
© 2022 NTT DATA Corporation 15
PostgreSQL Operator
• OperatorHub.ioに様々なOperatorが登録されており、
PostgreSQLのOperatorも複数登録されている
• OperatorHub.ioでPostgreSQLで検索した結果
© 2022 NTT DATA Corporation 16
PostgreSQL Operator
• 代表的なPostgreSQL Operatorの比較
本講演ではGitHubのスター数が最も多いPGOについて解説します!
PGO postgres-operator StackGres
メイン開発企業 Crunchy Data Zalando OnGres
初回リリース 2017年5月 2018年8月 2019年9月
最新バージョン 5.2.0 1.8.2 1.3.3
ライセンス Apache 2.0 MIT AGPLv3
スター数 3,012 2,877 487(GitHub), 75 (Gitlab)
コントリビュータ数 93 143 17
メイン実装言語 Go Go Java
© 2022 NTT DATA Corporation 17
© 2022 NTT DATA Corporation 17
02
PGOの基本機能
© 2022 NTT DATA Corporation 18
PGOの概要
• PostgreSQLコア開発者が複数所属している企業であるCrunchy Dataが
メインで開発・OSS提供しているOperator
• GitHubのスター数は3,012と人気のOperatorのうちの1つ
• PostgreSQL 10~14に対応
© 2022 NTT DATA Corporation 19
PGOのコンポーネント
• PGOは複数のソフトウェアから構成
クライアント
PgBouncer
postgres-
exporter
Patroni
postgres-
exporter
Patroni
postgres-
exporter
Patroni
pgBackRest
PVC AWS GCP Azure
コネクションプーリング
HA
バックアップ
モニタリング
© 2022 NTT DATA Corporation 20
今回構築する環境の完成図
• PGOの基本機能を紹介しながら環境を構築します
K8sクラスタ
ワーカ1
コントロールプレーン
Alertmanager
ワーカ2
ワーカ3
ワーカ4
クライアント
オブジェクトストレージ
バックアップ
primary
standby
standby
HA
© 2022 NTT DATA Corporation 21
使用バージョン
• Rocky Linux 8.6
• Docker 20.10.17
• kind 0.14.0
• Kubernetes 1.24
• PGO 5.20
© 2022 NTT DATA Corporation 22
K8s構築
• Docker、K8s(kind)、kubectlのインストール
• PGOは、Kubernetes、OpenShift、Rancher、GKE、EKS、AKS、VMware Tanzu
で使用可
• kindでコントロールプレーン1ノード、ワーカ4ノードのK8sを構築
• 構築手順は省略
© 2022 NTT DATA Corporation 23
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
© 2022 NTT DATA Corporation 24
PGOのインストール
• CrunchyのGitHubにあるサンプルを使用してPGOをインストール
$ git clone https://github.com/CrunchyData/postgres-operator-examples.git
$ cd postgres-operator-examples
$ git checkout b0f4500
$ kubectl apply -k kustomize/install/namespace
$ kubectl apply --server-side -k kustomize/install/default
$ kubectl get pods -n postgres-operator
NAME READY STATUS RESTARTS AGE
pgo-848fbd558f-7hjfn 1/1 Running 0 41s
pgo-upgrade-6b4b685577-tzqx9 1/1 Running 0 41s
PGOのPodとPostgreSQLのメジャー
バージョンアップに使用するPodが作成される
© 2022 NTT DATA Corporation 25
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
現時点では起動するノードを固定していないため、
別のノードに起動する場合があります。
© 2022 NTT DATA Corporation 26
DBクラスタ作成
• デフォルトのマニフェストでDBクラスタ作成
$ kubectl apply --server-side -k kustomize/postgres
$ kubectl get pods -n postgres-operator -l postgres-
operator.crunchydata.com/instance-set=instance1 -o wide
NAME READY STATUS NODE
hippo-instance1-gdhr-0 4/4 Running kind-worker4
hippoという名前のPostgreSQLのPodがワーカ4に起動
© 2022 NTT DATA Corporation 27
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
© 2022 NTT DATA Corporation 28
PostgreSQLの起動確認
• kubectl execコマンドでPod内のPostgreSQLコンテナに接続
$ kubectl exec -it -n postgres-operator hippo-instance1-gdhr-0 -- psql
Defaulted container "database" out of: database, replication-cert-copy,
pgbackrest, pgbackrest-config, postgres-startup (init), nss-wrapper-init (init)
psql (14.5)
Type "help" for help.
postgres=# SELECT version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 14.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-10), 64-bit
(1 row)
PostgreSQLに接続し、SQLを実行できることを確認できる
© 2022 NTT DATA Corporation 29
レプリカの作成
• マニフェストにレプリカ数を設定して3冗長のDBクラスタを作成
$ git diff
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
index f736b7e..fc30f17 100644
--- a/kustomize/postgres/postgres.yaml
+++ b/kustomize/postgres/postgres.yaml
@@ -7,6 +7,7 @@ spec:
postgresVersion: 14
instances:
- name: instance1
+ replicas: 3
dataVolumeClaimSpec:
accessModes:
- "ReadWriteOnce“
レプリカ数を3に設定
© 2022 NTT DATA Corporation 30
レプリカインスタンスの作成
• レプリカ数を設定して3冗長のDBクラスタを作成
$ kubectl apply --server-side -k kustomize/postgres
$ kubectl get pods -n postgres-operator -l postgres-
operator.crunchydata.com/instance-set=instance1 -o wide
NAME READY STATUS NODE
hippo-instance1-27rc-0 4/4 Running kind-worker
hippo-instance1-gdhr-0 4/4 Running kind-worker4
hippo-instance1-qb5t-0 4/4 Running kind-worker4
変更をapply
PostgreSQLのPodが3つ起動
© 2022 NTT DATA Corporation 31
自動フェイルオーバ
• いずれかのPodに異常が発生したとき、PGOが自動でPodを再起動する
デモ動画
© 2022 NTT DATA Corporation 32
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
standby
HA
primary standby
© 2022 NTT DATA Corporation 33
各インスタンスが起動するワーカノードの固定
• 複数のワーカノードが存在するとき、
特定のワーカノードにPostgreSQLのPodを割り当てたい場合がある
• 高性能なSSD、高速なネットワークを備えているなど
• Node Affnityを用いて特定のノードにPodを割り当てる
• ワーカノードとPodの両方で設定が必要
DBサーバ用ワーカ Webサーバ用ワーカ
DBサーバ用ワーカに
スケジューリングしたい
© 2022 NTT DATA Corporation 34
各インスタンスが起動するワーカノードの固定
• ワーカノードにラベル付けをする
$ kubectl label nodes kind-worker diskType=ssd
$ kubectl label nodes kind-worker2 diskType=ssd
$ kubectl label nodes kind-worker3 diskType=ssd
$ kubectl label nodes kind-worker4 diskType=hdd
$ kubectl get nodes --show-labels
NAME STATUS LABELS
kind-control-plane Ready ...
kind-worker Ready diskType=ssd,...
kind-worker2 Ready diskType=ssd,...
kind-worker3 Ready diskType=ssd,...
kind-worker3 Ready diskType=hdd,...
diskType=ssd diskType=ssd diskType=ssd diskType=hdd
ワーカ1 ワーカ2 ワーカ3 ワーカ4
© 2022 NTT DATA Corporation 35
各インスタンスが起動するワーカノードの固定
• マニフェストにNode Affinityの設定をする
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
instances:
- name: instance1
replicas: 3
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: diskType
+ operator: In
+ values:
+ - ssd
diskType=ssdの
ノードに起動する
© 2022 NTT DATA Corporation 36
各インスタンスが起動するワーカノードの固定
• マニフェストを適用
$ kubectl apply --server-side -k kustomize/postgres
$ kubectl get pods -n postgres-operator -l postgres-
operator.crunchydata.com/instance-set=instance1 -o wide
NAME READY STATUS NODE
hippo-instance1-j4rd-0 4/4 Running kind-worker
hippo-instance1-jqz5-0 4/4 Running kind-worker
hippo-instance1-pslx-0 4/4 Running kind-worker2
ワーカ4にスケジューリング
されなくなった
© 2022 NTT DATA Corporation 37
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
primary
standby
standby
HA
© 2022 NTT DATA Corporation 38
各インスタンスを各ノードに適切に分散
• Topology Spread Constraintsを使用することで、
Region/Zone/Nodeなどの単位でPodを分散配置できる
• Region/Zone/Node障害発生時にも業務を継続できる
分散配置しない場合
AvailabilityZone A
分散配置する場合
AvailabilityZone A
AvailabilityZone B
AvailabilityZone Bで
業務継続できる
© 2022 NTT DATA Corporation 39
AvailabilityZoneの設定
• ワーカノードにラベル付けをする
$ kubectl label nodes kind-worker availabilityZone=A
$ kubectl label nodes kind-worker2 availabilityZone=B
$ kubectl label nodes kind-worker3 availabilityZone=C
$ kubectl get nodes --show-labels
NAME STATUS LABELS
kind-control-plane Ready ...
kind-worker Ready availabilityZone=A,...
kind-worker2 Ready availabilityZone=B,...
kind-worker3 Ready availabilityZone=C,...
kind-worker3 Ready ...
availabilityZone=A
ワーカ1 ワーカ2
availabilityZone=B
ワーカ3
availabilityZone=C
© 2022 NTT DATA Corporation 40
各インスタンスを各ノードに適切に分散
• マニフェストにTopology Spread Constraintsの設定をする
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
+ topologySpreadConstraints:
+ - maxSkew: 1
+ topologyKey: availabilityZone
+ whenUnsatisfiable: DoNotSchedule
+ labelSelector:
+ matchLabels:
+ postgres-operator.crunchydata.com/instance-set: instance1
+ postgres-operator.crunchydata.com/cluster: hippo
availabilityZoneで分散する
© 2022 NTT DATA Corporation 41
各インスタンスを各ノードに適切に分散
• マニフェストを適用
$ kubectl apply --server-side -k kustomize/postgres
$ kubectl get pods -n postgres-operator -l postgres-
operator.crunchydata.com/instance-set=instance1 -o wide
NAME READY STATUS NODE
hippo-instance1-bzkw-0 4/4 Running kind-worker3
hippo-instance1-cmkl-0 4/4 Running kind-worker
hippo-instance1-m82d-0 4/4 Running kind-worker2
ワーカ1,2,3に分散して
スケジューリングされるようになった
© 2022 NTT DATA Corporation 42
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
ワーカ2
ワーカ3
ワーカ4
クライアント
primary
standby
standby
HA
© 2022 NTT DATA Corporation 43
モニタリングスタックのインストール
• PostgreSQLの性能情報をPrometheusにエクスポートするための
postgres-exporterコンテナをPostgreSQL Podに導入する
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
+ monitoring:
+ pgmonitor:
+ exporter:
+ image: registry.developers.crunchydata.com/crunchydata/crunchy-
postgres-exporter:ubi8-5.2.0-0
postgres-
exporter
メトリクス
© 2022 NTT DATA Corporation 44
モニタリングスタックのインストール
• Prometheus、Alertmanager、Grafanaをワーカ4にインストール
• Node AffinityとTopology Spread Constraintsの設定は前と同様
$ kubectl apply --server-side -k kustomize/monitoring
$ kubectl get pods -n postgres-operator -l app.kubernetes.io/name=postgres-
operator-monitoring -o wide
NAME READY NODE
crunchy-alertmanager-56b5bc54b-4c7f5 1/1 kind-worker4
crunchy-grafana-7fc46b99fd-m4c45 1/1 kind-worker4
crunchy-prometheus-6b67c667df-czbjd 1/1 kind-worker4
モニタリング関連の
YAMLファイルが格納
Prometheus、Alertmanager、
GrafanaのPodが起動
© 2022 NTT DATA Corporation 45
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
Alertmanager
ワーカ2
ワーカ3
ワーカ4
クライアント
primary
standby
standby
HA
© 2022 NTT DATA Corporation 46
PostgreSQLへの接続
• PGOはデフォルトでClusterIPというServiceを作成する
• ClusterIPはK8s内からの接続にしか使用できないため、
NodePortを作成し、K8s外からの接続を実現する
クライアント
ClusterIP
ClusterIP
クライアント
ClusterIP
NodePort
NodePort
© 2022 NTT DATA Corporation 47
Primary接続用NodePortの作成
• NodePortのマニフェストを作成
apiVersion: v1
kind: Service
metadata:
name: primary-nodeport
spec:
type: NodePort
selector:
postgres-operator.crunchydata.com/role: master
postgres-operator.crunchydata.com/cluster: hippo
ports:
- port: 5432
targetPort: 5432
nodePort: 30001
PrimaryのPodかつ
名前がhippoのPodに接続
Podの5432ポートを
ノードの30001ポートに
© 2022 NTT DATA Corporation 48
接続設定
• pg_hba.confの設定を行う
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
+ patroni:
+ dynamicConfiguration:
+ postgresql:
+ pg_hba:
+ - host all all 0.0.0.0/0 trust 全てのデータベース、ユーザ、接続元
からのTCP/IPでの接続を許可
© 2022 NTT DATA Corporation 49
Primaryへ接続
• ノードのIPアドレスを確認
$ kubectl get nodes -o wide
NAME STATUS ROLES VERSION INTERNAL-IP
kind-control-plane Ready control-plane v1.24.7 172.18.0.4
kind-worker Ready <none> v1.24.7 172.18.0.2
kind-worker2 Ready <none> v1.24.7 172.18.0.6
kind-worker3 Ready <none> v1.24.7 172.18.0.5
kind-worker4 Ready <none> v1.24.7 172.18.0.3
© 2022 NTT DATA Corporation 50
Primaryへ接続
• いずれかのノードのIPアドレス、NodePortのポート番号にpsqlで接続
$ psql -h 172.18.0.6 -p 30001 -U postgres postgres
psql (14.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256,
compression: off)
Type "help" for help.
postgres=#
同様の手順を踏めば
Standbyにも接続ができる
© 2022 NTT DATA Corporation 51
Primary、Standbyに接続して適切にレプリケーションされているか確認
• Primary、StandbyそれぞれにSQLを実行
デモ動画
© 2022 NTT DATA Corporation 52
Grafana接続用NodePortの作成
• NodePortのマニフェストを作成
apiVersion: v1
kind: Service
metadata:
name: grafana-nodeport
spec:
type: NodePort
selector:
app.kubernetes.io/name: postgres-operator-monitoring
name: crunchy-grafana
ports:
- port: 3000
targetPort: 3000
nodePort: 30003
Podの3000ポートを
ノードの30003ポートに
© 2022 NTT DATA Corporation 53
Grafana Dashboardへアクセス
• ブラウザからNodeのIPアドレス:NodePortのポート番号へアクセス
• ユーザ名admin、パスワードadminでログイン
© 2022 NTT DATA Corporation 54
Grafana Dashboardへアクセス
• 左のメニューからDashbords>Manage>PostgreSQLDetailsを開く
© 2022 NTT DATA Corporation 55
現時点の環境図
K8sクラスタ
ワーカ1
コントロールプレーン
Alertmanager
ワーカ2
ワーカ3
ワーカ4
クライアント
primary
standby
standby
HA
© 2022 NTT DATA Corporation 56
バックアップ
• PGOに同梱のpgBackRestを使用する
• 自動/手動でバックアップの取得、バックアップ保持ポリシーの設定、PITRが可能
• K8sのストレージだけでなく、Amazon S3(S3 compatible含む)、
Google Cloud Storage、Azure Blob Storageへの保存も可能
pgBackRest Amazon Simple Storage
Service (Amazon S3)
pgBackRest
© 2022 NTT DATA Corporation 57
事前準備
• 今回はMinIOをローカルに立てて、バックアップ用のオブジェクトストレージとする
• 構築手順は省略
• MinIOのWebUIからバックアップ用バケットを作成
© 2022 NTT DATA Corporation 58
オブジェクトストレージ認証情報の設定
• kustomize/s3のマニフェストを使用
• 設定ファイルにMinIOの認証情報を設定
$ cp kustomize/s3/s3.conf.example kustomize/s3/s3.conf
$ vi s3.conf
[global]
repo1-s3-key=minioadmin
repo1-s3-key-secret=minioadmin
© 2022 NTT DATA Corporation 59
バックアップ基本設定
• マニフェストにバックアップの設定を行う
• 基本設定は以下
backups:
pgbackrest:
image: registry.developers.crunchydata.com/crunchydata/crunchy-
pgbackrest:ubi8-2.40-1
configuration:
- secret:
name: pgo-s3-creds
global:
repo1-s3-uri-style: path
repos:
- name: repo1
s3:
bucket: hippo-s3-backups
endpoint: http://127.0.0.1:9000
region: hoge
オブジェクトストレージのエンドポイント、
バケット名、リージョンを設定
(MinIOなどのS3互換でリージョンが存
在しない場合は任意の文字列)
© 2022 NTT DATA Corporation 60
自動バックアップ設定
• バックアップ保持ポリシー、バックアップ種別、バックアップ取得時刻の設定
global:
repo1-s3-uri-style: path
+ repo1-retention-full: 30
repos:
- name: repo1
+ schedules:
+ full: "0 1 * * *"
30個のバックアップを保持
repo1-retention-full-type: timeの
設定をすると30日間のバックアップを保持
full:フルバックアップ
differential:差分バックアップ
incremental:増分バックアップ
cron形式で実行タイミングを記述
© 2022 NTT DATA Corporation 61
手動バックアップ設定
• 以下をマニフェストに設定
• kubectl annotateコマンド実行を契機にバックアップ取得を開始
backups:
pgbackrest:
+ manual:
+ repoName: repo1
+ options:
+ - --type=full
$ kubectl annotate -n postgres-operator postgrescluster hippo-s3 ¥
postgres-operator.crunchydata.com/pgbackrest-backup="$(date)"
full:フルバックアップ
differential:差分バックアップ
incremental:増分バックアップ
© 2022 NTT DATA Corporation 62
完成図
K8sクラスタ
ワーカ1
コントロールプレーン
Alertmanager
ワーカ2
ワーカ3
ワーカ4
クライアント
オブジェクトストレージ
バックアップ
primary
standby
standby
HA
© 2022 NTT DATA Corporation 63
その他の機能 - 設定変更(Patroni)
• Patroniの設定をマニフェストに記述することができる
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
+ patroni:
+ dynamicConfiguration:
+ master_stop_timeout: 60
© 2022 NTT DATA Corporation 64
その他の機能 - 設定変更(postgresql.conf)
• postgresql.confの設定をマニフェストに記述することができる
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
patroni:
dynamicConfiguration:
master_stop_timeout: 60
+ postgresql:
+ parameters:
+ autovacuum: off
© 2022 NTT DATA Corporation 65
その他の機能 - 設定変更(pg_hba.conf)
• pg_hba.confの設定をマニフェストに記述することができる
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
patroni:
dynamicConfiguration:
master_stop_timeout: 60
postgresql:
parameters:
autovacuum: off
+ pg_hba:
+ - host all all 0.0.0.0/0 trust
© 2022 NTT DATA Corporation 66
その他の機能 - DBクラスタの停止
• spec.shutdownをtrueとすることでDBクラスタを停止できる
デモ動画
© 2022 NTT DATA Corporation 67
その他の機能 - DBクラスタのスイッチオーバ
• スイッチオーバ(プライマリの切り替え)を実行できる
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
patroni:
+ switchover:
+ enabled: true
+ targetInstance: hippo-instance1-wm5p
切り替え先のPod名の指定は任意
© 2022 NTT DATA Corporation 68
その他の機能 - DBクラスタの手動フェイルオーバ
• 手動でのフェイルオーバを実行できる
diff --git a/kustomize/s3/postgres.yaml b/kustomize/s3/postgres.yaml
spec:
patroni:
switchover:
enabled: true
targetInstance: hippo-instance1-wm5p
+ type: Failover
切り替え先のPod名の指定は必須
© 2022 NTT DATA Corporation 69
その他の機能 - データベースの初期化
• DBクラスタ作成時にSQLスクリプトを自動実行できる
• 事前にSQLを記述したConfigMapを作成しておき、
DBクラスタのマニフェストに作成したConfigMap名を記述
apiVersion: v1
kind: ConfigMap
metadata:
name: init-sql
data:
init.sql: |
CREATE EXTENSION pg_stat_statements;
CREATE TABLE test_table (i INT);
© 2022 NTT DATA Corporation 70
その他の機能 - データベースの初期化
• DBクラスタ作成時にSQLスクリプトを自動実行できる
• 事前にSQLを記述したConfigMapを作成しておき、
DBクラスタのマニフェストに作成したConfigMap名を記述
diff --git a/kustomize/s3/postgres.yaml b/kustomize/s3/postgres.yaml
spec:
+ databaseInitSQL:
+ key: init.sql
+ name: init-sql
© 2022 NTT DATA Corporation 71
その他の機能 - マイナーバージョンアップ
• マイナーバージョンアップを試すために、バージョン14.4のPostgreSQLを起動
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
spec:
pgmonitor:
exporter:
image: registry.developers.crunchydata.com/crunchydata/crunchy-
postgres-exporter:ubi8-5.2.0-0
- image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-
14.5-1
+ image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-
14.4-0
postgresVersion: 14
instances:
- name: instance1
イメージ名のバージョンを変更
© 2022 NTT DATA Corporation 72
その他の機能 - マイナーバージョンアップ
• イメージのバージョンを変更し適用するとローリングアップデートが開始
デモ動画
© 2022 NTT DATA Corporation 73
その他の機能 - メジャーバージョンアップ
• PGO 5.1.0からメジャーバージョンアップにも対応
© 2022 NTT DATA Corporation 74
© 2022 NTT DATA Corporation 74
03
PGOを使用する上での注意点
© 2022 NTT DATA Corporation 75
WebUIがない
• postgres-operator(Zalando)、StackGres(OnGres)には
WebUIが付属しているがPGOには付属していない
postgres-operator(Zalando) StackGres(OnGres)
© 2022 NTT DATA Corporation 76
PGOバージョン4系との互換性がない
• 最新版のPGOバージョン5系は、バージョン4系と大きく異なっており、
互換性がない
• バージョン4系の最新版は4.7.7で、使用できるPostgreSQLの最新バージョン
はPostgreSQL 13.8であり、PostgreSQL 14を使用できない
• ドキュメントやWebでの検索結果はどちらのバージョンの記述かを
見極める必要がある
© 2022 NTT DATA Corporation 77
商用利用する場合はSupport Subscriptionに登録が必要
• Crunchy Dataの提供するDockerイメージは
Crunchy Data Developer Programの利用規約をもとに提供されている
• 開発目的の場合のみ無料でソフトウェアを使用することができる
• Dockerイメージを独自にビルドする場合も、
Dockerfile内でのPostgreSQLのインストールにCrunchy Data提供のRPM
を使用しているため、完璧なDockerイメージの再現は困難
© 2022 NTT DATA Corporation 78
使用できる拡張機能に制限がある
• 以下の拡張機能がPGOに同梱されている
• contribモジュール
• PgBouncer、PostGIS、orafce、pgAudit、pgAudit Analyze、pg_cron、
pg_partman、pgnodemx、set_user、TimescaleDB、wal2json、pgRouting
• 他の拡張機能を使用する場合には独自にDockerイメージをビルドする必要が
ある
© 2022 NTT DATA Corporation 79
一部の設定を変更することができない
• initdb時のパラメータ
• ロケールを設定したい場合、データベース単位での設定が必要
• Patroni管理、PGO管理のパラメータ
• HA関連パラメータ、バックアップ関連パラメータ、その他
• 例えば、shared_preload_librariesに必ずpgAuditが設定されてしまう
// PostgreSQLParameters sets the parameters required by pgAudit.
func PostgreSQLParameters(outParameters *postgres.Parameters) {
// Load the shared library when PostgreSQL starts.
// PostgreSQL must be restarted when changing this value.
// - https://github.com/pgaudit/pgaudit#settings
// - https://www.postgresql.org/docs/current/runtime-config-client.html
shared := outParameters.Mandatory.Value("shared_preload_libraries")
outParameters.Mandatory.Add("shared_preload_libraries",
strings.TrimPrefix(shared+",pgaudit", ","))
}
internal/pgaudit/postgres.go
PGO側が常にpgauditを設定
© 2022 NTT DATA Corporation 80
ログ収集の機能がない
• StackGresにはPostgreSQLやPatroniログを各Podから収集する機能がある
がPGOにはない
• 独自にFluentdやGrafana Lokiなどのソフトウェアを導入する必要がある
© 2022 NTT DATA Corporation 81
YAML上での設定変更を心がける必要がある
• Pod内の設定ファイルを直接書き換え
• Podが起動している間はその値が設定されるが、Podが再起動すると設定内容が消える
• YAMLでの設定値との乖離が発生
• ALTER SYSTEMコマンドでの設定変更
• Podが再起動しても設定内容は消えない(postgresql.auto.confは削除されない)
• YAMLでの設定値を常に上書きしてしまい、YAMLでの設定値との乖離が発生
• YAMLでの設定変更に慣れる必要がある
• PGO特有の注意点ではないが、Operatorによって挙動が異なる場合がある
© 2022 NTT DATA Corporation 82
まとめ
• PostgreSQL Operatorの1つであるPGOの紹介をしました
• PGOを活用することで、HA構成のPostgreSQLの構築、バックアップ/リストア、
モニタリング、バージョンアップなどを簡単に行うことができる
• PGOの使用にはいくつかの注意点がある
© 2022 NTT DATA Corporation 83
参考文献
• https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/
• https://www.crunchydata.com/developers/terms-of-use
• https://min.io/docs/minio/linux/index.html
• https://kind.sigs.k8s.io/docs/user/quick-start/
• https://access.crunchydata.com/documentation/postgres-operator/v5/
© 2022 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

Más contenido relacionado

La actualidad más candente

PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)NTT DATA Technology & Innovation
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...NTT DATA Technology & Innovation
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...NTT DATA Technology & Innovation
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...NTT DATA Technology & Innovation
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)NTT DATA Technology & Innovation
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep DiveToru Makabe
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...NTT DATA Technology & Innovation
 

La actualidad más candente (20)

PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
 

Similar a PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月VirtualTech Japan Inc.
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Ryo Sasaki
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf勇 黒沢
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archiDaisuke Nagao
 
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise Cloud
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise CloudCODT2020 OpenStack Version Up and VMHA Masakari in Enterprise Cloud
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise CloudToshikazu Ichikawa
 
kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用Koichi HARUNA
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)NTT DATA Technology & Innovation
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密ShuheiUda
 

Similar a PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料) (20)

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
 
GPU Container as a Service を実現するための最新OSS徹底比較
GPU Container as a Service を実現するための最新OSS徹底比較GPU Container as a Service を実現するための最新OSS徹底比較
GPU Container as a Service を実現するための最新OSS徹底比較
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi
 
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise Cloud
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise CloudCODT2020 OpenStack Version Up and VMHA Masakari in Enterprise Cloud
CODT2020 OpenStack Version Up and VMHA Masakari in Enterprise Cloud
 
kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
 

Más de NTT DATA Technology & Innovation

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)NTT DATA Technology & Innovation
 

Más de NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
 

PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)

  • 1. © 2022 NTT DATA Corporation 【B2】 PGOを用いたPostgreSQL on Kubernetes入門 2022年11月11日 PostgreSQL Conference Japan 2022 株式会社NTTデータ 技術開発本部 加藤 慎也
  • 2. © 2022 NTT DATA Corporation 2 自己紹介 • 名前 • 加藤 慎也 @ShinyaKato_ • 所属 • 株式会社NTTデータ 技術開発本部 • 業務 • PostgreSQLコミュニティでの開発 • PostgreSQLの研究開発やサポート業務
  • 3. © 2022 NTT DATA Corporation 3 本講演について • 講演資料はNTTデータのSlideShareで公開しています • https://www.slideshare.net/nttdata-tech • 講演資料に記載の情報は2022/11/1時点の情報となります • スペースの都合上、コマンドの実行結果は一部省略している場合があります • 質問は講演終了後やTwitterなどでお願いします
  • 4. © 2022 NTT DATA Corporation 4 アジェンダ Kubernetes上でPostgreSQLを運用管理するためのOperatorが複数 リリースされており、その1つであるPGOの機能や使い方、注意点を解説します! • KubernetesとOperator • PGOの基本機能 • PGOを使用する上での注意点
  • 5. © 2022 NTT DATA Corporation 5 © 2022 NTT DATA Corporation 5 01 KubernetesとOperator
  • 6. © 2022 NTT DATA Corporation 6 Kubernetes(K8s)とは • コンテナ化されたアプリケーションのデプロイ、スケーリング、死活監視などを 自動化するためのコンテナオーケストレーションツール • 初回リリース:2014年6月7日 • 最新版:1.25 デプロイ スケーリング 死活監視 コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ
  • 7. © 2022 NTT DATA Corporation 7 K8sクラスタのコンポーネント • Pod • K8sでコンテナを管理するための最小単位で、Pod内に1つ以上のコンテナを内包 • K8sクラスタはPodを実行するノードと呼ばれるワーカマシンの集合 • ワーカノード:Podをホスティング • コントロールプレーン(マスタノード):ワーカノードとPodを管理
  • 8. © 2022 NTT DATA Corporation 8 K8sの主な機能 - Infrastructure as Code (IaC) • YAMLで記述した宣言的なコード(マニフェスト)によってリソースの管理 • 同一環境の再現や複製、環境のGitでの管理が可能 apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:latest nginx.yaml apply Pod Pod Pod Pod Pod nginx- Pod
  • 9. © 2022 NTT DATA Corporation 9 K8sの主な機能 - (オート)スケーリング • 同じコンテナイメージを元に複数のコンテナ(レプリカ)をデプロイでき、 負荷分散や耐障害性の確保が可能 • 負荷に応じたオートスケールも可能 apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-replica spec: replicas: 3 selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:latest nginx.yaml apply Pod Pod Pod Pod Pod nginx- Pod nginx- Pod nginx- Pod
  • 10. © 2022 NTT DATA Corporation 10 K8sの主な機能 - セルフヒーリング • K8sはコンテナプロセスのヘルスチェックを行っている • 例えば、ReplicaSetリソースに定義されたレプリカ数と実際にデプロイされている Pod数を突合して、乖離があれば新たにPodをデプロイ ReplicaSet(レプリカ数5) Pod Pod Pod Pod Pod Pod
  • 11. © 2022 NTT DATA Corporation 11 K8sの主な機能 - リソースとコントローラ • セルフヒーリングを実現する仕組みのように、 K8sには様々なリソースとその状態を管理するコントローラが存在する リソース コントローラ 主な役割 ReplicSet ReplicaSet Controller Podのレプリカを作成し、指定したPod数を維持 Deployment Deployment Controller 複数のReplicaSetを管理 (ローリングアップデート等を実現) DaemonSet DaemonSet Controller 各ノードにPodを1つずつ配置 StatefulSet StatefulSet Controller データを永続化するための仕組みを提供 … … …
  • 12. © 2022 NTT DATA Corporation 12 K8s上でのデータベース運用 • データベース運用者の視点 • 前述したK8sの標準のリソースとコントローラだけでは、 データベースの管理に生じる複雑な構築・運用作業の自動化を実装することが困難 • 例えば、PostgreSQLのHAクラスタを構築する場合 • PostgreSQLとクラスタウェア(PacemakerやPatroniなど)の構築 • 設定ファイルに適切なパラメータを設定 • レプリケーションロールの作成 • など・・・ これらの設定の自動化をK8s標準機能で実現することは困難
  • 13. © 2022 NTT DATA Corporation 13 K8s Operator • カスタムリソース(Custom Resource) • K8sの標準リソースを利用しつつ、独自のリソース(あるべき状態)を定義 • カスタムコントローラ(Custom Controller) • カスタムリソースに示したあるべき状態を保持するためのコントローラ • Operator • カスタムリソース+カスタムコントローラにより、前述の運用作業の自動化を実現 Operator カスタム リソース カスタム コントローラ = +
  • 14. © 2022 NTT DATA Corporation 14 OperatorによるK8s上のPostgreSQL運用管理 • Operatorにより機能の差異はあるが、 このようなPostgreSQLの環境を簡単に実現可能 バックアップ モニタリング ログ集約 PostgreSQL HA構成 PostgreSQL PostgreSQL HA構成 セットアップ 操作・監視 ユーザ
  • 15. © 2022 NTT DATA Corporation 15 PostgreSQL Operator • OperatorHub.ioに様々なOperatorが登録されており、 PostgreSQLのOperatorも複数登録されている • OperatorHub.ioでPostgreSQLで検索した結果
  • 16. © 2022 NTT DATA Corporation 16 PostgreSQL Operator • 代表的なPostgreSQL Operatorの比較 本講演ではGitHubのスター数が最も多いPGOについて解説します! PGO postgres-operator StackGres メイン開発企業 Crunchy Data Zalando OnGres 初回リリース 2017年5月 2018年8月 2019年9月 最新バージョン 5.2.0 1.8.2 1.3.3 ライセンス Apache 2.0 MIT AGPLv3 スター数 3,012 2,877 487(GitHub), 75 (Gitlab) コントリビュータ数 93 143 17 メイン実装言語 Go Go Java
  • 17. © 2022 NTT DATA Corporation 17 © 2022 NTT DATA Corporation 17 02 PGOの基本機能
  • 18. © 2022 NTT DATA Corporation 18 PGOの概要 • PostgreSQLコア開発者が複数所属している企業であるCrunchy Dataが メインで開発・OSS提供しているOperator • GitHubのスター数は3,012と人気のOperatorのうちの1つ • PostgreSQL 10~14に対応
  • 19. © 2022 NTT DATA Corporation 19 PGOのコンポーネント • PGOは複数のソフトウェアから構成 クライアント PgBouncer postgres- exporter Patroni postgres- exporter Patroni postgres- exporter Patroni pgBackRest PVC AWS GCP Azure コネクションプーリング HA バックアップ モニタリング
  • 20. © 2022 NTT DATA Corporation 20 今回構築する環境の完成図 • PGOの基本機能を紹介しながら環境を構築します K8sクラスタ ワーカ1 コントロールプレーン Alertmanager ワーカ2 ワーカ3 ワーカ4 クライアント オブジェクトストレージ バックアップ primary standby standby HA
  • 21. © 2022 NTT DATA Corporation 21 使用バージョン • Rocky Linux 8.6 • Docker 20.10.17 • kind 0.14.0 • Kubernetes 1.24 • PGO 5.20
  • 22. © 2022 NTT DATA Corporation 22 K8s構築 • Docker、K8s(kind)、kubectlのインストール • PGOは、Kubernetes、OpenShift、Rancher、GKE、EKS、AKS、VMware Tanzu で使用可 • kindでコントロールプレーン1ノード、ワーカ4ノードのK8sを構築 • 構築手順は省略
  • 23. © 2022 NTT DATA Corporation 23 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント
  • 24. © 2022 NTT DATA Corporation 24 PGOのインストール • CrunchyのGitHubにあるサンプルを使用してPGOをインストール $ git clone https://github.com/CrunchyData/postgres-operator-examples.git $ cd postgres-operator-examples $ git checkout b0f4500 $ kubectl apply -k kustomize/install/namespace $ kubectl apply --server-side -k kustomize/install/default $ kubectl get pods -n postgres-operator NAME READY STATUS RESTARTS AGE pgo-848fbd558f-7hjfn 1/1 Running 0 41s pgo-upgrade-6b4b685577-tzqx9 1/1 Running 0 41s PGOのPodとPostgreSQLのメジャー バージョンアップに使用するPodが作成される
  • 25. © 2022 NTT DATA Corporation 25 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント 現時点では起動するノードを固定していないため、 別のノードに起動する場合があります。
  • 26. © 2022 NTT DATA Corporation 26 DBクラスタ作成 • デフォルトのマニフェストでDBクラスタ作成 $ kubectl apply --server-side -k kustomize/postgres $ kubectl get pods -n postgres-operator -l postgres- operator.crunchydata.com/instance-set=instance1 -o wide NAME READY STATUS NODE hippo-instance1-gdhr-0 4/4 Running kind-worker4 hippoという名前のPostgreSQLのPodがワーカ4に起動
  • 27. © 2022 NTT DATA Corporation 27 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント
  • 28. © 2022 NTT DATA Corporation 28 PostgreSQLの起動確認 • kubectl execコマンドでPod内のPostgreSQLコンテナに接続 $ kubectl exec -it -n postgres-operator hippo-instance1-gdhr-0 -- psql Defaulted container "database" out of: database, replication-cert-copy, pgbackrest, pgbackrest-config, postgres-startup (init), nss-wrapper-init (init) psql (14.5) Type "help" for help. postgres=# SELECT version(); version --------------------------------------------------------------------------------------------------------- PostgreSQL 14.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-10), 64-bit (1 row) PostgreSQLに接続し、SQLを実行できることを確認できる
  • 29. © 2022 NTT DATA Corporation 29 レプリカの作成 • マニフェストにレプリカ数を設定して3冗長のDBクラスタを作成 $ git diff diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml index f736b7e..fc30f17 100644 --- a/kustomize/postgres/postgres.yaml +++ b/kustomize/postgres/postgres.yaml @@ -7,6 +7,7 @@ spec: postgresVersion: 14 instances: - name: instance1 + replicas: 3 dataVolumeClaimSpec: accessModes: - "ReadWriteOnce“ レプリカ数を3に設定
  • 30. © 2022 NTT DATA Corporation 30 レプリカインスタンスの作成 • レプリカ数を設定して3冗長のDBクラスタを作成 $ kubectl apply --server-side -k kustomize/postgres $ kubectl get pods -n postgres-operator -l postgres- operator.crunchydata.com/instance-set=instance1 -o wide NAME READY STATUS NODE hippo-instance1-27rc-0 4/4 Running kind-worker hippo-instance1-gdhr-0 4/4 Running kind-worker4 hippo-instance1-qb5t-0 4/4 Running kind-worker4 変更をapply PostgreSQLのPodが3つ起動
  • 31. © 2022 NTT DATA Corporation 31 自動フェイルオーバ • いずれかのPodに異常が発生したとき、PGOが自動でPodを再起動する デモ動画
  • 32. © 2022 NTT DATA Corporation 32 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント standby HA primary standby
  • 33. © 2022 NTT DATA Corporation 33 各インスタンスが起動するワーカノードの固定 • 複数のワーカノードが存在するとき、 特定のワーカノードにPostgreSQLのPodを割り当てたい場合がある • 高性能なSSD、高速なネットワークを備えているなど • Node Affnityを用いて特定のノードにPodを割り当てる • ワーカノードとPodの両方で設定が必要 DBサーバ用ワーカ Webサーバ用ワーカ DBサーバ用ワーカに スケジューリングしたい
  • 34. © 2022 NTT DATA Corporation 34 各インスタンスが起動するワーカノードの固定 • ワーカノードにラベル付けをする $ kubectl label nodes kind-worker diskType=ssd $ kubectl label nodes kind-worker2 diskType=ssd $ kubectl label nodes kind-worker3 diskType=ssd $ kubectl label nodes kind-worker4 diskType=hdd $ kubectl get nodes --show-labels NAME STATUS LABELS kind-control-plane Ready ... kind-worker Ready diskType=ssd,... kind-worker2 Ready diskType=ssd,... kind-worker3 Ready diskType=ssd,... kind-worker3 Ready diskType=hdd,... diskType=ssd diskType=ssd diskType=ssd diskType=hdd ワーカ1 ワーカ2 ワーカ3 ワーカ4
  • 35. © 2022 NTT DATA Corporation 35 各インスタンスが起動するワーカノードの固定 • マニフェストにNode Affinityの設定をする diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml instances: - name: instance1 replicas: 3 + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: diskType + operator: In + values: + - ssd diskType=ssdの ノードに起動する
  • 36. © 2022 NTT DATA Corporation 36 各インスタンスが起動するワーカノードの固定 • マニフェストを適用 $ kubectl apply --server-side -k kustomize/postgres $ kubectl get pods -n postgres-operator -l postgres- operator.crunchydata.com/instance-set=instance1 -o wide NAME READY STATUS NODE hippo-instance1-j4rd-0 4/4 Running kind-worker hippo-instance1-jqz5-0 4/4 Running kind-worker hippo-instance1-pslx-0 4/4 Running kind-worker2 ワーカ4にスケジューリング されなくなった
  • 37. © 2022 NTT DATA Corporation 37 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント primary standby standby HA
  • 38. © 2022 NTT DATA Corporation 38 各インスタンスを各ノードに適切に分散 • Topology Spread Constraintsを使用することで、 Region/Zone/Nodeなどの単位でPodを分散配置できる • Region/Zone/Node障害発生時にも業務を継続できる 分散配置しない場合 AvailabilityZone A 分散配置する場合 AvailabilityZone A AvailabilityZone B AvailabilityZone Bで 業務継続できる
  • 39. © 2022 NTT DATA Corporation 39 AvailabilityZoneの設定 • ワーカノードにラベル付けをする $ kubectl label nodes kind-worker availabilityZone=A $ kubectl label nodes kind-worker2 availabilityZone=B $ kubectl label nodes kind-worker3 availabilityZone=C $ kubectl get nodes --show-labels NAME STATUS LABELS kind-control-plane Ready ... kind-worker Ready availabilityZone=A,... kind-worker2 Ready availabilityZone=B,... kind-worker3 Ready availabilityZone=C,... kind-worker3 Ready ... availabilityZone=A ワーカ1 ワーカ2 availabilityZone=B ワーカ3 availabilityZone=C
  • 40. © 2022 NTT DATA Corporation 40 各インスタンスを各ノードに適切に分散 • マニフェストにTopology Spread Constraintsの設定をする diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: availabilityZone + whenUnsatisfiable: DoNotSchedule + labelSelector: + matchLabels: + postgres-operator.crunchydata.com/instance-set: instance1 + postgres-operator.crunchydata.com/cluster: hippo availabilityZoneで分散する
  • 41. © 2022 NTT DATA Corporation 41 各インスタンスを各ノードに適切に分散 • マニフェストを適用 $ kubectl apply --server-side -k kustomize/postgres $ kubectl get pods -n postgres-operator -l postgres- operator.crunchydata.com/instance-set=instance1 -o wide NAME READY STATUS NODE hippo-instance1-bzkw-0 4/4 Running kind-worker3 hippo-instance1-cmkl-0 4/4 Running kind-worker hippo-instance1-m82d-0 4/4 Running kind-worker2 ワーカ1,2,3に分散して スケジューリングされるようになった
  • 42. © 2022 NTT DATA Corporation 42 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン ワーカ2 ワーカ3 ワーカ4 クライアント primary standby standby HA
  • 43. © 2022 NTT DATA Corporation 43 モニタリングスタックのインストール • PostgreSQLの性能情報をPrometheusにエクスポートするための postgres-exporterコンテナをPostgreSQL Podに導入する diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml + monitoring: + pgmonitor: + exporter: + image: registry.developers.crunchydata.com/crunchydata/crunchy- postgres-exporter:ubi8-5.2.0-0 postgres- exporter メトリクス
  • 44. © 2022 NTT DATA Corporation 44 モニタリングスタックのインストール • Prometheus、Alertmanager、Grafanaをワーカ4にインストール • Node AffinityとTopology Spread Constraintsの設定は前と同様 $ kubectl apply --server-side -k kustomize/monitoring $ kubectl get pods -n postgres-operator -l app.kubernetes.io/name=postgres- operator-monitoring -o wide NAME READY NODE crunchy-alertmanager-56b5bc54b-4c7f5 1/1 kind-worker4 crunchy-grafana-7fc46b99fd-m4c45 1/1 kind-worker4 crunchy-prometheus-6b67c667df-czbjd 1/1 kind-worker4 モニタリング関連の YAMLファイルが格納 Prometheus、Alertmanager、 GrafanaのPodが起動
  • 45. © 2022 NTT DATA Corporation 45 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン Alertmanager ワーカ2 ワーカ3 ワーカ4 クライアント primary standby standby HA
  • 46. © 2022 NTT DATA Corporation 46 PostgreSQLへの接続 • PGOはデフォルトでClusterIPというServiceを作成する • ClusterIPはK8s内からの接続にしか使用できないため、 NodePortを作成し、K8s外からの接続を実現する クライアント ClusterIP ClusterIP クライアント ClusterIP NodePort NodePort
  • 47. © 2022 NTT DATA Corporation 47 Primary接続用NodePortの作成 • NodePortのマニフェストを作成 apiVersion: v1 kind: Service metadata: name: primary-nodeport spec: type: NodePort selector: postgres-operator.crunchydata.com/role: master postgres-operator.crunchydata.com/cluster: hippo ports: - port: 5432 targetPort: 5432 nodePort: 30001 PrimaryのPodかつ 名前がhippoのPodに接続 Podの5432ポートを ノードの30001ポートに
  • 48. © 2022 NTT DATA Corporation 48 接続設定 • pg_hba.confの設定を行う diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: + patroni: + dynamicConfiguration: + postgresql: + pg_hba: + - host all all 0.0.0.0/0 trust 全てのデータベース、ユーザ、接続元 からのTCP/IPでの接続を許可
  • 49. © 2022 NTT DATA Corporation 49 Primaryへ接続 • ノードのIPアドレスを確認 $ kubectl get nodes -o wide NAME STATUS ROLES VERSION INTERNAL-IP kind-control-plane Ready control-plane v1.24.7 172.18.0.4 kind-worker Ready <none> v1.24.7 172.18.0.2 kind-worker2 Ready <none> v1.24.7 172.18.0.6 kind-worker3 Ready <none> v1.24.7 172.18.0.5 kind-worker4 Ready <none> v1.24.7 172.18.0.3
  • 50. © 2022 NTT DATA Corporation 50 Primaryへ接続 • いずれかのノードのIPアドレス、NodePortのポート番号にpsqlで接続 $ psql -h 172.18.0.6 -p 30001 -U postgres postgres psql (14.5) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. postgres=# 同様の手順を踏めば Standbyにも接続ができる
  • 51. © 2022 NTT DATA Corporation 51 Primary、Standbyに接続して適切にレプリケーションされているか確認 • Primary、StandbyそれぞれにSQLを実行 デモ動画
  • 52. © 2022 NTT DATA Corporation 52 Grafana接続用NodePortの作成 • NodePortのマニフェストを作成 apiVersion: v1 kind: Service metadata: name: grafana-nodeport spec: type: NodePort selector: app.kubernetes.io/name: postgres-operator-monitoring name: crunchy-grafana ports: - port: 3000 targetPort: 3000 nodePort: 30003 Podの3000ポートを ノードの30003ポートに
  • 53. © 2022 NTT DATA Corporation 53 Grafana Dashboardへアクセス • ブラウザからNodeのIPアドレス:NodePortのポート番号へアクセス • ユーザ名admin、パスワードadminでログイン
  • 54. © 2022 NTT DATA Corporation 54 Grafana Dashboardへアクセス • 左のメニューからDashbords>Manage>PostgreSQLDetailsを開く
  • 55. © 2022 NTT DATA Corporation 55 現時点の環境図 K8sクラスタ ワーカ1 コントロールプレーン Alertmanager ワーカ2 ワーカ3 ワーカ4 クライアント primary standby standby HA
  • 56. © 2022 NTT DATA Corporation 56 バックアップ • PGOに同梱のpgBackRestを使用する • 自動/手動でバックアップの取得、バックアップ保持ポリシーの設定、PITRが可能 • K8sのストレージだけでなく、Amazon S3(S3 compatible含む)、 Google Cloud Storage、Azure Blob Storageへの保存も可能 pgBackRest Amazon Simple Storage Service (Amazon S3) pgBackRest
  • 57. © 2022 NTT DATA Corporation 57 事前準備 • 今回はMinIOをローカルに立てて、バックアップ用のオブジェクトストレージとする • 構築手順は省略 • MinIOのWebUIからバックアップ用バケットを作成
  • 58. © 2022 NTT DATA Corporation 58 オブジェクトストレージ認証情報の設定 • kustomize/s3のマニフェストを使用 • 設定ファイルにMinIOの認証情報を設定 $ cp kustomize/s3/s3.conf.example kustomize/s3/s3.conf $ vi s3.conf [global] repo1-s3-key=minioadmin repo1-s3-key-secret=minioadmin
  • 59. © 2022 NTT DATA Corporation 59 バックアップ基本設定 • マニフェストにバックアップの設定を行う • 基本設定は以下 backups: pgbackrest: image: registry.developers.crunchydata.com/crunchydata/crunchy- pgbackrest:ubi8-2.40-1 configuration: - secret: name: pgo-s3-creds global: repo1-s3-uri-style: path repos: - name: repo1 s3: bucket: hippo-s3-backups endpoint: http://127.0.0.1:9000 region: hoge オブジェクトストレージのエンドポイント、 バケット名、リージョンを設定 (MinIOなどのS3互換でリージョンが存 在しない場合は任意の文字列)
  • 60. © 2022 NTT DATA Corporation 60 自動バックアップ設定 • バックアップ保持ポリシー、バックアップ種別、バックアップ取得時刻の設定 global: repo1-s3-uri-style: path + repo1-retention-full: 30 repos: - name: repo1 + schedules: + full: "0 1 * * *" 30個のバックアップを保持 repo1-retention-full-type: timeの 設定をすると30日間のバックアップを保持 full:フルバックアップ differential:差分バックアップ incremental:増分バックアップ cron形式で実行タイミングを記述
  • 61. © 2022 NTT DATA Corporation 61 手動バックアップ設定 • 以下をマニフェストに設定 • kubectl annotateコマンド実行を契機にバックアップ取得を開始 backups: pgbackrest: + manual: + repoName: repo1 + options: + - --type=full $ kubectl annotate -n postgres-operator postgrescluster hippo-s3 ¥ postgres-operator.crunchydata.com/pgbackrest-backup="$(date)" full:フルバックアップ differential:差分バックアップ incremental:増分バックアップ
  • 62. © 2022 NTT DATA Corporation 62 完成図 K8sクラスタ ワーカ1 コントロールプレーン Alertmanager ワーカ2 ワーカ3 ワーカ4 クライアント オブジェクトストレージ バックアップ primary standby standby HA
  • 63. © 2022 NTT DATA Corporation 63 その他の機能 - 設定変更(Patroni) • Patroniの設定をマニフェストに記述することができる diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: + patroni: + dynamicConfiguration: + master_stop_timeout: 60
  • 64. © 2022 NTT DATA Corporation 64 その他の機能 - 設定変更(postgresql.conf) • postgresql.confの設定をマニフェストに記述することができる diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: patroni: dynamicConfiguration: master_stop_timeout: 60 + postgresql: + parameters: + autovacuum: off
  • 65. © 2022 NTT DATA Corporation 65 その他の機能 - 設定変更(pg_hba.conf) • pg_hba.confの設定をマニフェストに記述することができる diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: patroni: dynamicConfiguration: master_stop_timeout: 60 postgresql: parameters: autovacuum: off + pg_hba: + - host all all 0.0.0.0/0 trust
  • 66. © 2022 NTT DATA Corporation 66 その他の機能 - DBクラスタの停止 • spec.shutdownをtrueとすることでDBクラスタを停止できる デモ動画
  • 67. © 2022 NTT DATA Corporation 67 その他の機能 - DBクラスタのスイッチオーバ • スイッチオーバ(プライマリの切り替え)を実行できる diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: patroni: + switchover: + enabled: true + targetInstance: hippo-instance1-wm5p 切り替え先のPod名の指定は任意
  • 68. © 2022 NTT DATA Corporation 68 その他の機能 - DBクラスタの手動フェイルオーバ • 手動でのフェイルオーバを実行できる diff --git a/kustomize/s3/postgres.yaml b/kustomize/s3/postgres.yaml spec: patroni: switchover: enabled: true targetInstance: hippo-instance1-wm5p + type: Failover 切り替え先のPod名の指定は必須
  • 69. © 2022 NTT DATA Corporation 69 その他の機能 - データベースの初期化 • DBクラスタ作成時にSQLスクリプトを自動実行できる • 事前にSQLを記述したConfigMapを作成しておき、 DBクラスタのマニフェストに作成したConfigMap名を記述 apiVersion: v1 kind: ConfigMap metadata: name: init-sql data: init.sql: | CREATE EXTENSION pg_stat_statements; CREATE TABLE test_table (i INT);
  • 70. © 2022 NTT DATA Corporation 70 その他の機能 - データベースの初期化 • DBクラスタ作成時にSQLスクリプトを自動実行できる • 事前にSQLを記述したConfigMapを作成しておき、 DBクラスタのマニフェストに作成したConfigMap名を記述 diff --git a/kustomize/s3/postgres.yaml b/kustomize/s3/postgres.yaml spec: + databaseInitSQL: + key: init.sql + name: init-sql
  • 71. © 2022 NTT DATA Corporation 71 その他の機能 - マイナーバージョンアップ • マイナーバージョンアップを試すために、バージョン14.4のPostgreSQLを起動 diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml spec: pgmonitor: exporter: image: registry.developers.crunchydata.com/crunchydata/crunchy- postgres-exporter:ubi8-5.2.0-0 - image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8- 14.5-1 + image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8- 14.4-0 postgresVersion: 14 instances: - name: instance1 イメージ名のバージョンを変更
  • 72. © 2022 NTT DATA Corporation 72 その他の機能 - マイナーバージョンアップ • イメージのバージョンを変更し適用するとローリングアップデートが開始 デモ動画
  • 73. © 2022 NTT DATA Corporation 73 その他の機能 - メジャーバージョンアップ • PGO 5.1.0からメジャーバージョンアップにも対応
  • 74. © 2022 NTT DATA Corporation 74 © 2022 NTT DATA Corporation 74 03 PGOを使用する上での注意点
  • 75. © 2022 NTT DATA Corporation 75 WebUIがない • postgres-operator(Zalando)、StackGres(OnGres)には WebUIが付属しているがPGOには付属していない postgres-operator(Zalando) StackGres(OnGres)
  • 76. © 2022 NTT DATA Corporation 76 PGOバージョン4系との互換性がない • 最新版のPGOバージョン5系は、バージョン4系と大きく異なっており、 互換性がない • バージョン4系の最新版は4.7.7で、使用できるPostgreSQLの最新バージョン はPostgreSQL 13.8であり、PostgreSQL 14を使用できない • ドキュメントやWebでの検索結果はどちらのバージョンの記述かを 見極める必要がある
  • 77. © 2022 NTT DATA Corporation 77 商用利用する場合はSupport Subscriptionに登録が必要 • Crunchy Dataの提供するDockerイメージは Crunchy Data Developer Programの利用規約をもとに提供されている • 開発目的の場合のみ無料でソフトウェアを使用することができる • Dockerイメージを独自にビルドする場合も、 Dockerfile内でのPostgreSQLのインストールにCrunchy Data提供のRPM を使用しているため、完璧なDockerイメージの再現は困難
  • 78. © 2022 NTT DATA Corporation 78 使用できる拡張機能に制限がある • 以下の拡張機能がPGOに同梱されている • contribモジュール • PgBouncer、PostGIS、orafce、pgAudit、pgAudit Analyze、pg_cron、 pg_partman、pgnodemx、set_user、TimescaleDB、wal2json、pgRouting • 他の拡張機能を使用する場合には独自にDockerイメージをビルドする必要が ある
  • 79. © 2022 NTT DATA Corporation 79 一部の設定を変更することができない • initdb時のパラメータ • ロケールを設定したい場合、データベース単位での設定が必要 • Patroni管理、PGO管理のパラメータ • HA関連パラメータ、バックアップ関連パラメータ、その他 • 例えば、shared_preload_librariesに必ずpgAuditが設定されてしまう // PostgreSQLParameters sets the parameters required by pgAudit. func PostgreSQLParameters(outParameters *postgres.Parameters) { // Load the shared library when PostgreSQL starts. // PostgreSQL must be restarted when changing this value. // - https://github.com/pgaudit/pgaudit#settings // - https://www.postgresql.org/docs/current/runtime-config-client.html shared := outParameters.Mandatory.Value("shared_preload_libraries") outParameters.Mandatory.Add("shared_preload_libraries", strings.TrimPrefix(shared+",pgaudit", ",")) } internal/pgaudit/postgres.go PGO側が常にpgauditを設定
  • 80. © 2022 NTT DATA Corporation 80 ログ収集の機能がない • StackGresにはPostgreSQLやPatroniログを各Podから収集する機能がある がPGOにはない • 独自にFluentdやGrafana Lokiなどのソフトウェアを導入する必要がある
  • 81. © 2022 NTT DATA Corporation 81 YAML上での設定変更を心がける必要がある • Pod内の設定ファイルを直接書き換え • Podが起動している間はその値が設定されるが、Podが再起動すると設定内容が消える • YAMLでの設定値との乖離が発生 • ALTER SYSTEMコマンドでの設定変更 • Podが再起動しても設定内容は消えない(postgresql.auto.confは削除されない) • YAMLでの設定値を常に上書きしてしまい、YAMLでの設定値との乖離が発生 • YAMLでの設定変更に慣れる必要がある • PGO特有の注意点ではないが、Operatorによって挙動が異なる場合がある
  • 82. © 2022 NTT DATA Corporation 82 まとめ • PostgreSQL Operatorの1つであるPGOの紹介をしました • PGOを活用することで、HA構成のPostgreSQLの構築、バックアップ/リストア、 モニタリング、バージョンアップなどを簡単に行うことができる • PGOの使用にはいくつかの注意点がある
  • 83. © 2022 NTT DATA Corporation 83 参考文献 • https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/ • https://www.crunchydata.com/developers/terms-of-use • https://min.io/docs/minio/linux/index.html • https://kind.sigs.k8s.io/docs/user/quick-start/ • https://access.crunchydata.com/documentation/postgres-operator/v5/
  • 84. © 2022 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。