iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何通过Rancher在K8S上运行PostgreSQL数据库
  • 510
分享到

如何通过Rancher在K8S上运行PostgreSQL数据库

2023-06-04 12:06:49 510人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关如何通过Rancher在k8s上运行postgresql数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过Rancher kubernetes Engine

这篇文章将为大家详细讲解有关如何通过Rancher在k8s上运行postgresql数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

通过Rancher kubernetes Engine运行高可用 Postgresql

Rancher Kubernetes Engine (RKE)是一个轻量级的Kubernetes 安装程序,支持在裸金属和虚拟机上安装Kubernetes。RKE解决了Kubernetes安装的复杂性问题。通过RKE安装是比较简单的,而跟下层的操作系统无关。

Portworx是一个云原生的存储和数据管理平台,来支撑Kubernetes上持久性的工作负载。通过Portworx,用户能够管理不同基础架构上的、不同容器调度器上的数据库。它为所有的有状态服务(Stateful Service)提供了一个单一的数据管理层。

小编列出了操作步骤:通过RancherKubernetes Engine (RKE),在AWS的Kubernetes集群上,部署和管理高可用PostgreSQL集群。

总结来说,在Amazon上运行高可用PostgreSQL,需要:

  1.   通过Rancher KubernetesEngine安装一个Kubernetes集群

  2.  安装云原生存储解决方案Portworx,作为Kubernetes的一个DaemonSet。

  3.   建立一个存储类来定义你的存储要求,比如,复制因子,快照策略和性能情况

  4.  使用Kubernetes部署PostgreSQL

  5.  通过killing或者cordoning集群中的节点,来测试故障恢复

  6. 可能的话,动态的调整PG Volume的大小,快照和备份Postgres到S3

如何通过RKE来创建一个Kubernetes集群

RKE是一个安装和配置Kubernetes的工具。可以支持的环境包括裸金属,虚拟机或者IaaS。我们会在AWS EC2上创建一个3节点的Kubernetes集群。

更为详细的步骤,可以参考这篇tutorial from The New Stack. (https://thenewstack.io/run-stateful-containerized-workloads-with-rancher-kubernetes-engine-and-portworx/)

做完这些操作,我们会创建一个1 master 和 3 worker 节点的集群。

如何通过Rancher在K8S上运行PostgreSQL数据库

在Kubernetes上安装Portworx

在RKE的Kubernetes 上安装Portworx,跟在Kubernetes集群上通过Kops安装没什么不同。Portworx有详细的文档,列出每步的操作 (Https://docs.portworx.com/portworx-install-with-kubernetes/cloud/aws/),来完成在AWS环境的Kubernetes上运行Portworx集群。

The New Stacktutorial(https://thenewstack.io/run-stateful-containerized-workloads-with-rancher-kubernetes-engine-and-portworx/) 也包含了在Kubernetes部署Portworx DaemonSet的所有操作步骤。

如何通过Rancher在K8S上运行PostgreSQL数据库

Kubernetes集群运行起来,Portworx安装和配置完成,我们就开始部署一个高可用的PostgreSQL数据库。

创建一个Postgres 存储类

通过存储类对象,一个Admin可以定义集群中不同的Portworx卷的类。这些类在动态的卷的部署过程中会被用到。存储类本身定义了复制因子,IO情况(例如数据库或者CMS),以及优先级(比如SSD或者HDD)。这些参数影响着工作负载的可用性和输出,因此参数可以被根据每个卷分别设置。这很重要,因为对生产系统的数据库的要求,跟研发测试系统是完全不一样的。

在下面的例子里,我们部署的存储类,它的复制因子是3,IO情况设定成“db”,优先级设定成“high”。这意味着存储会被优化为适合低传输速率的数据库负载(Postgres),并且自动的部署在集群具备最高性能的存储里。

$ kubectl create -f https://raw.GitHubusercontent.com/fmrtl73/katacoda-scenariOS-1/master/px-k8s-postgres-all-in-one/assets/px-repl3-sc.yamlstorageclass "px-repl3-sc" created

创建一个Postgres PVC

我们现在可以基于存储类创建一个PersistentVolume Claim (PVC)。动态部署的优势就在于,claims能够在不需要显性部署持久卷Persistent Volume (PV)的情况下被创建。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/px-postgres-pvc.yamlpersistentvolumeclaim "px-postgres-pvc" created

PostgreSQL的密码会被创建成Secret。运行下面的命令来用正确的格式创建Secret。

$ echo postgres123 > passWord.txt$ tr -d '\n' .strippedpassword.txt && mv .strippedpassword.txt password.txt$ kubectl create secret generic postgres-pass --from-file=password.txtsecret "postgres-pass" created

在Kubernetes上部署PostgreSQL

最后,让我们创建一个PostgreSQL实例,作为一个Kubernetes部署对象。为了简单起见,我们只部署一个单独的Postgres Pod。因为Portworx提供同步复制来达到高可用。因此一个单独的Postgres实例,是Postgres数据库的最佳部署方式。Portworx也支持多节点的Postgres部署方式,看你的需要。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/postgres-app.yamldeployment "postgres" created

确保Postgres的Pods是在运行的状态。

$ kubectl get pods -l app=postgres -o wide --watch

如何通过Rancher在K8S上运行PostgreSQL数据库

等候直到Postgres pod变成运行状态。

如何通过Rancher在K8S上运行PostgreSQL数据库

我们可以通过使用与PostgresPod一起运行的pxctl工具,来检查Portworx卷。

$ VOL=`kubectl get pvc | grep px-postgres-pvc | awk '{print $3}'`$ PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o JSONpath='{.items[0].metadata.name}')$ kubectl exec -it $PX_POD -n kube-system -- /opt/pwx/bin/pxctl volume inspect ${VOL}

如何通过Rancher在K8S上运行PostgreSQL数据库

命令的输出信息,确认了支撑PostgreSQL数据库实例的卷已经被创建完成了。

PostgreSQL的错误恢复

让我们为数据库填充5百万行的样例数据。

我们首先找到运行PostgreSQL的Pod,来访问shell

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash

现在我们进入了Pod,我们能够连接到Postgres并且创建数据库。

# psqlpgbench=# create database pxdemo;pgbench=# \lpgbench=# \q

如何通过Rancher在K8S上运行PostgreSQL数据库

默认状态下,Pgbench会创建4张表:(pgbench_branches,pgbench_tellers,pgbench_accounts,pgbench_history),在主pgbench_accounts表里会有10万行。这样我们创建了一个简单的16MB大小的数据库。

使用-s选项, 我们可以增加在每张表中的行的数量。在上面的命令中,我们在“scaling”上填写了50,这样pgbench就会创建一个50倍默认大小的数据库。

我们的pgbench_accounts现在有5百万行了。这样我们的数据库变成了800MB (50*16MB)

# pgbench -i -s 50 pxdemo;

等待直到pgbench完成表的创建。我们接着来确认一下

pgbench_accounts现在有500万行的填充。

# psql pxdemo\dtselect count(*) from pgbench_accounts;\qexit

如何通过Rancher在K8S上运行PostgreSQL数据库

如何通过Rancher在K8S上运行PostgreSQL数据库

现在,我们来模拟PostgreSQL正在运行的节点的失效,

node=`kubectl get pods -l app=postgres -o wide | grep -v NAME | awk '{print $7}'`$ kubectl cordon ${NODE}node "ip-172-20-57-55.ap-southeast-1.compute.internal" cordoned

执行kubectl get nods, 确认了其中一个节点的排程已经失效了。

$ kubectl get nodes

如何通过Rancher在K8S上运行PostgreSQL数据库

我们继续删除这个PostgreSQLpod。

$ POD=`kubectl get pods -l app=postgres -o wide | grep -v NAME | awk '{print $1}'`$ kubectl delete pod ${POD}pod "postgres-556994cbd4-b6ghn" deleted

一旦删除完成。Portworx STorageORchestrator for Kubernetes (STORK)(https://portworx.com/stork-storage-orchestration-kubernetes/),会把pod重置来创建有数据复制集的节点。

一旦Pod被删除,它会被重置到有数据复制集的节点上。Portworx STorageORchestrator for Kubernetes (STORK) https://portworx.com/stork-storage-orchestration-kubernetes/)- Portworx的客户存储排程器,允许在数据所在节点上放置多个pod,并且确保正确的节点能够被选择来用来排程Pod。

让我们运行下面的命令验证一下。我们会发现一个新的pod被创建了,并且被排程在了一个不同的节点上。

$ kubectl get pods -l app=postgres

如何通过Rancher在K8S上运行PostgreSQL数据库

让我们把之前的节点重新部署回来。

$ kubectl uncordon ${NODE}node "ip-172-20-57-55.ap-southeast-1.compute.internal" uncordoned

最后,我们验证一下数据仍然是可用的。

我们来看下容器里的pod名称和exec。

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash

现在用psql来确保我们的数据还在。

# psql pxdemopxdemo=# \dtpxdemo=# select count(*) from pgbench_accounts;pxdemo=# \qpxdemo=# exit

如何通过Rancher在K8S上运行PostgreSQL数据库

我们看到数据库表都还在,并且所有的内容都是正确的。

在Postgres进行存储管理

测试了端到端的数据库错误恢复后,我们在Kubernetes集群上来运行StorageOps。

完全无停机下,扩充卷

我们现在来演示一下,在空间将满的情况下,如何简单的、动态的为卷添加空间。

在容器内打开一个shell,

$ POD=`kubectl get pods -l app=postgres | grep Running | awk '{print $1}'`$ kubectl exec -it $POD bash

让我们来用pgbench来运行一个baseline transaction benchmark,它将尝试增加卷容量到1Gib,并且没能成功。

$ pgbench -c 10 -j 2 -t 10000 pxdemo$ exit

如何通过Rancher在K8S上运行PostgreSQL数据库

在运行上面命令的时候,可能会有多种错误产生。第一个错误提示Pod已经没有空间了。

PANIC: could not write to file "pg_xlog/xlogtemp.73": No space left on device

Kubernetes并不支持在PVC创建后进行修改。我们在Portworx上用pxctl CLI工具来进行操作。

我们来获取卷的名称,用pxctl工具来查看。

ssh到节点里,运行下面的命令

POD=`/opt/pwx/bin/pxctl volume list --label pvc=px-postgres-pvc | grep -v ID | awk '{print $1}'`$ /opt/pwx/bin/pxctl v i $POD

如何通过Rancher在K8S上运行PostgreSQL数据库

注意到卷还有10%就要满了。让我们用下面的命令来扩充。

$ /opt/pwx/bin/pxctl volume update $POD --size=2Update Volume: Volume update successful for volume 834897770479704521

如何通过Rancher在K8S上运行PostgreSQL数据库

为卷做快照,并且恢复数据库

Portworx支持为Kubernetes PVCs创建快照。让我们为之前创建的Postgres PVC来创建一个快照。

$ kubectl create -f https://github.com/fmrtl73/katacoda-scenarios-1/raw/master/px-k8s-postgres-all-in-one/assets/px-snap.yamlvolumesnapshot "px-postgres-snapshot" created

可以通过下面的命令来看所有的快照。

$ kubectl get volumesnapshot,volumesnapshotdata

如何通过Rancher在K8S上运行PostgreSQL数据库

如何通过Rancher在K8S上运行PostgreSQL数据库

有了快照,我们来删掉数据库。

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash$ psqldrop database pxdemo;\l\qexit

快照就跟卷是一样的,我们可以使用它来创建一个新的PostgreSQL实例。让我们恢复快照数据,来创建一个新的PostgreSQL实例。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/px-snap-pvc.yamlpersistentvolumeclaim "px-postgres-snap-clone" created

从新的PVC,我们创建一个PostgreSQL Pod,

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/postgres-app-restore.yamldeployment "postgres-snap" created

确认这个pod是在运行状态。

$ kubectl get pods -l app=postgres-snap

如何通过Rancher在K8S上运行PostgreSQL数据库

最后,让我们访问由benchmark工具创建的数据。

$ POD=`kubectl get pods -l app=postgres-snap | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash
$ psql pxdemo\dtselect count(*) from pgbench_accounts;\qexit

如何通过Rancher在K8S上运行PostgreSQL数据库

我们发现表和数据都是正常的。如果我们想要在另一个Amazon区域创建一个容灾备份,我们可以把快照推送到Amazon S3。Portworx快照支持所有的S3兼容存储对象,所以备份也可以是其他的云或者是本地部署的数据中心。

Portworx可以通过RKE很容易的部署,用来运行Kubernetes上生产系统中有状态的工作负载。通过跟STORK的整合,devops和StorageOps团队能够无缝的在Kubernetes上运行数据库集群。他们也可以为云原生应用运行传统的操作,比如扩充卷,快照,备份,容灾恢复。

关于如何通过Rancher在K8S上运行PostgreSQL数据库就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何通过Rancher在K8S上运行PostgreSQL数据库

本文链接: https://www.lsjlt.com/news/237934.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何通过Rancher在K8S上运行PostgreSQL数据库
    这篇文章将为大家详细讲解有关如何通过Rancher在K8S上运行PostgreSQL数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过Rancher Kubernetes Engine...
    99+
    2023-06-04
  • Python在数据库上的运行过程
    本篇内容主要讲解“Python在数据库上的运行过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python在数据库上的运行过程”吧!下面就让我们一起来看看它的强大功能: Python(派森),...
    99+
    2023-06-17
  • 如何在Linux上安装和配置PostgreSQL数据库
    要在Linux上安装和配置PostgreSQL数据库,您可以按照以下步骤进行操作: 安装PostgreSQL软件包:在终端中运行以...
    99+
    2024-04-09
    PostgreSQL
  • 如何在Ubuntu上安装并配置PostgreSQL数据库
    要在Ubuntu上安装并配置PostgreSQL数据库,请按照以下步骤操作: 安装PostgreSQL数据库: 打开终端窗口,运行...
    99+
    2024-04-09
    Ubuntu
  • 如何在CentOS上安装和配置PostgreSQL数据库
    以下是在CentOS上安装和配置PostgreSQL数据库的步骤: 更新系统软件包: 首先,使用以下命令更新系统的软件包: su...
    99+
    2024-04-25
    CentOS
  • 在Kubernetes上运行MySQL数据库 Running MySQL on Kubernetes
    作者:禅与计算机程序设计艺术 1.简介 Kubernetes是一个开源系统用于自动部署、扩展和管理容器化的应用,在该系统中部署MySQL数据库也是同样重要的工作。本文将详细阐述如何在Kubernete...
    99+
    2023-09-30
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 如何在PostgreSQL中创建数据库
    要在PostgreSQL中创建数据库,可以使用以下命令: 使用超级用户登录到PostgreSQL数据库: psql -U pos...
    99+
    2024-04-09
    PostgreSQL
  • 在Linux上如何检查MySQL/MariaDB数据库正常运行时间
    这篇文章主要介绍了在Linux上如何检查MySQL/MariaDB数据库正常运行时间,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法 1:如何使用 ps 命令在 Linux...
    99+
    2023-06-16
  • 如何通过数据库日志发现潜在的数据库问题
    数据库日志是记录数据库活动的信息集合。这些信息可以帮助数据库管理员和开发人员识别潜在的数据库问题,例如性能下降、死锁、错误和其他问题。 1. 性能问题 数据库性能问题可能是由多种因素造成的,例如硬件瓶颈、数据库配置不当、查询不佳或索引不...
    99+
    2024-02-04
    数据库日志 性能问题 死锁 错误 性能调整
  • navicat过期了如何运行以前做的数据库
    通过修改 hosts 文件和创建虚拟网卡,可以绕过 navicat 试用期限制,继续访问和管理 mysql 数据库:在 hosts 文件中添加 127.0.0.1 localhost。创...
    99+
    2024-04-24
    mysql navicat macos
  • 如何通过phonegap操作数据库
    这篇文章主要介绍了如何通过phonegap操作数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实例如下:<!DOCTYPE&nbs...
    99+
    2024-04-02
  • 如何在django中连接PostgreSQL数据库
    这篇文章给大家介绍如何在django中连接PostgreSQL数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、连接Postgresql需要安装先psycopg2库,它是python语言的 PostgreSQL数...
    99+
    2023-06-14
  • (八) 在Kubernetes上运行MySQL数据库 Running MySQL on Kubernetes
    作者:禅与计算机程序设计艺术 1.简介 Kubernetes(简称K8s)是一个开源的、用于管理云平台中容器化的应用的开源系统。在Kubernetes的框架下,可以轻松部署容器化的应用程序,同时让它...
    99+
    2023-09-24
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 如何在阿里云上使用运维数据库
    本文将详细解释如何在阿里云上使用运维数据库,包括选择适合的数据库类型,配置数据库环境,以及使用运维数据库进行数据备份和恢复。 一、选择适合的数据库类型在阿里云上使用运维数据库的第一步是选择适合的数据库类型。阿里云提供了多种类型的数据库,包括...
    99+
    2024-01-26
    阿里 数据库 如何在
  • 如何通过SQLyog分析MySQL数据库
    这篇文章给大家介绍如何通过SQLyog分析MySQL数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。数据库、表格(table)和列树(column tree)该程序一启动就开始询问...
    99+
    2024-04-02
  • 如何通过php连接数据库并查询数据
    这篇文章主要介绍“如何通过php连接数据库并查询数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何通过php连接数据库并查询数据”文章能帮助大家解决问题。首先,我们需要确保我们已经安装了PHP和...
    99+
    2023-07-05
  • 如何通过使用JDBC操作部署在SAP云平台上的HANA数据库
    如何通过使用JDBC操作部署在SAP云平台上的HANA数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我介绍了如何通过JPA和EclipseLink操作部署...
    99+
    2023-06-02
  • 如何编写linux数据库备份并通过ftp上传脚本
    本篇内容介绍了“如何编写linux数据库备份并通过ftp上传脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:#!/bin/bas...
    99+
    2023-06-09
  • 如何通过网站调用mysql数据库
    PHP网站调用mysql数据库的方法连接数据库使用mysql_select_db()函数选择数据库mysql_select_db("school",$con)使用mysql_query()函数即可调用mysql数据库中的数据#result ...
    99+
    2024-04-02
  • 如何通过ADO控件访问数据库
    今天就跟大家聊聊有关如何通过ADO控件访问数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。下面以Microsoft Office&nb...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作