如何简洁优雅地部署PostgreSQL和Pgweb?

网友投稿 350 2022-10-11

如何简洁优雅地部署PostgreSQL和Pgweb?

本文转自Rancher Labs

介绍PostgreSQL和Pgweb

PostgreSQL是一款以可靠性和性能为人所熟知的开源数据库。它在很多行业和应用程序中都有应用,尤其是web开发人员的最爱。从node.js到Django再到Rails和Spring,所有主流web框架均原生支持PostgreSQL,所以其适应性在整个互联网的网站后台系统中是相当广泛的。

与任何数据库一样,开发人员需要工具来使用它们。Pgweb是一个开源的、基于web的PostgreSQL客户端。它有一个非常简洁的界面,让你可以连接到任何PostgreSQL实例来浏览数据表,运行查询和导出数据。对于轻量级的数据库工作来说,它比pgAdmin等应用程序更加轻量级和方便。

在安全方面,向互联网开放数据库端口是一个糟糕的想法。需要快速访问调试运行在Kubernetes集群上的生产数据库的开发人员可以通过多种方式设置Pgweb来保证数据库的安全,并保持其安全态势。例如,将Pgweb部署到与数据库相同的集群中,并将其公开暴露,同时保持数据库端口只能在网络内部访问。将Pgweb放在Oauth2代理后面,以获得额外的一层认证,然后就可以从任何地方超级简单和超级安全地访问数据库了。

前期准备

要完成本文的教程指南,你需要提前准备以下东西:

Rancher deployment(你可以查看官网的快速指南了解如何启动并运行Rancher:https://rancher.cn/quick-start/)  由Rancher管理的Kubernetes集群(根据这一文档导入或配置一个集群:https://rancher2.docs.rancher.cn/docs/cluster-provisioning/_index)   部署Pgweb

创建一个名为pgweb.yaml的新文件,将以下内容粘贴进去,然后应用该文件来部署你的pod和服务。

apiVersion: v1 kind: Pod metadata: labels: run: pgweb name: pgweb spec: containers: - image: sosedoff/pgweb name: pgweb ports: - containerPort: 8081 --- apiVersion: v1 kind: Service metadata: labels: run: pgweb name: pgweb-svc spec: ports: - port: 8081 targetPort: 8081 protocol: TCP type: NodePort selector: run: pgweb

kubectl apply -f pgweb.yaml pod/pgweb created service/pgweb-svc created

然后获取服务信息,找到正在使用的节点端口;在本文中,它是31338。你的可能会有所不同,但一般会在30000-32767范围内。

kubectl get svc pgweb-svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pgweb-svc NodePort 10.96.47.248 8081:31338/TCP 9s

现在我们需要一个数据库来访问。

使用示例数据部署PostgreSQL

与Pgweb类似,我们将使用一个YAML manifest在Kubernetes中部署PostgreSQL。这个稍微有些困难。我们将保留默认的ClusterIP服务类型,因为我们不希望从集群外部访问数据库。否则,我们所有为了保障安全的设置都是白搭。

我们正在使用的镜像是一个标准的PostgreSQL镜像,但是已经预载了样本国家的数据:

复制以下内容到postgres.yaml中并应用该manifest:

apiVersion: v1 kind: Pod metadata: labels: run: postgres name: postgres spec: containers: - image: ghusta/postgres-world-db name: postgres ports: - containerPort: 5432 --- apiVersion: v1 kind: Service metadata: labels: run: postgres name: postgres-svc spec: ports: - port: 5432 targetPort: 5432 protocol: TCP selector: run: postgres

kubectl apply -f postgres.yaml pod/postgres created service/postgres-svc created

通过集群DNS连接到数据库

现在回到我们的Pgweb登录页面,用以下信息登录:

Host:postgres-svc.default.svc.cluster.local 用户名:world 密码:world123 数据库:world-db SSL模式:Disable

SELECT * FROM city WHERE country_code like 'NZL'

或者查询拥有超过80年历史的城市:

SELECT * FROM country WHERE life_expectancy > 80

你可以花费尽可能多的时间来查看数据,就好像你是一个开发人员正在为一个连接到这个数据库的应用程序排除故障一样。当你准备好继续时,从你的集群中删除资源,以便进行下一步:

kubectl delete -f pgweb.yaml kubectl delete -f postgres.yaml

使用Rancher重新部署

现在我们将重新部署相同的配置,不过这一次我们将使用Rancher来部署工作负载而不是Kubernetes manifest文件。

在本文中,我们已经了解了Web开发人员的首选数据库PostgreSQL和Pgweb客户端。我们首先使用manifest文件手动将其部署到我们的Kubernetes集群,然后使用Rancher重新部署。两相比较,我们可以看到Rancher能够消除部署和编辑应用程序pods所涉及的一些开销。希望你可以从部署这些资源中获得经验,在设置其他应用程序在多个 pod 之间进行通信(如 WordPress 或自定义 Web 应用程序)的过程中利用这些经验进一步实践。

在你的集群公共IP上访问Pgweb和连接数据库,这与通过Kubernetes manifest文件部署两者时的工作原理是一样的。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Hadoop+HBase+ZooKeeper分布式集群环境搭建步骤
下一篇:Redis STRALGO LCS命令与实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~