摘要: 通过阿里云Kubernetes容器服务,开启你的数据服务之旅 (一)云上运维自建数据库之痛,使用容器服务自动恢复数据库postgresql实例 概述 本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。
容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛
概述
本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。借助阿里云Kubernetes服务与阿里云存储资源的深度整合,打造数据库实例的免运维异地(ECS)恢复的不死神话。
先决条件
1.你已经通过阿里云容器服务创建了一个Kubernetes集群,详细步骤参见创建Kubernetes集群
2.阿里云容器服务的存储插件(默认情况存储插件已经自动部署在阿里云Kubernetes容器服务)
从容器服务控制台创建一个posgresql实例
使用三次点击来创建一个postgresql的不死实例
2.点击 “应用目录”
3.选择 "postgresql"

4 (可选)选择你的Kubernetes集群. e.g. k8s-gpu
5 (可选)选择你的应用的命名空间。默认: default
6 给你的数据库应用取个容易记住的名字。 e.g. postgresql-online

7 (可选) 点击 “参数” 来定制你的数据库实例
1.修改 persistence.size: 20Gi 增加数据库云盘的容量 2.修改 persistence.storageClass: alicloud-disk-efficiency 调整数据卷所在云盘的性能。比如改为alicloud-disk-ssd 挂载ssd类型的

## Persist data to a persitent volume persistence: enabled: true ## A manually managed Persistent Volume and Claim ## Requires persistence.enabled: true ## If defined, PVC must be created manually before volume will be bound # existingClaim: ## database data Persistent Volume Storage Class ## if defined, user has to define storageClassName: alicloud-disk to support dynamic provision of alicloud-disk ## If defined, storageClassName: <storageClass> ## If set to "-", storageClassName: "", which disables dynamic provisioning ## If undefined (the default) or set to null, no storageClassName spec is ## set, choosing the default provisioner. (gp2 on AWS, standard on ## GKE, AWS & OpenStack) ## #storageClass: "alicloud-disk-ssd" storageClass: "alicloud-disk-efficiency" accessMode: ReadWriteOnce size: 20Gi subPath: "postgresql-db"
8 点击 “部署”, 完成数据发布
9 点击 “Kubernetes 控制台”,查看部署实例
10 点击容器组,点击 postgresql-online-postgresql 查看数据库实例密码。容器实例启动在节点:cn-hangzhou.i-bp1fazljd8u2ylk2otdo

11 测试postgresql数据库的异地(ECS)恢复
1.添加测试数据
ssh <public ip of kubernetes master node >` # kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ --env "PGPASSWORD=$PGPASSWORD" \ --command -- psql -U postgres \ -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# create table t1 (id int); CREATE TABLE postgres=# insert into t1 values(10); INSERT 0 1 postgres=# select * from t1; id ---- 10 (1 row)
1.驱逐数据库实例从ECS节点 i-bp1fazljd8u2ylk2otdo 到 i-bp1fazljd8u2ylk2otdp
#kubectl get pod -o wide | grep postgresql-online-postgresql postgresql-online-postgresql-78884fbcf6-6mfzz 1/1 Running 0 36m 172.30.4.4 cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl cordon cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl delete pod postgresql-online-postgresql-78884fbcf6-6mfzz pod "postgresql-online-postgresql-78884fbcf6-6mfzz" deleted # kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp
1.检验数据,实例迁移, 数据库实例自动化恢复, 数据不丢失。
# kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ > --env "PGPASSWORD=$PGPASSWORD" \ > --command -- psql -U postgres \ > -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# select * from t1; id ---- 10 (1 row)
CLI控: 使用命令行完成postgresql实例的创建,迁移验证
login k8s master and deploy an postgresql db in seconds.
ssh <public ip of kubernetes master node > helm install -n postgresql-online --set'persistence.size=30Gi,persistence.storageClass=alicloud-disk-ssd' stable/postgresql
To get your user password run:
PGPASSWORD=$(kubectl get secret --namespacedefault my-pg-postgresql -o jsonpath="{.data.postgres-password}" | base64 --decode; echo)
To connect to your database run the following command (using the env variable from above):
kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \--env "PGPASSWORD=$PGPASSWORD"\--command -- psql -U postgres \ -h postgresql-online-postgresql postgres
To connect to your database directly from outside the K8s cluster:
PGHOST=127.0.0.1 PGPORT=5432# Execute the following commands to route the connection:export POD_NAME=$(kubectl get pods --namespacedefault -l "app=my-pg-postgresql" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 5432:5432#kubectl get pod -o wide | grep postgresql-online-postgresql postgresql-online-postgresql-78884fbcf6-6mfzz 1/1 Running 036m 172.30.4.4 cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl cordon cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl delete pod postgresql-online-postgresql-78884fbcf6-6mfzz pod "postgresql-online-postgresql-78884fbcf6-6mfzz" deleted # kubectl get pod -o wide|grep postgresql-online-postgresql#postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp
Test original postgresql db could be recovered on different node.
#kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 015s 172.30.3.5cn-hangzhou.i-bp1fazljd8u2ylk2otdp kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \>--env "PGPASSWORD=$PGPASSWORD"\>--command -- psql -U postgres \> -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# select * from t1; id ---- 10 (1 row)
阅读更多干货好文,请关注扫描以下二维码:
相关推荐
Postgresql数据库运维笔记 数据库运维.pdf
"阿里云专有云企业版HybridDB for PostgreSQL运维指南" 以下是从给定的文件信息中生成的知识点: 1. 法律声明:阿里云对用户阅读或使用本文档的法律声明,包括保密义务、内容不得擅自摘抄、翻译、复制或传播,等。...
1. 阿里云专有云企业版HybridDB for PostgreSQL运维指南是阿里云提供的一款云数据库服务,版本号为V3.6.2,文档版本号为20181228。 2. 在阅读或使用本文档之前,用户需要仔细阅读、充分理解本法律声明各条款的内容...
"阿里云 专有云企业版 V3.6.0 HybridDB for PostgreSQL 运维指南" 以下是 HybridDB for PostgreSQL 运维指南中的重要知识点: 法律声明 1. User Agreement:用户阅读或使用本文档的行为将被视为对本声明全部内容...
阿里云专有云企业版V3.6.1 HybridDB for PostgreSQL运维指南是针对阿里云的一款高性能、分布式的关系型数据库服务的详细操作手册。HybridDB for PostgreSQL是阿里云为满足企业级用户对大规模数据处理需求而设计的一...
Kubernetes + PostgreSQL GitHub存储库: : 网页: : 要求 需要Kubernetes,Docker,Linux,AWS知识 内容 链接
PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (数据表 数据表 ) 4 一、表的定义: 一、表的定义: 一、表的定义: . 4 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (模式 Schema) ...
"阿里云专有云企业版V3.7.1 HybridDB for PostgreSQL运维指南" 以下是相关知识点的总结: 法律声明 1. 阿里云提醒用户在阅读或使用本文档之前仔细阅读、充分理解本法律声明各条款的内容。 2. 用户应当通过阿里云...
阿里云专有云Enterprise版V3.5.0 HybridDB for PostgreSQL运维指南 本文档是阿里云专有云Enterprise版V3.5.0 HybridDB for PostgreSQL运维指南,旨在提供相关的运维指南和best practice,以帮助用户更好地使用...
在Kubernetes上运行自己的生产级PostgreSQL即服务! 通过提供保持PostgreSQL集群正常运行所需的基本功能,自动并简化了在Kubernetes和其他启用Kubernetes的平台上的开源PostgreSQL集群的部署和管理,包括: ...
藏经阁-PostgresChina2018_李海龙_Qunar的PostgreSQL运维实践.pdf
为了确保数据的安全性和服务的连续性,Patroni被引入作为在Kubernetes集群上的PostgreSQL高可用解决方案。 ### 关键知识点 1. **Patroni** - Patroni是一个用于构建高可用PostgreSQL集群的开源工具。它管理主/从...
《阿里云专有云企业版 V3.12.0 云原生数据仓库 AnalyticDB PostgreSQL 版 运维指南》是针对阿里云专有云企业版中AnalyticDB PostgreSQL版的一款详尽的运维手册,适用于产品版本V3.12.0,文档日期为20200622。...
PostgreSQL 的事务处理机制是数据库系统中非常重要的一个环节,它确保了数据的一致性和完整性。 在本文中,我们将深入探讨 PostgreSQL 的事务处理机制,包括事务的基本概念、事务处理的原理、事务处理的优化方案等...
在SQL Server 2012中,连接到外部数据源如PostgreSQL数据库是通过设置链接服务器来实现的。链接服务器允许SQL Server查询和操作非本地的数据,提供了与异构数据库系统交互的能力。以下是一个详细步骤,说明如何在SQL...
Postgresql 开发指南 Postgresql 是一个功能强大且功能丰富的关系型数据库管理系统,它提供了丰富的功能来帮助开发者快速构建高效的数据库应用程序。本文档将对 Postgresql 的一些重要概念和技术进行详细的讲解。 ...
Django,Kubernetes(GKE)上的PostgreSQL 本教程应有助于在Kubernetes集群上部署Django应用程序。 在开始本教程之前,应该期望用户具有GKE,Django,PostgreSQL和Docker的基本知识。了解Kubernetes 在进入本教程...
综上所述,构建基于PostgreSQL数据库的数据中台是一个综合性的工程,涵盖了数据集成、计算、服务、治理、智能和管理等多个方面。通过这样的数据中台,企业可以更好地利用数据,驱动业务决策,提高运营效率,并应对...
数据架构师的PostgreSQL修炼:高效设计、开发与维护数据库应用 EPUB 数据架构师的PostgreSQL修炼:高效设计、开发与维护数据库应用 EPUB 数据架构师的PostgreSQL修炼:高效设计、开发与维护数据库应用 EPUB
PostgreSQL是一种功能强大且广泛应用的开源关系型数据库管理系统,本书《PostgreSQL修炼之道:从小工到专家》旨在帮助读者深入理解PostgreSQL的核心原理和最佳实践,从而提升数据库管理和开发的水平。 数据库基本...