摘要: 通过阿里云Kubernetes容器服务,开启你的数据服务之旅 (一)云上运维自建数据库之痛,使用容器服务自动恢复数据库postgresql实例 概述 本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。
容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛
概述
本文为大家介绍一种容器化的数据服务 posgresql db on ACK,通过使用云盘自动挂载实现的块存储PVC来做到数据库的免运维恢复。借助阿里云Kubernetes服务与阿里云存储资源的深度整合,打造数据库实例的免运维异地(ECS)恢复的不死神话。
先决条件
1.你已经通过阿里云容器服务创建了一个Kubernetes集群,详细步骤参见创建Kubernetes集群
2.阿里云容器服务的存储插件(默认情况存储插件已经自动部署在阿里云Kubernetes容器服务)
从容器服务控制台创建一个posgresql实例
使用三次点击来创建一个postgresql的不死实例
1.登录 cs.console.aliyun.com/
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 --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)
原文链接
干货好文,请关注扫描以下二维码:

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

  1. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

    摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark ...

  2. 容器开启数据服务之旅系列(四):Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制...

    容器开启数据服务之旅系列(四) Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制 概述 本文是2018年大数据峰会上的一些分享,关于在线业务,离线业务在ACK(阿里云容器 ...

  3. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 1

    摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark ...

  4. 使用SpringBoot开启微服务之旅

    \ 本文要点 \\ 微服务可以使你的代码解耦\\t 微服务可以使不同的团队专注于更小范围的工作职责.使用独立的技术.更安全更频繁地部署\\t SpringBoot支持各种REST API的实现方式\\ ...

  5. python系列文章(基础,应用,后端,运维,自动化测试,爬虫,数据分析,可视化,机器学习,深度学习系列内容)

    python基础教程 python基础系列教程--Python的安装与测试:python解释器.PyDev编辑器.pycharm编译器 python基础系列教程--Python库的安装与卸载 pyth ...

  6. 阿里云mysql gtid_深入理解MySQL 5.7 GTID系列(八):GTID带来的运维改变

    依托前文的解析来讲5.7中 GTID带来的运维改变,我想理解应该是更加深刻,这节主要讨论以下几个部分: 如何跳过一个事务 mysqldump导出行为的改变 5.7中搭建基于GTID的主从 5.7中GT ...

  7. docker 容器开启ssh服务

    ssh服务安装 安装ssh服务 #yum install openssh-server -y 安装passwd(修改密码需要) #yum install passwd -y 修改sshd_config ...

  8. 奇硕:使用网易云服务,运维成本降低50%

    2018年上半年,我国电子商务发展仍保持较高增速,前5个月网上零售额总额达到32691亿元,首次在1-5月份突破3万亿.当下零售业的快速增长不仅拉动了专注泛零售数据分析的科技公司发展,同时也为第三方数 ...

  9. 奇硕:使用网易云服务,运维成本降低50% 1

    2018年上半年,我国电子商务发展仍保持较高增速,前5个月网上零售额总额达到32691亿元,首次在1-5月份突破3万亿.当下零售业的快速增长不仅拉动了专注泛零售数据分析的科技公司发展,同时也为第三方数 ...

最新文章

  1. IOS开发之数据sqlite使用
  2. Python编程不能帮你找到女朋友,却能让你成为有钱的单身狗
  3. jquery学习开发资料
  4. STL6大标准库的关系和作用
  5. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分
  6. 静态链接库与动态链接库的区别
  7. java的add方法的使用_Java HashSet add()方法与示例
  8. Python | 7招教你识别一个网站是否是Django后台
  9. WebLogic11g 安装配置规范
  10. JS-逻辑运算符-累加累减-分支循环结构-九九乘法表
  11. h.264并行解码算法分析
  12. Atitit cms
  13. 计算机网络telnet命令作用,telnet命令使用方法详解
  14. 华为解锁刷机root教程详解
  15. 查看弹出广告来自哪个软件
  16. django 查询优化之 select_related 和 prefetch_related
  17. 关于robots协议
  18. 【玩转linux】head命令
  19. 邮件撤回方法详解,一键解决发错邮件的尴尬
  20. ECharts实现两根柱子重叠在一起的柱状图

热门文章

  1. 厉害了我的VR!老师们用VR来教历史
  2. 虚幻引擎UE4-命令行使用的一些技巧
  3. 论文图片误用?AI:这条路已被我堵死了
  4. GPT-3开始探索付费使用:每月给个700块,写得比莎士比亚还多
  5. 将整本《绿野仙踪》存入纳米级DNA中,高效准确,读取无压力
  6. 在任天堂Switch上倒贴30块钱“加班”,我一个程序员还觉得很刺激
  7. 完胜BERT!谷歌NLP预训练利器:小模型也有高精度,单个GPU就能训练 | 代码开源...
  8. 插入排序的Python实现
  9. 100多个基础常用JS函数和语法集合大全
  10. Spring、Spring Boot和TestNG测试指南 - 测试关系型数据库