乐趣区

关于kubernetes:如何简洁优雅地部署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 代理前面,以取得额定的一层认证,而后就能够从任何中央超级简略和超级平安地拜访数据库了。

Pgweb 能够在 Linux、macOS 或 Windows 上本地运行,但咱们明天要探讨的是将它部署到你的 Kubernetes 集群中。在这篇文章中,咱们将把 Pgweb 镜像作为一个 pod 部署到咱们的集群中,应用 Kubernetes 服务裸露它,部署 PostgreSQL 并裸露它(但只在集群内以取得最大的安全性),而后连贯到数据库。最初,咱们将通过 Rancher 作为工作负载重新部署所有,看看 Rancher 让你的应用程序启动和运行变得如许容易。

后期筹备

要实现本文的教程指南,你须要提前准备以下货色:

  • Rancher deployment(你能够查看官网的疾速指南理解如何启动并运行 Rancher:https://www.rancher.cn/quick-…)
  • 由 Rancher 治理的 Kubernetes 集群(依据这一文档导入或配置一个集群:https://rancher2.docs.rancher…)

部署 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   <none>        8081:31338/TCP   9s

当初在浏览器中进入一个该端口上的节点的公共 IP。找到你的公关 IP 以及依据你的设置关上必要的防火墙端口,如果一切顺利,你将会看到 Pgweb 登录页面。

如果你在拜访节点端口时遇到问题,端口转发(port forwarding)在紧要关头也能发挥作用。

当初咱们须要一个数据库来拜访。

应用示例数据部署 PostgreSQL

与 Pgweb 相似,咱们将应用一个 YAML manifest 在 Kubernetes 中部署 PostgreSQL。这个略微有些艰难。咱们将保留默认的 ClusterIP 服务类型,因为咱们不心愿从集群内部拜访数据库。否则,咱们所有为了保障平安的设置都是白搭。

咱们正在应用的镜像是一个规范的 PostgreSQL 镜像,然而曾经预载了样本国家的数据:

https://hub.docker.com/r/ghus…

复制以下内容到 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

当初你曾经连贯到数据库,点击左侧表格中的“city”:

请留神咱们所应用的 host 名称。这是 Kubernetes 的外部 DNS 在工作,容许你通过名字而不是 pod IP 连贯到服务。第一局部是服务名称,咱们在 postgres.yaml 文件中定义了它。第二局部是你的服务所部署的命名空间——本例中为 default。接下来,svc 明确阐明咱们应用的是服务名称(你也能够通过名称指定 pod)。最初,cluster.local是集群的默认 DNS 名。这种架构能够轻松地将 pod 连贯在一起,并利用服务如何优雅地解决正本和隔离离线的 pod。

回到 Pgweb,点击顶部的 “Query”,尝试查询数据库中的 New Zealand。

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 文件。

  • 在【Global】视图中,关上你要部署工作负载的我的项目(如果你没有创立其余我的项目,默认我的项目也能够)。
  • 咱们能够导入 YAML 文件,但这一次咱们试试全程应用 GUI 来构建咱们的配置,点击【Deploy】
  • 将其命名为pgweb,并设置 Docker 镜像为sosedoff/pgweb
  • 点击【Add Port】,将其命名为 pgweb-svc 并设置容器端口为8080
  • 点击【Launch】,Rancher 将把你的 Pod 部署到集群中
  • 当初对 PostgreSQL pod 反复以上步骤,起一个适合的名字并应用 ghusta/postgres-world-db 作为镜像。容器端口为5432,并将服务类型更改为Cluster IP
  • 在该页面上列出你的工作负载,你将看到调配给 Pgweb 集群的节点端口,应用该端口拜访 Pgweb 登录页面,并应用同一凭据登录。
  • 回到你的 terminal,运行 kubectl get podskubectl get svc以查看 Rancher 部署的 pod 和服务。

结 论

在本文中,咱们曾经理解了 Web 开发人员的首选数据库 PostgreSQL 和 Pgweb 客户端。咱们首先应用 manifest 文件手动将其部署到咱们的 Kubernetes 集群,而后应用 Rancher 重新部署。两相比拟,咱们能够看到 Rancher 可能打消部署和编辑应用程序 pods 所波及的一些开销。心愿你能够从部署这些资源中取得教训,在设置其余应用程序在多个 pod 之间进行通信(如 WordPress 或自定义 Web 应用程序)的过程中利用这些教训进一步实际。

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

退出移动版