Kubernetes を用いた PostgreSQL の運用
2020-10-20

SRA OSS, Inc. 日本支社
彭 博 (ペン ボ)© 2020 SRA OSS, Inc. Japan1

自己紹介ペン ボ• 名前： 彭 博 (Bo Peng)
pengbo@sraoss.co.jp• 所属：SRA OSS, Inc. 日本支社
基盤技術グループ• 職務：• PostgreSQL 以外の OSS 全般の技術サポート• ミドルウェアの構築• PostgreSQL クラスタ管理ツールである Pgpool-II 開発者© 2020 SRA OSS, Inc. Japan2

概要• Kubernetes の概要・特徴• Kubernetes 上で PostgreSQL を運用するメリット• PostgreSQL Operator とは• 各 PostgreSQL Operator の機能紹介及び活用例© 2020 SRA OSS, Inc. Japan3

Kubernetes とはコンテナの管理を自動化するためのプラットフォーム• Kubernetes の歴史• Google 社内で10年以上利用されていた大規模コンテナクラスタ管理システムを元に作られた OSS• オープンソースとして公開 (2014)• Cloud Native Computing Foundation (CNCF) に移管 (Version 1.0、2015)• CNCF によって開発・メンテナンス (2015～)• 大規模クラスタをサポート
https://kubernetes.io/docs/setup/best-practices/cluster-large/

項目

サポート対象

ノード数5000 台以下

Pod 数

150,000 以下

コンテナ数

300,000 以下

1ノードあたりの pod 数

100 以下© 2020 SRA OSS, Inc. Japan

4

Kubernetes の特徴
コンテナの死活監視

リソース管理スケーリングサービス
ディスカバリセルフヒーリング

スケジューリングローリング
アップデートロードバランシング

宣言的設定
Reconciliation Loop(突合せループ)© 2020 SRA OSS, Inc. Japan5

宣言的設定• 宣言的設定 (マニフェスト) により、あるべき姿を定義# マニフェスト
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:labels:app: nginx
spec:
containers:- name: nginx
image: nginx:1.14.2
ports:- containerPort: 80• 構築や管理の自動化• 手作業によるミスがなくなる• 大規模インフラに対してスケーラビリティを持てる• インフラ構成をマニフェスト
で定義でき、管理しやすい• 問題があったときに更新履歴を使って過去の状態に戻せる© 2020 SRA OSS, Inc. Japan

6

Reconciliation Loop (突合せループ)• ユーザがシステムの「あるべき姿」を定義• Kubernetes はシステムを定義された「あるべき姿」に収束させる「あるべき姿」と「現在の状態」の差をなくす「あるべき姿」
を定義

Reconciliation
あるべき状態
現在の状態
Loop

現在の状態を監視

マニフェスト

あるべき姿と現状を突き合わせる© 2020 SRA OSS, Inc. Japan7

Reconciliation Loop (突合せループ)
ReplicaSet# マニフェスト
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: sample-rs
spec:

replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:labels:app: sample-app
spec:
containers:- name: nginx
image: nginx:1.14.2
ports:- containerPort: 80

PodA

Pod
B

PodC

Node 1

Node 2

Node 3

定義された Pod の数を維持し続ける
セルフヒーリング••

Pod 障害時に Pod の数が定義された数を満たすように Podを再作成
ノード障害時にも定義された数を維持するように別のノードで Pod を起動

ReplicaSet

PodA
Node 1© 2020 SRA OSS, Inc. Japan

PodB

PodC

Node 2

PodC
Node 38これまでのデータベース管理者の悩み• PostgreSQL クラスタ環境を構築するのは面倒• テスト・開発環境の用意が大変• 監視、バックアップ、障害対策など、運用の手間がかかる• 負荷の急な増加に即座に対応できない• データ量増加に伴うディスク容量の不足© 2020 SRA OSS, Inc. Japan

9

Kubernetes 上で PostgreSQL を運用するメリット• PostgreSQL HA クラスタ環境を自動的に構築・運用管理できる• バックアップ・リカバリの自動化• PostgreSQL の検証環境・テスト環境をすぐに構築・削除できる• 負荷に応じて、レプリカの台数を増減可能• 可用性・耐障害性の向上 (Multi-Cluster、Multi-Zone)• Namespace により、PostgreSQL クラスタをサービスごとに隔離可能 (Multi-Tenant)• 必要に応じて、ボリュームサイズ拡張可能• PostgreSQL のバージョン管理が容易にできる© 2020 SRA OSS, Inc. Japan10

PostgreSQL Operator とは• Operator• Kubernetes の本来の機能を拡張し、様々な管理をコードとして記述し、自動化する• PostgreSQL Operator• PostgreSQL の管理タスクを自動化• バックアップ• 障害時の対応• 監視など• PostgreSQL クラスタの Primary/Standby の役割管理© 2020 SRA OSS, Inc. Japan11

PostgreSQL Operator: Zalando & Crunchy

Crunchy

Zalando
開発元

Zalando SE

Crunchy Data

ライセンス

MIT License

Apache License 2.0

対応バージョン

PostgreSQL 9.6+

PostgreSQL 9.5+

動作環境

Amazon EKS, Google Cloud Engine (GKE),Red Hat OpenShift

Amazon EKS, Google Kubernetes Engine (GKE), Red Hat
OpenShift, VMWare Enterprise PKS, IBM Cloud Pak Data

プロジェクトURL

https://github.com/zalando/postgres-operator

https://github.com/CrunchyData/postgres-operator© 2020 SRA OSS, Inc. Japan

12

基本構成図S3
PostgreSQL
Operator
PostgreSQL
Cluster

Replica DB Service

Primary DB Service
Pod

Pod

Pod

バックアップ...
Primary

Replica 1

Replica N

Data
PVC

Data
PVC

Data
PVC

© 2020 SRA OSS, Inc. Japan

WALアーカイブ

13

PostgreSQL Operator の機能紹介及び活用例© 2020 SRA OSS, Inc. Japan14

機能 (1) : PostgreSQL クラスタの自動構築

自動デプロイ

専用 CLI 対応
GUI 管理インターフェイ
スの有無

Zalando

Crunchy〇×〇〇〇×© 2020 SRA OSS, Inc. Japan15

機能 (1) : PostgreSQL クラスタの自動構築
PostgreSQL
Cluster# マニフェスト
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: acid-minimal-cluster
namespace: default
spec:
teamId: "acid"volume:size: 1Gi
numberOfInstances: 3

Service を作成

Deployreplicas: 3

PostgreSQL
Operator
DeployPostgreSQL Podを作成

Pod

Pod

Pod

Primary

Replica

Replica

Data
PVC

Data
PVC

Data
PVC

PVC を作成

replicas: 3CLI

Replica DB Service

Primary DB Service

Secret を作成
Secrets© 2020 SRA OSS, Inc. Japan16

機能 (2) :バックアップ・リカバリの自動化

バックアップ

リストア

ZalandoCrunchy〇〇

※S3対応

※S3対応

△〇

※手動リストアが必要
PITR〇© 2020 SRA OSS, Inc. Japan〇17活用例: 定期バックアップ• 指定した時刻にバックアップを自動的に行う• 取得したバックアップや WAL アーカイブは Amazon S3 に保存できる
PostgreSQL
Operator

CronJobbackup
PG Cluster

WAL archive

S3backup© 2020 SRA OSS, Inc. Japan18活用例: バックアップから複数テスト環境を作成
PostgreSQL
Operator

PG Cluster 1

CronJobbackup
PG Cluster 2

PG Cluster

WAL archive

backupS3© 2020 SRA OSS, Inc. Japan19

機能 (3): 可用性・耐障害性の向上
Zalando

Crunchy

自動フェイルオーバ〇〇

自動フェイルバック〇〇

Multi-Zone〇〇

Multi-Kubernetes クラスタ〇〇© 2020 SRA OSS, Inc. Japan20活用例: 高可用性・耐障害性 - クラスタ内フェイルオーバ
Primary Pod に障害が発生した場合• Replica が自動的に Primary に昇格• 新しい Replica Pod が作成される

PostgreSQL
Operator
PostgreSQL
Cluster

Pod

Primary
PodReplica© 2020 SRA OSS, Inc. Japan

Replica
Pod

Primary

Replica21活用例: 高可用性・耐障害性 - クラスタ間フェイルオーバ•2つの Kubernetes クラスタを用意•Cluster #1•••

PostgreSQL Active Cluster•

S3 にバックアップとWALアーカイブを保存

Cluster#2•

PostgreSQL Standby Cluster•S3 から変更を適用

Cluster #1 に障害が発生した場合•Standby Cluster が Active Cluster に昇格可能

S3Cluster #1

Cluster #2

PostgreSQL
Operator

PostgreSQL
Operator

PG ActiveCluster

PG Standby
Cluster(手動昇格)•

旧 Active Cluster は Standby Cluster として復Primary Pod

Standby Pod

旧可能 (手動降格)

Replica Pod

Replica Pod© 2020 SRA OSS, Inc. Japan

Replica Pod

Replica Pod22機能 (4)：スケーリング• スケールアウト/スケールイン• データベースサーバの台数を増加/減少させる• レプリカを増やすことで、複数のレプリカへ参照クエリを分散させる

ZalandoCrunchy

スケールイン〇〇

スケールアウト〇〇© 2020 SRA OSS, Inc. Japan23活用例：スケーリング

更新クエリ

参照クエリ

Primary DB Service

Replica DB Service

Pod

Pod

Primary

PostgreSQL
Operator

Replica

Pod

Pod

Replica

Replica

Pod
Replica

スケールアウトスケールイン

更新クエリ

参照クエリ

Primary DB Service

Replica DB Service

Pod
Primary© 2020 SRA OSS, Inc. Japan

Pod
Replica

Pod
Replica

Pod
Replica

Pod
Replica24機能 (5)：ロールベースのアクセス制御• 複数チーム・サービスが同一 Kubernetes クラスタを利用している場合は、サービスへのアクセス管理が必要になる• RBAC を設定することで、Kubernetes のアカウントに対して特定の Namespace へのアクセス権限を制御する• RBAC：ロールベースアクセス制御• Namespace：サービスを分割する方法

Zalando

CrunchySingle-Namespace〇〇Multi-Namespace〇〇© 2020 SRA OSS, Inc. Japan25

活用例： Namespace で PostgreSQL をサービスごとに分離• 複数 Namespace を管理可能

Namespace: Operator

PostgreSQLOperator• Namespace ごとにアクセス制限を設定可能• 信頼性、安全性を向上させる
Namespace: Service 1

Namespace: Service 2

Namespace: Service 3

PG Cluster 1

PG Cluster 2

PG Cluster 3

チーム Service 1

チーム Service 2© 2020 SRA OSS, Inc. Japan

チーム Service 326

機能 (6)：自動バージョンアップ
Zalando

Crunchy

自動バージョンアップ

〇〇ローリングアップデート〇×※バージョンアップに伴う停止時間なし※バージョンアップに伴う停止時間あり© 2020 SRA OSS, Inc. Japan27

活用例： ローリングアップデートによるマイナーバージョンアップ
① コンテナの Docker イメージのアップデート② Replica が新バージョンの Primary に昇格③ 元 Primary Pod が再作成され、Replica として復帰
Pod# マニフェスト
dockerImage: <dockerイメージを更新>
postgresql:
version: "12"...

①

PodPrimary
V12.1

Pod

③

PodReplica
V12.1

②

Replica
V12.1© 2020 SRA OSS, Inc. Japan

PodPrimary
V12.2

Replica
V12.2

PodPrimary
V12.2

28

その他の機能
Zalando

Crunchy

コネクションプーリング

〇〇

監視×〇

PostgreSQL のログ解析×〇

ボリュームサイズ拡張〇△※既存のクラスタのボリュームサイズを拡張できず、クラスタを複製してサイズ変更が必要© 2020 SRA OSS, Inc. Japan29活用例：便利な機能の活用
監視ダッシュボード

ログ解析ダッシュボード

PgBouncer Service

Grafana Service

pgBadger Service

PodPodPostgreSQL
Operator
PostgreSQL
Cluster

Grafana

PgBouncer

Primary DB Service

Replica DB Service

Pod

Pod

Pod

ExporterpgBadger
PostgreSQL
Replica 1...

Prometheus

Exporter

ExporterpgBadger

pgBadger

PostgreSQL
Replica N

PostgreSQL
Primary© 2020 SRA OSS, Inc. Japan30

Zalando と Crunchy のどちらを選択するか?

© 2020 SRA OSS, Inc. Japan

31

Zalando と Crunchy のどちらを選択するか?
基本的な機能は同じ
Zalando 社で本番環境での導入実績あり

PostgreSQL の専門家が開発している• Kubernetes の操作に慣れている人向け• 設定追加・変更の内容を履歴として残したい• GUI (Webインタフェース) でクラスタを管理したい• バージョンアップ時のダウンタイムは極力減らしたい••

専用コマンドで簡単に操作できるのがよい
多くの便利な機能を標準で使いたい• pgAdmin• ログ解析
• 監視CrunchyZalando© 2020 SRA OSS, Inc. Japan32

ブログ記事• SRAOSS Tech Blog https://www.sraoss.co.jp/tech-blog/• Kubernetes PostgreSQL Operatorの紹介• Zalando Postgres Operatorの紹介• Crunchy PostgreSQL Operatorの紹介© 2020 SRA OSS, Inc. Japan33

今後のイベント情報•

講演タイトル：クラウド時代の Pgpool-II の活用~ Kubernetes におけるクエリ負荷分散とモニタリング機能を備えた PostgreSQL クラスタの構築 ~•日時：
2020年10月23日 16:15～17:00•

講演者：
彭 博 (ペン ボ) SRA OSS, Inc. 日本支社
© 2020 SRA OSS, Inc. Japan34

参考情報• Kubernetes• https://kubernetes.io/ja/docs/home/• Zalando PostgreSQL Operator• https://postgres-operator.readthedocs.io/en/latest/• https://github.com/zalando/postgres-operator• Crunchy PostgreSQL Operator• https://access.crunchydata.com/documentation/postgresoperator/latest/• https://github.com/CrunchyData/postgres-operator© 2020 SRA OSS, Inc. Japan35

ご清聴ありがとうございました。

© 2020 SRA OSS, Inc. Japan36