在Kubernetes上部署和管理PostgreSQL
PostgreSQL 数据库是一个企业级、开源的对象关系数据库系统,专注于提供高度可扩展和健壮的平台,同时符合 SQL 标准。 Kubernetes 是一个开源容器编排平台,旨在轻松部署在任何环境中。它使用户能够轻松部署和管理容器化应用程序。 利用 Kubernetes 部署 PostgreSQL 实例,用户可以利用这两个平台的优势。此外,它使用户能够在 Kubernetes 集群中创建高度可移植
PostgreSQL 数据库是一个企业级、开源的对象关系数据库系统,专注于提供高度可扩展和健壮的平台,同时符合 SQL 标准。 Kubernetes 是一个开源容器编排平台,旨在轻松部署在任何环境中。它使用户能够轻松部署和管理容器化应用程序。
利用 Kubernetes 部署 PostgreSQL 实例,用户可以利用这两个平台的优势。此外,它使用户能够在 Kubernetes 集群中创建高度可移植和可扩展的 PostgreSQL 实例。在本文中,我们将讨论如何在 Kubernetes 中轻松部署 PostgreSQL pod。
哪些选项可用于部署 PostgreSQL?
在 Kubernetes 上部署 PostgreSQL 时,有两种选择。一种是从头开始创建 Kubernetes 部署,另一种是使用 helm chart 进行部署。
选项 01 - 从头开始创建部署配置
此选项要求用户设置 ConfigMap,创建和设置持久存储卷,然后创建 PostgreSQL 部署和服务。此过程涉及更高程度的规划和技术知识,以使服务启动和运行。因此,仅当您有需要从头开始自定义配置的特定要求时才使用此选项。
因此,仅当您有需要自定义配置(例如复杂的持久性存储配置、网络和安全策略、多集群连接等)的特定要求时才使用此选项...
选项 02 - 使用舵图
Helm 图表可以被认为是一种可以用来轻松地将应用程序部署到 Kubernetes 集群的包。这些图表可用于任何类型的部署,从单个 pod 应用程序到由具有不同软件和服务的多个 pod 组成的复杂应用程序。
在本文中,我们将重点介绍使用 helm chart 来部署 PostgreSQL 实例。在此之前,我们应该知道 Helm 是什么,以及如何在开发环境中配置 Helm。
Helm 是什么?
Helm 被认为是 Kubernetes 的包管理器。它是一个开源项目,旨在提供一种更有效的方式来管理部署应用程序时创建的 Kubernetes YAML 文件。
目前,Helm 已经发展成为一个成熟的包管理器,它使用简单的 CLI 命令(Helm 客户端)简化了 Kubernetes 集群上应用程序的安装、升级、依赖管理和配置。
Helm 架构
Helm 通过创建捆绑一个或多个 Kubernetes 清单(YAML 文件)的 helm 图表来创建包。这些图表包含项目的所有依赖项,并允许用户使用单个命令部署应用程序。此外,chart 可以进行版本控制,以便用户可以在不同版本下为同一个 helm chart 创建不同的配置。
Helm由三个主要概念组成
-
Chart - 包含在 Kubernetes 中创建应用程序实例所需的信息
-
Config - 包含可以与图表合并以创建可发布对象的配置信息。
-
发布 - 图表的运行实例,结合特定配置。
Helm 可执行文件可以分解为两个组件,如下所示;
-
The Helm Client:终端用户使用的命令行工具,用于创建和管理 helm 图表以及与 Helm 库的接口。
-
Helm 库:与 Kubernetes API 接口并执行所有 helm 操作。
这两个都是用 Go 编程语言编写的。为了与 Kubernetes 连接,Helm 通过 REST API 使用 Kubernetes 客户端库。
如何安装 Helm
在安装 Helm 之前,我们需要配置并运行一个 Kubernetes 集群。推荐使用 Kubernetes 最新的稳定版本。
安装 Helm 是一个简单的过程。您可以使用包管理器,例如 Mac 的 Homebrew、Windows 的 Chocolatey/Scoop 或 Debian/Ubuntu 的 apt/Snap。安装 Helm 的另一种方法是为相关操作系统下载二进制。
以下示例演示了如何在 Windows 环境中使用巧克力包管理器安装 Helm。
choco install kubernetes-helm
结果
就是这样,您已经完成了 Helm 的安装。接下来,让我们通过使用以下命令检查 helm 版本来验证安装。
helm version
结果
寻找 Helm 图表
您可以选择从头开始创建掌舵图。但是,也有一些预构建的图表可以立即部署到 PostgreSQL 等流行软件中。在那里,Helm 图表使用图表存储库进行存储和共享。
Artifact Hub是官方分布式社区 Helm 图表存储库。对于第三方存储库,我们需要先将存储库添加到我们的本地环境中,然后才能使用它。
可用的 PostgreSQL 图表
首先,我们必须找到一个合适的 PostgreSQL helm chart 进行部署。为此,我们可以在 CLI 界面中使用以下命令搜索 Artifact Hub。
helm search hub postgresql
结果
上述命令将在 Artifact Hub 中搜索所有可用图表以获取 PostgreSQL 图表。 “hub”参数指向 Artifact Hub。
要在第三方存储库中搜索,首先,我们需要将存储库添加到我们的 helm 安装中。它可以通过“repo add”命令来完成。以下示例显示如何将 bitnami 存储库添加到我们的 helm 安装并搜索存储库。
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami
结果
在上面的搜索命令中,我们使用参数“repo”在工件中心之外的新添加的存储库中进行搜索。现在让我们使用以下命令在这个 repo 中搜索 PostgreSQL 实例。
helm search repo postgresql
结果
安装 Helm 图表
到目前为止,我们已经找到了一个 helm 图表,下一步是使用“helm install 命令”安装该图表,如下所示。
语法helm install <Pod Name> <Chart Name>
代码helm install postgresql-dev bitnami/postgresql
结果
等到安装完成。然后,查看Kubernetes环境,你会看到一个PostgreSQL实例已经部署成功。
kubectl get all
结果
现在我们已经部署了一个 PostgreSQL 容器。下一步是连接到数据库,可以使用以下命令完成。
我们需要提取实例的密码并将其保存为环境变量。该密码将用于创建连接。
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql-test -o jsonpath="{.data.postgresql-password}" | base64 --decode)
kubectl run postgresql-test-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.11.0-debian-10-r31 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql-test -U postgres -d postgres -p 5432
结果
成功连接数据库后,我们可以通过检查服务器版本来验证我们的安装。
配置选项
根据所选的舵图,可用的配置选项可能会有所不同。 bitnami PostgreSQL 图表提供了从简单的用户创建到复杂的安全配置(如设置证书和策略)的大量选项。所有可用选项都列在 helm chartGitHub 页面上。
让我们看看一些常见的选项,例如更改用户名、密码、数据库名称和端口。这可以通过在安装 helm chart 时提供以下参数来完成。
helm install postgresql-test01 bitnami/postgresql --set
global.postgresql.postgresqlUsername=testadmin --set
global.postgresql.postgresqlPassword=testadmin123 --set
global.postgresql.postgresqlDatabase=testdb --set
global.postgresql.servicePort=5555
结果
以上输出表明新端口已配置,并创建了新用户。如果我们导出“testadmin”用户的密码,它将返回用户定义的密码。
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql-test01 -o jsonpath="{.data.postgresql-password}" | base64 --decode)
结果
另一个常见的场景是为 PostgreSQL 部署配置持久存储。我们需要在安装 helm chart 之前创建持久存储卷。下面的代码块显示了如何创建一个简单的存储卷和一个卷声明,然后将其附加到 PostgreSQL 部署。
测试-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgresql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
测试-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
创建卷并声明kubectl apply -f test-pv.yaml``kubectl apply -f test-pvc.yaml
kubectl get pvc
结果
然后,我们可以使用以下命令将持久卷声明附加到 helm 图表。我们将“volumePermissions.enabled”设置为 true 以减轻写入存储卷时可能发生的任何权限问题。
helm install postgresql-test02 bitnami/postgresql --set
persistence.existingClaim=postgresql-pv-claim --set
volumePermissions.enabled=true
结果
升级头盔图
升级 PostgreSQL helm 时,必须提供现有的 postgresqlPassword 和 replication.password 参数。它将确保这些值不会随随机细节更新,这将导致数据库无法访问。
句法
helm upgrade <Pod Name> <Chart Name> --set
postgresqlPassword=<POSTGRESQL_PASSWORD> --set
replication.password=<REPLICATION_PASSWORD>
代码
helm upgrade postgresql-test bitnami/postgresql --set
postgresqlPassword=testadmin123 --set
replication.password=12345
结果
删除 Helm 图表
我们可以通过使用 delete 命令提供图表名称来简单地删除 helm 图表,如下所示。
语法helm delete <Chart Name>
代码helm delete postgresql-test
结果
但是,这不会删除与图表关联的任何 PVC。所以我们需要手动删除未使用的 PVC。kubectl get pvc
kubectl delete pvc data-postgresql-test-postgresql-0
结果
结论
在本文中,我们学习了如何使用 helm chart 在 Kubernetes 集群中部署 PostgreSQL 数据库、更改配置以及升级和删除 PostgreSQL chart。使用 helm 图表是在 Kubernetes 集群中部署常用应用程序的一种相对简单的方法。这让用户可以专注于数据库的开发,而无需创建复杂的 Kubernetes 配置。
更多推荐
所有评论(0)