如何在 Kubernetes 上部署 PostgreSQL?
简介
PostgreSQL 是一个开源关系数据库管理系统 (RDBMS),以其稳健性、稳定性以及处理复杂和大型数据集的能力而闻名。另一方面,Kubernetes 是一个开源容器编排系统,可以自动执行容器化应用程序的部署、扩展和管理。
结合这两种强大的技术,可以为托管 PostgreSQL 数据库提供一个高度可扩展且可靠的环境。在本文中,我们将探讨如何在 Kubernetes 上部署 PostgreSQL。
我们将首先解释 PostgreSQL 和 Kubernetes 的含义,以及在 Kubernetes 上部署 PostgreSQL 的优势。然后,我们将概述部署过程,并深入探讨每个步骤。
部署过程概述
在 Kubernetes 上部署 PostgreSQL 的过程涉及多个步骤。我们将在以下章节中详细介绍每个步骤。部署过程概述包括:-
设置 Kubernetes 集群- 您可以选择使用云提供商或设置本地集群用于开发目的。
准备 PostgreSQL 镜像- 为 PostgreSQL 部署选择一个基础镜像,并配置它以便与 Kubernetes 一起使用。
创建部署清单- 以 YAML 格式定义部署规范,并配置环境变量、卷和端口。
在 Kubernetes 上部署 PostgreSQL- 使用 kubectl 部署清单文件,并使用 kubectl 命令监控部署状态。
扩展和更新 PostgreSQL- 根据按需更新配置或版本。
在 PostgreSQL 中备份数据− 使用 pg_dump 或 pgBackrest 设置备份,并将备份存储在云存储中。
设置 Kubernetes 集群
在 Kubernetes 上部署 PostgreSQL 需要一个正常运行的 Kubernetes 集群,该集群由一组协同工作以管理容器化应用程序的节点组成。您可以在自己的机器上创建集群,也可以使用 Amazon Web Services (AWS)、Google Cloud Platform (GCP) 或 Microsoft Azure 等云提供商。不同的云提供商在价格、功能和支持的 Kubernetes 版本方面各不相同。
选择云提供商或设置本地集群
在选择云提供商或设置本地集群之前,请考虑成本效益、基础设施管理技能和团队规模、合规性要求以及应用程序需求等因素。云提供商提供托管服务,负责底层基础设施管理,同时提供易于使用的界面,只需极少的设置即可启动集群。缺点是与维护内部解决方案相比,长期来看可能会产生成本。
安装和配置 kubectl 和 Helm
设置好 Kubernetes 集群后,就该安装 kubectl 了,它是与 Kubernetes API 服务器交互的重要工具。kubectl 允许开发者访问 pods/services/replication controllers/configMaps/secrets 等,从而将应用程序部署到新创建的集群上。
Helm 可以使用大多数操作系统上提供的软件包管理器进行安装,例如 macOS 和 Linux 上的 apt 或 brew。安装完成后,您可以使用 helm 命令与图表进行交互。
准备 PostgreSQL 镜像
在 Kubernetes 上部署 PostgreSQL 之前,您需要准备一个包含必要软件和配置的 Docker 镜像。您可以从 Docker Hub 获取 PostgreSQL 基础镜像,也可以使用其他组件构建自己的自定义镜像。
选择用于 PostgreSQL 部署的基础镜像 PostgreSQL 基础镜像包含操作系统、Postgres 二进制文件和一些基本配置。
配置用于 Kubernetes 的镜像
选择用于在 Kubernetes 上部署 Postgres 的基础镜像后,就该配置它以便在 Kubernetes 中使用了。为了使您的容器化 Postgres 实例在 Kubernetes 中以最佳方式工作,需要在其容器规范中设置一些环境变量。例如:-
POSTGRES_USER- 用于设置初始用户帐户。 - POSTGRES_PASSWORD:设置初始密码。
POSTGRES_DB− 指定默认连接的数据库。kubectl create 命令行实用程序允许我们使用 YAML 文件创建或修改这些环境变量。
创建部署清单
设置好 Kubernetes 集群并准备好 PostgreSQL 镜像后,下一步是创建部署清单。部署清单是一个 YAML 文件,用于定义在 Kubernetes 上部署 PostgreSQL 的规范。在此文件中,您可以指定各种参数,例如副本数量、Pod 标签、容器镜像等等。
以 YAML 格式定义部署规范
部署清单通常以 YAML 格式编写,包含多个部分,用于定义 PostgreSQL 部署的各个组件。在顶层,您需要指定部署的元数据,例如名称和标签。您还需要定义要部署的副本数量。
在每个副本规范中,您需要指定用于运行 PostgreSQL 的容器镜像以及其他详细信息,例如资源限制和请求。
配置环境变量、卷和端口
环境变量部分允许您设置 PostgresSQL 中各种不同配置选项的值,例如数据库名称、密码或服务器端口(这些选项在 postgresql.conf 文件中定义)。这使得跨多个部署或环境管理配置变得容易。
卷用于在容器内运行的应用程序重启或升级时持久存储数据。为了使卷能够与在 Kubernetes 上运行 PostgreSQL 的容器一起使用,必须将其挂载到容器文件系统内的特定位置。
在 Kubernetes 上部署 PostgreSQL
创建清单文件后,使用 kubectl 在 Kubernetes 上部署 PostgreSQL 非常简单。部署前,请确保 Kubernetes 上下文已设置为正确的集群,并且 kubectl 有权访问该集群。要部署,只需在包含清单文件的目录中运行以下命令:
kubectl apply -f postgres-manifest.yaml
Kubernetes 将根据清单文件中定义的规范开始创建 Pod。
所有 Pod 运行并准备就绪后,即可通过服务对象访问 PostgreSQL,该对象可以使用其 ClusterIP 或 NodePort 进行访问。服务对象会抽象出对 Pod IP 地址或节点端口的任何更改。
使用 kubectl 部署清单文件
"kubectl apply"命令允许您从 YAML 或 JSON 文件创建或更新资源,而无需使用"kubectl create"手动分别定义每个资源。如果您更改了清单文件中的部署规范,可以再次使用"kubectl apply"来更新部署。您还可以使用"kubectl get"命令查看有关部署状态的信息。
使用 kubectl 命令监控部署状态
监控是任何生产系统的一个重要方面。在 Kubernetes 中,有几种方法可以使用 kubectl 命令监控已部署应用程序的状态。
您可以使用"kubectl get pods"检查 Pod 状态,该命令显示每个 Pod 是否正在运行。如果某个 Pod 最近由于错误或崩溃环回关闭错误(活性探测失败)而重启,使用以下命令查看其日志可能会有所帮助:-
kubectl logs
如果您想查看资源使用情况指标,可以使用 `kubectl top`。
结论
在 Kubernetes 上部署 PostgreSQL 有很多好处,对于使用 PostgreSQL 的组织来说,这是一个极具吸引力的选择。首先,由于 Kubernetes 提供自动扩展和滚动更新功能,它使数据库的扩展和更新变得更加容易。
其次,使用容器化可以提高资源利用率,从而可以在一台机器上运行多个数据库实例。此外,在 Kubernetes 上部署 PostgreSQL 还可以通过使用副本和自动故障转移机制来提高可靠性。

