容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛-阿里云开发者社区

开发者社区> cu.eric.lee> 正文

容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛

简介: 通过阿里云Kubernetes容器服务,开启你的数据服务之旅 (一)云上运维自建数据库之痛,使用容器服务自动恢复数据库postgresql实例 概述 本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。
+关注继续查看

容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛

概述

本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。借助阿里云Kubernetes服务与阿里云存储资源的深度整合,打造数据库实例的免运维异地(ECS)恢复的不死神话。

先决条件

  1. 你已经通过阿里云容器服务创建了一个Kubernetes集群,详细步骤参见创建Kubernetes集群
  2. 阿里云容器服务的存储插件(默认情况存储插件已经自动部署在阿里云Kubernetes容器服务)

从容器服务控制台创建一个posgresql实例

使用三次点击来创建一个postgresql的不死实例

  1. 登录 https://cs.console.aliyun.com/
  2. 点击 “应用目录”
  3. 选择 "postgresql"


15228028383543

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


15228030816874

7 (可选) 点击 “参数” 来定制你的数据库实例

  1. 修改 persistence.size: 20Gi 增加数据库云盘的容量
  2. 修改 persistence.storageClass: alicloud-disk-efficiency 调整数据卷所在云盘的性能。比如改为alicloud-disk-ssd 挂载ssd类型的


15228039185721


## 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 控制台”,查看部署实例

15228028383543

10 点击容器组,点击 postgresql-online-postgresql 查看数据库实例密码。容器实例启动在节点:cn-hangzhou.i-bp1fazljd8u2ylk2otdo


15228047828948


15228049402505

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 --namespace default 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 --namespace default -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   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

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   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)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Fundebug支付宝小程序BUG监控插件更新至0.2.0,新增test()方法,报错增加Page数据
摘要: 0.2.0新增fundebug.test()方法,同时报错增加了Page数据。 Fundebug提供专业支付宝小程序BUG监控服务,可以第一时间为您捕获生存环境中小程序的异常、错误或者BUG,及时给开发者发送报警,帮助您快速修复BUG。
1088 0
Kubernetes应用迁移至ACK(二) Kubernetes应用及PV数据迁移
本文记录使用Velero快速完成云原生应用及PV数据从自建Kubernetes迁移到ACK的实践过程。 此过程也同样适用于其他云厂商Kubernetes集群内的应用及PV数据迁移至ACK。 在本示例中, 我们将对自建Kubernetes集群中的一个wordpress应用整体迁移上云到ACK,其中数据备份采用阿里云OSS服务,安全稳定。 ## Kubernetes应用及PV数据迁移ACK概览
667 0
MaxCompute(ODPS)上处理非结构化数据的Best Practice
随着MaxCompute(ODPS)2.0的上线,新增的非结构化数据处理框架也推出一系列的介绍文章,包括 MaxCompute上如何访问OSS数据, 基本功能用法和整体介绍,侧重介绍读取OSS数据进行计算处理; 本文:MaxCompute(ODPS)上处理非结构化数据的Best Practice。
4137 0
【云栖号案例 | 教育&科研机构】百家云借助“容器+神龙”三天内实现数十倍扩容
受疫情影响百家云的业务量短时间内增长了数十倍,急需扩容。上云后提供弹性计算的空间与敏捷安全的扩容能力、稳定的服务与优异性能。
3075 0
在容器中使用AliSQL
### AliSQL容器 #### ALISQL AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。该版本在社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。
6809 0
今日开启! 论道数据价值,阿里云数据库精英与你相约2019数据技术嘉年华
这是一个数据的时代,在互联网技术的推动下,数据在开放融合中正在创造前所未有的价值;创新的数据技术也在不断激发企业业务模式的革新,以数据聚集、数据挖掘、数据运营为驱动的数据企业正在加速成长。有效地组织数据,并利用数据创造价值,已经成为企业竞争的新的制高点。
405 0
开启数据智慧,阿里云大数据团队调研高新区
随着“云计算”、“互联网”、“物联网”的快速发展,大数据(Big Data)也吸引了越来越多的人关注,成为社会热点之一。大街小巷不论是技术人员、咨询人士以及各行各业的精英达人都在探讨着“大数据”,“大数据”显然已经成为新一代“网红”。
2013 0
【Linux】MySQL 运维常用脚本
【Linux】MySQL 运维常用脚本目录 操作规范1、数据操作,必须谨慎,线上尤甚!!!2、线上数据操作,必须备份!备份需完整、可用,备份使用自己最容易操作回滚的方式。3、数据操作,能修改数据解决的决不删除4、不确定的操作不做,不确定的命令不敲5、如果出现问题,例如数据丢失、数据文件损坏,必须首先完整备份当前环境,保证后续操作不会造成更大的影响,以便留给能解决问题的人解决。
8517 0
+关注
cu.eric.lee
Eric 阿里云容器服务资深架构师,金融行业企业解决方案专家,专注于基于Kubernetes的金融行业方案,数据服务,机器学习深度学习,和生物计算方案。负责过多个容器平台,机器学习平台在金融行业,生物计算行业实施落地的。
8
文章
1
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载