SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
A guide of PostgreSQL on Kubernetes
~ In terms of storage ~
【 PGConf.Asia 2018 @track B#1】
2018/12/12
2
About me
 Takahiro, Kobayashi
 Database Architect, Storage Engineer
 Prefer physical storage to software-defined
About this session
 For Kubernetes Beginner
 Talking about active-standby PostgreSQL
 Not including replication
3
1. Container & Kubernetes
2. What about database on Kubernetes?
3. In terms of storage
4. Implementation: PostgreSQL on Rook
5. Actual service evaluation
6. Conclusion
Agenda
4
1. Container & Kubernetes
5
A container in a Nutshell
• Container(Docker) is the lightweight kernel-level VM.
• Needless to say, containers are useful but not enough for the high-availability system.
Node
Linux Kernel
Container Runtime(Docker)
Container Container
Container Architecture
Files
Process
Files
Process
 The container architecture provides
effective resource management.
 Containers share with Linux kernel
but have some libs/files individually.
 Container’s issue is that doesn’t contain
features which run across many nodes.
 You may not build an enterprise system
just by using containers.
6
What is Kubernetes?
• Kubernetes is a platform for managing containerized workloads and services.
• “Kubernetes” is too long to type, so it shortens as “k8s”.
<< The 3 features of Kubernetes >>
 Immutable
Not update. Delete and recreate.
 Auto-healing
Healing by itself automatically.
 Declarative settings
Declaring To-Be parameters, not procedural.
Node
Container
Node
Container
Node
Container
Container
Container Container
Kubernetes Cluster
7
What applications are suitable for Kubernetes?
• Generally speaking, “stateless” applications are suitable for Kubernetes.
• Kubernetes contains the horizontal/vertical auto-scaling function.
<< The pros with Kubernetes features >>
 Immutable
Easy to copy/deploy into other nodes.
 Auto-healing
A container can restart in any nodes.
 Declarative settings
If you collect specific parameters,
they apply by k8s automatically.
Node Node Node
Kubernetes Cluster
Horizontal auto-scaling
8
“Stateful” is NOT suitable for Kubernetes?
• It’s said stateful applications are not perfect for Kubernetes.
• Database(e.g PostgreSQL,MySQL) is typically stateful one.
<< The cons against Kubernetes features >>
 Immutable
Of course database must keep their data.
 Auto-healing
To maintain consistency, database cluster
may assign the role to containers.
 Declarative settings
Something to do when startup/shutdown.
Node Node Node
Kubernetes Cluster
Master Slave
Replicate
9
The growth of the ecosystem around Kubernetes
• The ecosystem(like a device driver) is growing up with Kubernetes.
• For example, NVIDIA announced to adapt their GPUs for Kubernetes.
c.f. https://developer.nvidia.com/kubernetes-gpu
Kubernetes on NVIDIA GPUs
 Some vendors announced their device is
able to work with Kubernetes.
 As shown left side, NVIDIA GPUs adapts
container and Kubernetes.
 Near future, more vendors/devices will
operate from k8s.
 We must realize a database system
also grows with Kubernetes.
10
2. What about database on Kubernetes?
11
A pattern of Database on Kubernetes
• An example of PostgreSQL on Kubernetes is STOLON project.
• STOLON leverages streaming replication which is the feature of PostgreSQL.
 STOLON looks like a shared-nothing type
database cluster built on k8s.
 Data is duplicated by streaming replication.
 When a master-instance is down,
one standby-instance is promoted
by sentinel components.
 Proxies are the access points for apps.
c.f. https://github.com/sorintlab/stolon
12
The case of Vitess
• Vitess is a database clustering system for horizontal scaling of MySQL.
• It was developed by YouTube and has been hosted as CNCF 16th project.
VTtablet
VTtablet
VTtablet
VTgate
app
app
app
SQL
SQL
SQL
 Vitess provides MySQL sharding in k8s.
 VTgate is working as SQL proxy and runs
divided queries into back-end VTtablets.
 Each pair of VTtablet and MySQL manages
not entire but sharded data.
 VTgate receives records from VTtablet and
merges them.
 Sharded data has built-in redundancy.
c.f. https://github.com/vitessio
13
Proposal: A simple architecture for DB on k8s
• Previous patterns of the database on Kubernetes are slightly complex.
• Therefore, we’ll try to push shared-disk database cluster into Kubernetes.
Storage[shared-disk]
Controler Controler
Node#1 Node#2
VIP
Kubernetes ClusterShared-disk Cluster
Node#1 Node#2
Distributed
storage
Clustering
(Auto-healing)
LB
14
Main issue: PostgreSQL on Kubernetes(HA)
• As shown below, there are several differences between a traditional shared-disk
cluster and Kubernetes.
Traditional shared-disk DB Feature PostgreSQL on Kubernetes(HA)
One. Primary only. how many DBs One. Primary only.
SAN/iSCSI/SDS Shared disk Cloud Storage/SAN/iSCSI/SDS
VIP (ie. keepalived) LoadBalance <Kubernetes> Service
Cluster software(ie. PaceMaker) Clustering <Kubernetes> StatefulSet
Move cluster-resources Failover/back <kubectl> drain
Stop database Planned outage <kubectl> scale replicas=0
Stop resource,
and then backup/restore
Backup/Restrore
<kubectl> scale replicas=0
and then backup/restore
15
3. In terms of storage
16
A big issue: Persistence of container’s data
• When re-creating a container, that data is usually lost.
• Container storage should make persistence and portability compatible.
<< Requirements for container storage >>
 To keep the container’s data, the individual
life-cycle is necessary for storage.
 In other words, storage avoids to
be deleted when a container is terminated.
 Because of container’s portability,
storage follows that deployment.
Node Node Node
Kubernetes Cluster
17
Kubernetes Volume Plugin by storage vendors
• Some storage vendors announced their products work well with Kubernetes.
• NetApp Trident allows a container to access storage management APIs.
 Trident is a dynamic persistent storage
orchestrator for container.
 Trident contains Kubernetes volume plugin.
 Through that plugin,
a container makes that data persistent
outside of Kubernetes cluster.
 In another perspective, Trident remakes
a typical storage to Container-Ready.
c.f. https://github.com/NetApp/trident
Volume Plugin
Orchestration
Storage Management
Kubernetes Cluster
18
Control plane
Data plane
Container-Ready VS Container-Native
• In a previous slide, we confirm the Container-Ready storage keeps data outside.
• Whereas Container-Native storage includes all components into a cluster.
Storage
Controler Controler
Node#1 Node#2
Container-Native style
Node#1 Node#2
Container-Ready style
Including
all of storage
19
Introduction: Container-Native Storage
• Several OSS/proprietary SDS are called Container-Native storage.
• Many of them based on distributed storage are deployed into Kubernetes.
Name Based on as block dev OSS/Proprietary
Rook Ceph ◎ OSS
OpenEBS --- ◎ OSS
Redhat OpenShift
Container Storage
GlusterFS △ Proprietary
StorageOS --- ◎ Proprietary
20
Picking up: Rook
• We choose Rook from Container-Native storage since it is OSS and easy to use.
• Rook is an operator to run multiple storage(block/file/object) on Kubernetes.
app
app
app  Ceph is a popular distributed storage as
using with OpenStack or else.
 Rook provides multiple storage functions
via Ceph.
 Rook deploys and maintains Ceph that is
actually in charge of storing data.
 Rook is a component named as “Operator”
of Kubernetes.
c.f. https://rook.io
https://ceph.com
21
4. Implementation: Postgresql on Rook
22
Implementation: PostgreSQL on Rook
• As a model of the database on Kubernetes, we place and run PostgreSQL on Rook.
StatefulSet
Replicas:1
 We name an architecture on the left side
as PostgreSQL on Rook from now on.
 Each component is explained in detail
in subsequent slides.
Service
23
Glossaries#1: Node & Pod
container1
container2
container3
Node
Pod
• Before showing our evaluation, we try to learn technical words in Kubernetes.
• Most basic elements in a cluster are “Node” and “Pod”.
Kubernetes Cluster
Pod
container4
Node
Pod
container5
Node
Pod
 "Node" is a VM or a physical machine
included in Kubernetes Cluster.
 "Pod" is a unit deployed and scheduled
by Kubernetes.
 One or more containers run on a “Pod”.
 What a pod includes / Which node a pod
runs on is defined by manifest files.
24
Glossaries#2: Deployment & StatefulSet
• In this slide, we get to know how pod is scheduled in a cluster.
• Kubernetes has three kinds of workload to manage pods efficiently.
Kubernetes Cluster
Deployment
Replicas:2
container1
Node
Pod
container1
Node
Pod
StatefulSet
Replicas:1
container2
container3
Pod
 Both of “Deployment” and “StatefulSet”
are able to manage pods among nodes.
 "Deployment" manages pods in parallel and
random, but "StatefulSet" handles pods
sequentially and permanently.
 We skip the explanation of "DaemonSet"
in this session.
25
Glossaries#3: Service
• “Service” has the special meaning in Kubernetes terms.
• Simple say, it runs as a kind of software load balancer.
Kubernetes Cluster
Deployment
Replicas:2
container1
Node
Pod
container1
Node
Pod
 At first, “Service” discovers active pods
from StatefulSet/Deployment.
 If applications throw a request to “Service”,
it distributes to the suitable pod based on
defined rules.
 When the pod is down, “Service” removes
it from a kind of sets automatically.
Service
26
Kubernetes Cluster
Glossaries#4: Persistent Volume
• As we have already seen, data persistence is a big issue when using containers.
• Kubernetes prepares “PV” and “PVC” architecture to store data persistently.
container
Node
Pod
Persistent
Volume
Persistent
Volume Claim
To prepare PV
and physical storage
= in charge of Ops
To Write PVC
= in charge of Dev
 Persistent Volume (abbreviated PV) is tied to
a physical storage unit.
 Permanent volume claim (PVC) requests
a certain volume from a cluster.
 Generally, PV is prepared by administrators
before developing an application, PVC is
coded by developers after that.
27
Repeated: PostgreSQL on Rook
• According to the terms of Kubernetes, the architecture is StatefulSet that
mounts PV provided by Rook.
 StatefulSet is in charge of running
PostgreSQL healthy on an appropriate node.
 Rook/Ceph as PV mounted on PostgreSQL
will accept data and then split and save it
consistently.
 Service distributes requests to PostgreSQL
in active pod of StatefulSet.
StatefulSet
Replicas:1
Service
28
29
30
5. Actual service evaluation
31
The viewpoint of an evaluation
• We focus on four points below to evaluate for PostgreSQL on Rook.
• Each of them is important if you intend to run it as the HA database cluster.
# Feature How perform explaination
1 Clustering <Kubernetes> StatefulSet
How switch an active-pod when Pod/Node
is down.
2 Failover/back <kubectl> drain How to move a pod to other node.
3
Planned outage
<kubectl> scale replicas=0 How to stop PostgreSQL when planned
outage is needed.
4 Backup/Restore
<kubectl> scale replicas=0
and then backup/restore
How to execute cold backup within
PostgreSQL on Rook.
32
Evaluation #1: Clustering(1) Pod Failure
• This pattern assumes when a Pod stops suddenly(like process down).
• Auto-healing of Kubernetes repairs a Pod quickly.
StatefulSet
Replicas:1
Service
 If a pod is detected as stopped, StatefulSet
intends to restart a pod at the same node.
 The reason why StatefulSet does that is
to avoid changing network/storage settings.
33
Evaluation #1: Clustering(1) What happened?
• Even if Pod in the StatefulSet is deleted once or many times, Pod usually boots up
the same node.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 1d 10.42.5.30 node001
$ kubectl delete pod pg-rook-sf-0
pod "pg-rook-sf-0" deleted
$ kubectl get pod –o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 3s 10.42.5.31 node001
$ kubectl delete pod pg-rook-sf-0
pod "pg-rook-sf-0" deleted
$ kubectl get pod –o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 1s 10.42.5.32 node001
A pod in StatefulSet is deleted.
A pod starts up on the same node.
Thanks to restart, IP/AGE are changed.
A pod is deleted again but starts up
on usually the same node.
34
Evaluation #1: Clustering(2) Node Failure
• In this case, a Node including a Pod of PostgreSQL stops.
• Of course, we expect auto-healing doing well but PostgreSQL is NOT recovered.
StatefulSet
Replicas:1
Service  When a database cluster detects
node-down, normally it moves an instance
to healthy nodes.
 StatefulSet does NOT execute failover like
that in default settings.
 It causes to avoid occurring Split-Brain in
a cluster.
35
Evaluation #1: Clustering(2) What happened?
• PostgreSQL never do failover when a node including a pod is down.
• Why Kubernetes do NOT move PostgreSQL?
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 NotReady worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pg-rook-sf-0 1/1 Unknown 0 15m
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 Ready worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pg-rook-sf-0 1/1 Running 0 8s
A node is changed to “NotReady”.
A pod is changed to “Unknown” status
but doesn’t move to another node.
A node is recovered and back to “Ready”.
A pod is recovered to “Running” status
on the same node.
36
Evaluation #1: How to handle Node Failure
• When occring Node failure, if you like, it can be handled manually.
• Needless to say, the manual operation is not a better way.
$ kubectl get pod –o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Unknown 0 15m 10.42.6.20 node001
$ kubectl delete pod pg-rook-sf-0 --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that
the running resource has been terminated. The resource may continue
to run on the cluster indefinitely.
pod "pg-rook-sf-0" force deleted
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 NotReady worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 5s 10.42.6.21 node002
A pod is still “Unknown” status.
“delete --force” command is manually
sent from a console.
A node is still “Not Ready”.
A pod moves to the “Ready” node
and its status becomes “Running”.
37
Not Recommended: terminationGracePeriodSeconds=0
StatefulSet
Replicas:1
Service  We try to this parameter:
pod.Spec.TerminationGracePeriodSeconds:0
 It means Kubernetes always send SIGKILL
to pods in this StatefulSet when stopping.
 In the case of a database, SIGKILL means
skipping all the processing required
at the end.
 Thus Kubernetes official document says:
“This practice is unsafe and strongly
discouraged.”
• For automatically failover, you can specify this parameter below.
pod.Spec.TerminationGracePeriodSeconds: 0
pod.Spec.TerminationGracePeriodSeconds: 0
39
Evaluation #2: Failover/back
• As mentioned before, a pod in StatefulSet does not normally move to other nodes.
• What should we do when a manual failover or failback is needed?
StatefulSet
Replicas:1
Service
 Because of moving pods in a node,
"drain" command is useful.
 In “drain” command, first, a node is changed
to “SchedulingDisabled”.
 And then, “drain” command evicts all pods
from a node.
 Finally, StatefulSet recovers pods on the
“Ready” nodes.
As a procedure
40
Evaluation #2: Failover/back - How to operate(1)
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 2h 10.42.6.21 node001
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 Ready worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
$ kubectl drain node001 --force --ignore-daemonsets
node/node001 cordoned
pod/pg-rook-sf-0
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pg-rook-sf-0 1/1 Running 0 7s 10.42.6.22 node002
A pod is running on node001.
A pod is moved to another node
which is not cordoned.
Failover has done.
Both nodes are healthy.
Execute “kubectl drain” command.
We can see node001 gets cordoned.
• We can execute “kubectl drain” command to do failover.
• It is a very simple operation but has to do “uncorden” command after that.
41
Evaluation #2: Failover/back - How to operate(2)
• After doing “drain” command, the target node is not assigned any pods.
• For doing failback, "uncourden" command is needed.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 Ready,SchedulingDisabled worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
$ kubectl uncordon node001
node/node001 uncordoned
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node001 Ready worker 15d v1.10.5
node002 Ready worker 15d v1.10.5
Node001 becomes just “Ready”.
To accept to be scheduled by StatefulSet
again, It needs to execute
"uncordon" command.
A cordoned node is “ScheduligDisabled”.
Thus pods never run on this node.
42
Evaluation #3: Planned outage
• What about planned outage without failover or failback?
• Kubernetes is not good at keeping the pod stopped.
StatefulSet
Replicas:1
Service
 Kubernetes does not have the command for
temporary stop like "pause".
 Therefore, if you intend to keep stopping
StatefulSet, it needs a simple trick.
 It's to reduce “Replicas” of StatefulSet to 0.
has gone.
43
Evaluation #3: Planned outage - How to operate
• To changing pod count, we can run “scale” command.
• The command: “scale --replicas=0” lets all pods in StatefulSet stop.
$ kubectl scale statefulset pg-rook-sf --replicas=0
statefulset.apps/pg-rook-sf scaled
$ kubectl get sts
NAME DESIRED CURRENT AGE
pg-rook-sf 0 0 1d
$ kubectl get pod
No resources found.
$ kubectl scale statefulset pg-rook-sf --replicas=1
statefulset.apps/pg-rook-sf scaled
$ kubectl get sts
NAME DESIRED CURRENT AGE
pg-rook-sf 1 1 16h
StatefulSet doesn’t have any pods.
To recover from this outage,
run “scale –replicas=1” command.
Run “kubectl scale” command
with “-- Replicas=0” option.
StatefulSet runs a pod again.
44
Evaluation #4: Backup/Restore
• PostgreSQL on Rook has the advantage for doing backup thanks to Ceph.
• Both Online and Offline backup is able to do in the storage layer.
 When doing backup in PostgreSQL on Rook,
we can use “rbd snap create” command.
 Its command makes the storage snapshot.
 The snapshot is also needed for restoring
PostgreSQL.
 If to restore is needed, we can execute
“rbd snap rollback” command.
StatefulSet
Replicas:1
Service
rbd snap create
rbd snap rollback
45
Evaluation #4: Backup - How to operate
$ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd -p replicapool ls
pvc-bdbc6e53-f6e9-11e8-b0d9-02f062df6b48
$ kubectl exec -it pg-rook-sf-0 -- psql -h localhost -U postgres -c "SELECT pg_start_backup(now()::text);"
pg_start_backup
-----------------
0/C000028
(1 row)
$ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap create replicapool/img@snap
$ kubectl exec -it pg-rook-sf-0 -- psql -h localhost -U postgres -c "SELECT pg_stop_backup();"
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup
----------------
0/D000050
(1 row)
• At PostgreSQL on Rook, Ceph snapshot is used as the backup command.
• It is necessary to run “pg_start_backup” before creating a snapshot.
The taget for backup
Begin backup.
Create snapshot between
start-stop backup.
Terminate backup.
46
$ kubectl scale sts pg-rook-sf --replicas=0
statefulset.apps/pg-rook-sf scaled
$ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap ls replicapool/img
SNAPID NAME SIZE TIMESTAMP
8 pgdata_snap001 3 GiB Mon Dec 3 11:43:52 2018
$ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap rollback replicapool/img@pgdata_snap001
Rolling back to snapshot: 100% complete...done.
$ kubectl scale sts pg-rook-sf --replicas=1
statefulset.apps/pg-rook-sf scaled
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pg-rook-sf-0 1/1 Running 0 5s
Evaluation #4: Restore - How to operate
• Thanks to Ceph snapshot, we can restore PostgreSQL on Rook.
• The command to stop PostgreSQL is same as planned outage mentioned before.
Same as planned outage.
Confirm our snapshots.
Rollback an image
to the old snapshot.
Start pod by “kubectl scale”.
47
6. Conclusion
48
1. Container & Kubernetes
2. What about database on Kubernetes?
3. In terms of storage
4. Implementation: PostgreSQL on Rook
5. Actual service evaluation
6. Conclusion
Repeated: Agenda
49
What the position is Kubernetes now?
50
Questions?
@tzkb
tzkoba/postgresql-on-k8s
Advent Calendar 2018
( PostgreSQL on Kubernetes )

Weitere ähnliche Inhalte

Was ist angesagt?

MinIO January 2020 Briefing
MinIO January 2020 BriefingMinIO January 2020 Briefing
MinIO January 2020 BriefingJonathan Symonds
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniZalando Technology
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack PresentationAmr Alaa Yassen
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingSreenivas Makam
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to KubernetesImesh Gunaratne
 
M|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleM|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleMariaDB plc
 
Kubernetes for Beginners: An Introductory Guide
Kubernetes for Beginners: An Introductory GuideKubernetes for Beginners: An Introductory Guide
Kubernetes for Beginners: An Introductory GuideBytemark
 
Kubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewKubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewBob Killen
 
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...Edureka!
 
Scaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on KubernetesScaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on KubernetesDatabricks
 
Minio Cloud Storage
Minio Cloud StorageMinio Cloud Storage
Minio Cloud StorageMinio
 
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례SONG INSEOB
 
Patroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionPatroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionAlexander Kukushkin
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017Docker, Inc.
 
Proxmox Clustering with CEPH
Proxmox Clustering with CEPHProxmox Clustering with CEPH
Proxmox Clustering with CEPHFahadIbrar5
 
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Mydbops
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesRishabh Indoria
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingPiotr Perzyna
 
Running Apache Spark on Kubernetes: Best Practices and Pitfalls
Running Apache Spark on Kubernetes: Best Practices and PitfallsRunning Apache Spark on Kubernetes: Best Practices and Pitfalls
Running Apache Spark on Kubernetes: Best Practices and PitfallsDatabricks
 

Was ist angesagt? (20)

MinIO January 2020 Briefing
MinIO January 2020 BriefingMinIO January 2020 Briefing
MinIO January 2020 Briefing
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando Patroni
 
Learning postgresql
Learning postgresqlLearning postgresql
Learning postgresql
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack Presentation
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes Networking
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
 
M|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleM|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScale
 
Kubernetes for Beginners: An Introductory Guide
Kubernetes for Beginners: An Introductory GuideKubernetes for Beginners: An Introductory Guide
Kubernetes for Beginners: An Introductory Guide
 
Kubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewKubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive Overview
 
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
 
Scaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on KubernetesScaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on Kubernetes
 
Minio Cloud Storage
Minio Cloud StorageMinio Cloud Storage
Minio Cloud Storage
 
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
 
Patroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionPatroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companion
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
 
Proxmox Clustering with CEPH
Proxmox Clustering with CEPHProxmox Clustering with CEPH
Proxmox Clustering with CEPH
 
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals Training
 
Running Apache Spark on Kubernetes: Best Practices and Pitfalls
Running Apache Spark on Kubernetes: Best Practices and PitfallsRunning Apache Spark on Kubernetes: Best Practices and Pitfalls
Running Apache Spark on Kubernetes: Best Practices and Pitfalls
 

Ähnlich wie A guide of PostgreSQL on Kubernetes

Kubernetes Stateful Workloads on Legacy Storage
Kubernetes Stateful Workloads on Legacy StorageKubernetes Stateful Workloads on Legacy Storage
Kubernetes Stateful Workloads on Legacy StorageAkhil Mohan
 
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...Equnix Business Solutions
 
Containers kuberenetes
Containers kuberenetesContainers kuberenetes
Containers kuberenetescsegayan
 
Kubernetes presentation
Kubernetes presentationKubernetes presentation
Kubernetes presentationGauranG Bajpai
 
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...Anant Corporation
 
Kubernetes Basics - ICP Workshop Batch II
Kubernetes Basics - ICP Workshop Batch IIKubernetes Basics - ICP Workshop Batch II
Kubernetes Basics - ICP Workshop Batch IIPT Datacomm Diangraha
 
Kubernetes Internals
Kubernetes InternalsKubernetes Internals
Kubernetes InternalsShimi Bandiel
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesObjectRocket
 
Data weekender deploying prod grade sql 2019 big data clusters
Data weekender deploying prod grade sql 2019 big data clustersData weekender deploying prod grade sql 2019 big data clusters
Data weekender deploying prod grade sql 2019 big data clustersChris Adkin
 
kubernetes.pdf
kubernetes.pdfkubernetes.pdf
kubernetes.pdfcrezzcrezz
 
MayaData Datastax webinar - Operating Cassandra on Kubernetes with the help ...
MayaData  Datastax webinar - Operating Cassandra on Kubernetes with the help ...MayaData  Datastax webinar - Operating Cassandra on Kubernetes with the help ...
MayaData Datastax webinar - Operating Cassandra on Kubernetes with the help ...MayaData Inc
 
Introduction to Container Storage Interface (CSI)
Introduction to Container Storage Interface (CSI)Introduction to Container Storage Interface (CSI)
Introduction to Container Storage Interface (CSI)Idan Atias
 
Kubernetes Cluster vs Nodes vs Pods vs Containers Comparison
Kubernetes Cluster vs Nodes vs Pods vs Containers ComparisonKubernetes Cluster vs Nodes vs Pods vs Containers Comparison
Kubernetes Cluster vs Nodes vs Pods vs Containers Comparisonjeetendra mandal
 
Federated Kubernetes: As a Platform for Distributed Scientific Computing
Federated Kubernetes: As a Platform for Distributed Scientific ComputingFederated Kubernetes: As a Platform for Distributed Scientific Computing
Federated Kubernetes: As a Platform for Distributed Scientific ComputingBob Killen
 
Kubernetes for Java developers
Kubernetes for Java developersKubernetes for Java developers
Kubernetes for Java developersRobert Barr
 

Ähnlich wie A guide of PostgreSQL on Kubernetes (20)

Kubernetes Stateful Workloads on Legacy Storage
Kubernetes Stateful Workloads on Legacy StorageKubernetes Stateful Workloads on Legacy Storage
Kubernetes Stateful Workloads on Legacy Storage
 
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
 
Containers kuberenetes
Containers kuberenetesContainers kuberenetes
Containers kuberenetes
 
Containers kuberenetes
Containers kuberenetesContainers kuberenetes
Containers kuberenetes
 
Containers kuberenetes
Containers kuberenetesContainers kuberenetes
Containers kuberenetes
 
Kubernetes presentation
Kubernetes presentationKubernetes presentation
Kubernetes presentation
 
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
 
Kubernetes Basics - ICP Workshop Batch II
Kubernetes Basics - ICP Workshop Batch IIKubernetes Basics - ICP Workshop Batch II
Kubernetes Basics - ICP Workshop Batch II
 
Kubernetes intro
Kubernetes introKubernetes intro
Kubernetes intro
 
Kubernetes Internals
Kubernetes InternalsKubernetes Internals
Kubernetes Internals
 
Container Orchestration using kubernetes
Container Orchestration using kubernetesContainer Orchestration using kubernetes
Container Orchestration using kubernetes
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on Kubernetes
 
Data weekender deploying prod grade sql 2019 big data clusters
Data weekender deploying prod grade sql 2019 big data clustersData weekender deploying prod grade sql 2019 big data clusters
Data weekender deploying prod grade sql 2019 big data clusters
 
kubernetes.pdf
kubernetes.pdfkubernetes.pdf
kubernetes.pdf
 
MayaData Datastax webinar - Operating Cassandra on Kubernetes with the help ...
MayaData  Datastax webinar - Operating Cassandra on Kubernetes with the help ...MayaData  Datastax webinar - Operating Cassandra on Kubernetes with the help ...
MayaData Datastax webinar - Operating Cassandra on Kubernetes with the help ...
 
Introduction to Container Storage Interface (CSI)
Introduction to Container Storage Interface (CSI)Introduction to Container Storage Interface (CSI)
Introduction to Container Storage Interface (CSI)
 
Kubernetes Cluster vs Nodes vs Pods vs Containers Comparison
Kubernetes Cluster vs Nodes vs Pods vs Containers ComparisonKubernetes Cluster vs Nodes vs Pods vs Containers Comparison
Kubernetes Cluster vs Nodes vs Pods vs Containers Comparison
 
Federated Kubernetes: As a Platform for Distributed Scientific Computing
Federated Kubernetes: As a Platform for Distributed Scientific ComputingFederated Kubernetes: As a Platform for Distributed Scientific Computing
Federated Kubernetes: As a Platform for Distributed Scientific Computing
 
Kubernetes Presentation
Kubernetes PresentationKubernetes Presentation
Kubernetes Presentation
 
Kubernetes for Java developers
Kubernetes for Java developersKubernetes for Java developers
Kubernetes for Java developers
 

Mehr von t8kobayashi

Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -t8kobayashi
 
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"t8kobayashi
 
20170907 dbtechshowcase index
20170907 dbtechshowcase index20170907 dbtechshowcase index
20170907 dbtechshowcase indext8kobayashi
 
20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolume20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolumet8kobayashi
 
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係t8kobayashi
 
Introducing PostgreSQL on Kubernetes
Introducing PostgreSQL on KubernetesIntroducing PostgreSQL on Kubernetes
Introducing PostgreSQL on Kubernetest8kobayashi
 
Postgresql on kubernetesへの道
Postgresql on kubernetesへの道Postgresql on kubernetesへの道
Postgresql on kubernetesへの道t8kobayashi
 
Netadashi meetup インフラのすすめ
Netadashi meetup インフラのすすめNetadashi meetup インフラのすすめ
Netadashi meetup インフラのすすめt8kobayashi
 
20170117 jpoug spm公開版
20170117 jpoug spm公開版20170117 jpoug spm公開版
20170117 jpoug spm公開版t8kobayashi
 

Mehr von t8kobayashi (9)

Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -
 
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
 
20170907 dbtechshowcase index
20170907 dbtechshowcase index20170907 dbtechshowcase index
20170907 dbtechshowcase index
 
20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolume20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolume
 
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係
20190213 Cloud-Native StorageとDatabase on Kubernetesの良い関係
 
Introducing PostgreSQL on Kubernetes
Introducing PostgreSQL on KubernetesIntroducing PostgreSQL on Kubernetes
Introducing PostgreSQL on Kubernetes
 
Postgresql on kubernetesへの道
Postgresql on kubernetesへの道Postgresql on kubernetesへの道
Postgresql on kubernetesへの道
 
Netadashi meetup インフラのすすめ
Netadashi meetup インフラのすすめNetadashi meetup インフラのすすめ
Netadashi meetup インフラのすすめ
 
20170117 jpoug spm公開版
20170117 jpoug spm公開版20170117 jpoug spm公開版
20170117 jpoug spm公開版
 

Kürzlich hochgeladen

DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 

Kürzlich hochgeladen (20)

DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

A guide of PostgreSQL on Kubernetes

  • 1. A guide of PostgreSQL on Kubernetes ~ In terms of storage ~ 【 PGConf.Asia 2018 @track B#1】 2018/12/12
  • 2. 2 About me  Takahiro, Kobayashi  Database Architect, Storage Engineer  Prefer physical storage to software-defined About this session  For Kubernetes Beginner  Talking about active-standby PostgreSQL  Not including replication
  • 3. 3 1. Container & Kubernetes 2. What about database on Kubernetes? 3. In terms of storage 4. Implementation: PostgreSQL on Rook 5. Actual service evaluation 6. Conclusion Agenda
  • 4. 4 1. Container & Kubernetes
  • 5. 5 A container in a Nutshell • Container(Docker) is the lightweight kernel-level VM. • Needless to say, containers are useful but not enough for the high-availability system. Node Linux Kernel Container Runtime(Docker) Container Container Container Architecture Files Process Files Process  The container architecture provides effective resource management.  Containers share with Linux kernel but have some libs/files individually.  Container’s issue is that doesn’t contain features which run across many nodes.  You may not build an enterprise system just by using containers.
  • 6. 6 What is Kubernetes? • Kubernetes is a platform for managing containerized workloads and services. • “Kubernetes” is too long to type, so it shortens as “k8s”. << The 3 features of Kubernetes >>  Immutable Not update. Delete and recreate.  Auto-healing Healing by itself automatically.  Declarative settings Declaring To-Be parameters, not procedural. Node Container Node Container Node Container Container Container Container Kubernetes Cluster
  • 7. 7 What applications are suitable for Kubernetes? • Generally speaking, “stateless” applications are suitable for Kubernetes. • Kubernetes contains the horizontal/vertical auto-scaling function. << The pros with Kubernetes features >>  Immutable Easy to copy/deploy into other nodes.  Auto-healing A container can restart in any nodes.  Declarative settings If you collect specific parameters, they apply by k8s automatically. Node Node Node Kubernetes Cluster Horizontal auto-scaling
  • 8. 8 “Stateful” is NOT suitable for Kubernetes? • It’s said stateful applications are not perfect for Kubernetes. • Database(e.g PostgreSQL,MySQL) is typically stateful one. << The cons against Kubernetes features >>  Immutable Of course database must keep their data.  Auto-healing To maintain consistency, database cluster may assign the role to containers.  Declarative settings Something to do when startup/shutdown. Node Node Node Kubernetes Cluster Master Slave Replicate
  • 9. 9 The growth of the ecosystem around Kubernetes • The ecosystem(like a device driver) is growing up with Kubernetes. • For example, NVIDIA announced to adapt their GPUs for Kubernetes. c.f. https://developer.nvidia.com/kubernetes-gpu Kubernetes on NVIDIA GPUs  Some vendors announced their device is able to work with Kubernetes.  As shown left side, NVIDIA GPUs adapts container and Kubernetes.  Near future, more vendors/devices will operate from k8s.  We must realize a database system also grows with Kubernetes.
  • 10. 10 2. What about database on Kubernetes?
  • 11. 11 A pattern of Database on Kubernetes • An example of PostgreSQL on Kubernetes is STOLON project. • STOLON leverages streaming replication which is the feature of PostgreSQL.  STOLON looks like a shared-nothing type database cluster built on k8s.  Data is duplicated by streaming replication.  When a master-instance is down, one standby-instance is promoted by sentinel components.  Proxies are the access points for apps. c.f. https://github.com/sorintlab/stolon
  • 12. 12 The case of Vitess • Vitess is a database clustering system for horizontal scaling of MySQL. • It was developed by YouTube and has been hosted as CNCF 16th project. VTtablet VTtablet VTtablet VTgate app app app SQL SQL SQL  Vitess provides MySQL sharding in k8s.  VTgate is working as SQL proxy and runs divided queries into back-end VTtablets.  Each pair of VTtablet and MySQL manages not entire but sharded data.  VTgate receives records from VTtablet and merges them.  Sharded data has built-in redundancy. c.f. https://github.com/vitessio
  • 13. 13 Proposal: A simple architecture for DB on k8s • Previous patterns of the database on Kubernetes are slightly complex. • Therefore, we’ll try to push shared-disk database cluster into Kubernetes. Storage[shared-disk] Controler Controler Node#1 Node#2 VIP Kubernetes ClusterShared-disk Cluster Node#1 Node#2 Distributed storage Clustering (Auto-healing) LB
  • 14. 14 Main issue: PostgreSQL on Kubernetes(HA) • As shown below, there are several differences between a traditional shared-disk cluster and Kubernetes. Traditional shared-disk DB Feature PostgreSQL on Kubernetes(HA) One. Primary only. how many DBs One. Primary only. SAN/iSCSI/SDS Shared disk Cloud Storage/SAN/iSCSI/SDS VIP (ie. keepalived) LoadBalance <Kubernetes> Service Cluster software(ie. PaceMaker) Clustering <Kubernetes> StatefulSet Move cluster-resources Failover/back <kubectl> drain Stop database Planned outage <kubectl> scale replicas=0 Stop resource, and then backup/restore Backup/Restrore <kubectl> scale replicas=0 and then backup/restore
  • 15. 15 3. In terms of storage
  • 16. 16 A big issue: Persistence of container’s data • When re-creating a container, that data is usually lost. • Container storage should make persistence and portability compatible. << Requirements for container storage >>  To keep the container’s data, the individual life-cycle is necessary for storage.  In other words, storage avoids to be deleted when a container is terminated.  Because of container’s portability, storage follows that deployment. Node Node Node Kubernetes Cluster
  • 17. 17 Kubernetes Volume Plugin by storage vendors • Some storage vendors announced their products work well with Kubernetes. • NetApp Trident allows a container to access storage management APIs.  Trident is a dynamic persistent storage orchestrator for container.  Trident contains Kubernetes volume plugin.  Through that plugin, a container makes that data persistent outside of Kubernetes cluster.  In another perspective, Trident remakes a typical storage to Container-Ready. c.f. https://github.com/NetApp/trident Volume Plugin Orchestration Storage Management Kubernetes Cluster
  • 18. 18 Control plane Data plane Container-Ready VS Container-Native • In a previous slide, we confirm the Container-Ready storage keeps data outside. • Whereas Container-Native storage includes all components into a cluster. Storage Controler Controler Node#1 Node#2 Container-Native style Node#1 Node#2 Container-Ready style Including all of storage
  • 19. 19 Introduction: Container-Native Storage • Several OSS/proprietary SDS are called Container-Native storage. • Many of them based on distributed storage are deployed into Kubernetes. Name Based on as block dev OSS/Proprietary Rook Ceph ◎ OSS OpenEBS --- ◎ OSS Redhat OpenShift Container Storage GlusterFS △ Proprietary StorageOS --- ◎ Proprietary
  • 20. 20 Picking up: Rook • We choose Rook from Container-Native storage since it is OSS and easy to use. • Rook is an operator to run multiple storage(block/file/object) on Kubernetes. app app app  Ceph is a popular distributed storage as using with OpenStack or else.  Rook provides multiple storage functions via Ceph.  Rook deploys and maintains Ceph that is actually in charge of storing data.  Rook is a component named as “Operator” of Kubernetes. c.f. https://rook.io https://ceph.com
  • 22. 22 Implementation: PostgreSQL on Rook • As a model of the database on Kubernetes, we place and run PostgreSQL on Rook. StatefulSet Replicas:1  We name an architecture on the left side as PostgreSQL on Rook from now on.  Each component is explained in detail in subsequent slides. Service
  • 23. 23 Glossaries#1: Node & Pod container1 container2 container3 Node Pod • Before showing our evaluation, we try to learn technical words in Kubernetes. • Most basic elements in a cluster are “Node” and “Pod”. Kubernetes Cluster Pod container4 Node Pod container5 Node Pod  "Node" is a VM or a physical machine included in Kubernetes Cluster.  "Pod" is a unit deployed and scheduled by Kubernetes.  One or more containers run on a “Pod”.  What a pod includes / Which node a pod runs on is defined by manifest files.
  • 24. 24 Glossaries#2: Deployment & StatefulSet • In this slide, we get to know how pod is scheduled in a cluster. • Kubernetes has three kinds of workload to manage pods efficiently. Kubernetes Cluster Deployment Replicas:2 container1 Node Pod container1 Node Pod StatefulSet Replicas:1 container2 container3 Pod  Both of “Deployment” and “StatefulSet” are able to manage pods among nodes.  "Deployment" manages pods in parallel and random, but "StatefulSet" handles pods sequentially and permanently.  We skip the explanation of "DaemonSet" in this session.
  • 25. 25 Glossaries#3: Service • “Service” has the special meaning in Kubernetes terms. • Simple say, it runs as a kind of software load balancer. Kubernetes Cluster Deployment Replicas:2 container1 Node Pod container1 Node Pod  At first, “Service” discovers active pods from StatefulSet/Deployment.  If applications throw a request to “Service”, it distributes to the suitable pod based on defined rules.  When the pod is down, “Service” removes it from a kind of sets automatically. Service
  • 26. 26 Kubernetes Cluster Glossaries#4: Persistent Volume • As we have already seen, data persistence is a big issue when using containers. • Kubernetes prepares “PV” and “PVC” architecture to store data persistently. container Node Pod Persistent Volume Persistent Volume Claim To prepare PV and physical storage = in charge of Ops To Write PVC = in charge of Dev  Persistent Volume (abbreviated PV) is tied to a physical storage unit.  Permanent volume claim (PVC) requests a certain volume from a cluster.  Generally, PV is prepared by administrators before developing an application, PVC is coded by developers after that.
  • 27. 27 Repeated: PostgreSQL on Rook • According to the terms of Kubernetes, the architecture is StatefulSet that mounts PV provided by Rook.  StatefulSet is in charge of running PostgreSQL healthy on an appropriate node.  Rook/Ceph as PV mounted on PostgreSQL will accept data and then split and save it consistently.  Service distributes requests to PostgreSQL in active pod of StatefulSet. StatefulSet Replicas:1 Service
  • 28. 28
  • 29. 29
  • 30. 30 5. Actual service evaluation
  • 31. 31 The viewpoint of an evaluation • We focus on four points below to evaluate for PostgreSQL on Rook. • Each of them is important if you intend to run it as the HA database cluster. # Feature How perform explaination 1 Clustering <Kubernetes> StatefulSet How switch an active-pod when Pod/Node is down. 2 Failover/back <kubectl> drain How to move a pod to other node. 3 Planned outage <kubectl> scale replicas=0 How to stop PostgreSQL when planned outage is needed. 4 Backup/Restore <kubectl> scale replicas=0 and then backup/restore How to execute cold backup within PostgreSQL on Rook.
  • 32. 32 Evaluation #1: Clustering(1) Pod Failure • This pattern assumes when a Pod stops suddenly(like process down). • Auto-healing of Kubernetes repairs a Pod quickly. StatefulSet Replicas:1 Service  If a pod is detected as stopped, StatefulSet intends to restart a pod at the same node.  The reason why StatefulSet does that is to avoid changing network/storage settings.
  • 33. 33 Evaluation #1: Clustering(1) What happened? • Even if Pod in the StatefulSet is deleted once or many times, Pod usually boots up the same node. $ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 1d 10.42.5.30 node001 $ kubectl delete pod pg-rook-sf-0 pod "pg-rook-sf-0" deleted $ kubectl get pod –o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 3s 10.42.5.31 node001 $ kubectl delete pod pg-rook-sf-0 pod "pg-rook-sf-0" deleted $ kubectl get pod –o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 1s 10.42.5.32 node001 A pod in StatefulSet is deleted. A pod starts up on the same node. Thanks to restart, IP/AGE are changed. A pod is deleted again but starts up on usually the same node.
  • 34. 34 Evaluation #1: Clustering(2) Node Failure • In this case, a Node including a Pod of PostgreSQL stops. • Of course, we expect auto-healing doing well but PostgreSQL is NOT recovered. StatefulSet Replicas:1 Service  When a database cluster detects node-down, normally it moves an instance to healthy nodes.  StatefulSet does NOT execute failover like that in default settings.  It causes to avoid occurring Split-Brain in a cluster.
  • 35. 35 Evaluation #1: Clustering(2) What happened? • PostgreSQL never do failover when a node including a pod is down. • Why Kubernetes do NOT move PostgreSQL? $ kubectl get node NAME STATUS ROLES AGE VERSION node001 NotReady worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 $ kubectl get pod NAME READY STATUS RESTARTS AGE pg-rook-sf-0 1/1 Unknown 0 15m $ kubectl get node NAME STATUS ROLES AGE VERSION node001 Ready worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 $ kubectl get pod NAME READY STATUS RESTARTS AGE pg-rook-sf-0 1/1 Running 0 8s A node is changed to “NotReady”. A pod is changed to “Unknown” status but doesn’t move to another node. A node is recovered and back to “Ready”. A pod is recovered to “Running” status on the same node.
  • 36. 36 Evaluation #1: How to handle Node Failure • When occring Node failure, if you like, it can be handled manually. • Needless to say, the manual operation is not a better way. $ kubectl get pod –o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Unknown 0 15m 10.42.6.20 node001 $ kubectl delete pod pg-rook-sf-0 --force --grace-period=0 warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "pg-rook-sf-0" force deleted $ kubectl get node NAME STATUS ROLES AGE VERSION node001 NotReady worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 $ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 5s 10.42.6.21 node002 A pod is still “Unknown” status. “delete --force” command is manually sent from a console. A node is still “Not Ready”. A pod moves to the “Ready” node and its status becomes “Running”.
  • 37. 37 Not Recommended: terminationGracePeriodSeconds=0 StatefulSet Replicas:1 Service  We try to this parameter: pod.Spec.TerminationGracePeriodSeconds:0  It means Kubernetes always send SIGKILL to pods in this StatefulSet when stopping.  In the case of a database, SIGKILL means skipping all the processing required at the end.  Thus Kubernetes official document says: “This practice is unsafe and strongly discouraged.” • For automatically failover, you can specify this parameter below. pod.Spec.TerminationGracePeriodSeconds: 0 pod.Spec.TerminationGracePeriodSeconds: 0
  • 38. 39 Evaluation #2: Failover/back • As mentioned before, a pod in StatefulSet does not normally move to other nodes. • What should we do when a manual failover or failback is needed? StatefulSet Replicas:1 Service  Because of moving pods in a node, "drain" command is useful.  In “drain” command, first, a node is changed to “SchedulingDisabled”.  And then, “drain” command evicts all pods from a node.  Finally, StatefulSet recovers pods on the “Ready” nodes. As a procedure
  • 39. 40 Evaluation #2: Failover/back - How to operate(1) $ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 2h 10.42.6.21 node001 $ kubectl get node NAME STATUS ROLES AGE VERSION node001 Ready worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 $ kubectl drain node001 --force --ignore-daemonsets node/node001 cordoned pod/pg-rook-sf-0 $ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE pg-rook-sf-0 1/1 Running 0 7s 10.42.6.22 node002 A pod is running on node001. A pod is moved to another node which is not cordoned. Failover has done. Both nodes are healthy. Execute “kubectl drain” command. We can see node001 gets cordoned. • We can execute “kubectl drain” command to do failover. • It is a very simple operation but has to do “uncorden” command after that.
  • 40. 41 Evaluation #2: Failover/back - How to operate(2) • After doing “drain” command, the target node is not assigned any pods. • For doing failback, "uncourden" command is needed. $ kubectl get node NAME STATUS ROLES AGE VERSION node001 Ready,SchedulingDisabled worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 $ kubectl uncordon node001 node/node001 uncordoned $ kubectl get node NAME STATUS ROLES AGE VERSION node001 Ready worker 15d v1.10.5 node002 Ready worker 15d v1.10.5 Node001 becomes just “Ready”. To accept to be scheduled by StatefulSet again, It needs to execute "uncordon" command. A cordoned node is “ScheduligDisabled”. Thus pods never run on this node.
  • 41. 42 Evaluation #3: Planned outage • What about planned outage without failover or failback? • Kubernetes is not good at keeping the pod stopped. StatefulSet Replicas:1 Service  Kubernetes does not have the command for temporary stop like "pause".  Therefore, if you intend to keep stopping StatefulSet, it needs a simple trick.  It's to reduce “Replicas” of StatefulSet to 0. has gone.
  • 42. 43 Evaluation #3: Planned outage - How to operate • To changing pod count, we can run “scale” command. • The command: “scale --replicas=0” lets all pods in StatefulSet stop. $ kubectl scale statefulset pg-rook-sf --replicas=0 statefulset.apps/pg-rook-sf scaled $ kubectl get sts NAME DESIRED CURRENT AGE pg-rook-sf 0 0 1d $ kubectl get pod No resources found. $ kubectl scale statefulset pg-rook-sf --replicas=1 statefulset.apps/pg-rook-sf scaled $ kubectl get sts NAME DESIRED CURRENT AGE pg-rook-sf 1 1 16h StatefulSet doesn’t have any pods. To recover from this outage, run “scale –replicas=1” command. Run “kubectl scale” command with “-- Replicas=0” option. StatefulSet runs a pod again.
  • 43. 44 Evaluation #4: Backup/Restore • PostgreSQL on Rook has the advantage for doing backup thanks to Ceph. • Both Online and Offline backup is able to do in the storage layer.  When doing backup in PostgreSQL on Rook, we can use “rbd snap create” command.  Its command makes the storage snapshot.  The snapshot is also needed for restoring PostgreSQL.  If to restore is needed, we can execute “rbd snap rollback” command. StatefulSet Replicas:1 Service rbd snap create rbd snap rollback
  • 44. 45 Evaluation #4: Backup - How to operate $ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd -p replicapool ls pvc-bdbc6e53-f6e9-11e8-b0d9-02f062df6b48 $ kubectl exec -it pg-rook-sf-0 -- psql -h localhost -U postgres -c "SELECT pg_start_backup(now()::text);" pg_start_backup ----------------- 0/C000028 (1 row) $ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap create replicapool/img@snap $ kubectl exec -it pg-rook-sf-0 -- psql -h localhost -U postgres -c "SELECT pg_stop_backup();" NOTICE: pg_stop_backup complete, all required WAL segments have been archived pg_stop_backup ---------------- 0/D000050 (1 row) • At PostgreSQL on Rook, Ceph snapshot is used as the backup command. • It is necessary to run “pg_start_backup” before creating a snapshot. The taget for backup Begin backup. Create snapshot between start-stop backup. Terminate backup.
  • 45. 46 $ kubectl scale sts pg-rook-sf --replicas=0 statefulset.apps/pg-rook-sf scaled $ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap ls replicapool/img SNAPID NAME SIZE TIMESTAMP 8 pgdata_snap001 3 GiB Mon Dec 3 11:43:52 2018 $ kubectl exec -it -n rook-ceph rook-ceph-tools-seq -- rbd snap rollback replicapool/img@pgdata_snap001 Rolling back to snapshot: 100% complete...done. $ kubectl scale sts pg-rook-sf --replicas=1 statefulset.apps/pg-rook-sf scaled $ kubectl get pod NAME READY STATUS RESTARTS AGE pg-rook-sf-0 1/1 Running 0 5s Evaluation #4: Restore - How to operate • Thanks to Ceph snapshot, we can restore PostgreSQL on Rook. • The command to stop PostgreSQL is same as planned outage mentioned before. Same as planned outage. Confirm our snapshots. Rollback an image to the old snapshot. Start pod by “kubectl scale”.
  • 47. 48 1. Container & Kubernetes 2. What about database on Kubernetes? 3. In terms of storage 4. Implementation: PostgreSQL on Rook 5. Actual service evaluation 6. Conclusion Repeated: Agenda
  • 48. 49 What the position is Kubernetes now?