在Kubernetes上部署和管理PostgreSQL

目录

有哪些选项可用于部署PostgreSQL?

选项 01 - 从头开始​​创建部署配置

选项 02 - 使用helm chart

什么是Helm?

Helm架构

Helm由三个主要概念组成

如何安装Helm

查找Helm Chart

可用的PostgreSQL图表

安装Helm Chart

配置选项

升级Helm Charts

删除Helm Chart

结论


PostgreSQL数据库是一个企业级、开源的对象关系数据库系统,专注于提供一个高度可扩展和健壮的平台,同时符合SQL标准。Kubernetes是一个开源容器编排平台,旨在在任何环境中轻松部署。它使用户能够轻松部署和管理容器化应用程序。

使用Kubernetes部署PostgreSQL实例可以让用户利用两个平台的优势。此外,它使用户能够在Kubernetes集群中创建高度可移植和可扩展的PostgreSQL实例。在本文中,我们将讨论如何在Kubernetes中轻松部署PostgreSQL pod。

有哪些选项可用于部署PostgreSQL?

在Kubernetes上部署PostgreSQL时,有两种选择。一种是从头开始创建Kubernetes部署,另一种是使用helm chart进行部署。

选项 01 - 从头开始​​创建部署配置

此选项要求用户设置 ConfigMap,创建和设置持久存储卷,然后创建PostgreSQL部署和服务。此过程涉及更高程度的规划和技术知识,以启动和运行服务。因此,仅当您有需要从头开始自定义配置的特定要求时才使用此选项。

因此,仅当您有需要自定义配置的特定要求时才使用此选项,例如复杂的持久存储配置、网络和安全策略、多集群连接等...

选项 02 - 使用helm chart

Helm charts可以被视为一种包,可用于将应用程序轻松部署到 Kubernetes集群。这些图表可用于任何类型的部署,从单个pod应用程序到由具有不同软件和服务的多个pod组成的复杂应用程序。

在本文中,我们将重点介绍使用helm chart来部署PostgreSQL实例。在此之前,我们应该知道Helm是什么以及如何在开发环境中配置Helm。

什么是Helm?

Helm是Kubernetes的包管理器。它是一个开源项目,旨在提供一种更有效的方式来管理部署应用程序时创建的Kubernetes YAML文件。

目前,Helm已经发展成为一个成熟的包管理器,它使用简单的CLI命令(Helm客户端)简化了Kubernetes集群上应用程序的安装、升级、依赖管理和配置。

Helm架构

Helm通过创建捆绑一个或多个Kubernetes清单(YAML文件)的helm charts来创建包。这些图表包含项目的所有依赖项,并允许用户使用单个命令部署应用程序。此外,charts可以进行版本控制,以便用户可以在不同版本下为同一个helm chart创建不同的配置。

Helm由三个主要概念组成

  • Chart- 包含在Kubernetes中创建应用程序实例所需的信息
  • Config - 包含可以与图表合并以创建可发布对象的配置信息。
  • Release- 图表的运行实例,结合特定配置。

Helm可执行文件可以分解为以下两个组件;

  • Helm客户端:最终用户使用的命令行工具,用于创建和管理Helm charts 以及与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环境中使用Chocolatey包管理器安装Helm。

choco install kubernetes-helm

就是这样,您已经完成了Helm的安装。接下来,让我们通过使用以下命令检查helm版本来验证安装。

helm version

查找Helm Chart

您可以选择从头开始创建Helm Charts。但是,也有预构建的图表,可以立即为PostgreSQL等流行软件部署。在那里,使用图表存储库存储和共享Helm Charts。

Artifact Hub是官方的分布式社区Helm Charts存储库。对于第三方存储库,我们需要将存储库添加到我们的本地环境中,然后才能使用它。

可用的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”在除了artifact hub之外的新添加的存储库中进行搜索。现在让我们使用以下命令在这个repo中搜索PostgreSQL实例。

helm search repo postgresql

安装Helm Chart

至此,我们已经找到了一个helm Charts,下一步是使用“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 默认 --image docker.io/bitnami/postgresql:11.11.0-debian-10-r31 --env= "PGPASSWORD= $POSTGRES_PASSWORD " --命令-- psql --host postgresql-test -U postgres -d postgres -p 5432

成功连接数据库后,我们可以通过检查服务器版本来验证我们的安装。

配置选项

根据所选的Helm Charts,可用的配置选项可能会有所不同。bitnami PostgreSQL图表提供了一整套选项,从简单的用户创建到复杂的安全配置,如设置证书和策略。所有可用选项都列在helm chart GitHub 页面上

让我们看看一些常见的选项,例如更改用户名、密码、数据库名称和端口。这可以通过在安装Helm Charts时提供以下参数来完成。

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部署。

test-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"

test-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 Charts。我们将“volumePermissions.enabled”设置为true以减轻写入存储卷时可能发生的任何权限问题。

helm install postgresql-test02 bitnami/postgresql --设置persistence.existingClaim=postgresql-pv-claim --设置volumePermissions.enabled= true

升级Helm Charts

升级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 Chart

我们可以通过使用delete命令提供图表名称来简单地删除Helm Charts,如下所示。

句法

helm delete <图表名称>

代码

掌舵删除 postgresql-test

但是,这不会删除与图表关联的任何PVC。所以我们需要手动删除未使用的PVC。

kubectl get pvc
kubectl delete pvc data-postgresql-test-postgresql-0

结论

在本文中,我们学习了如何使用helm chart在Kubernetes 集群中部署PostgreSQL数据库、更改配置以及升级和删除PostgreSQL chart。使用helm charts是在Kubernetes集群中部署常用应用程序的一种相对简单的方法。这使用户可以专注于数据库的开发,而无需创建复杂的Kubernetes配置。

https://www.codeproject.com/Articles/5298768/Deploy-and-Manage-PostgreSQL-on-Kubernetes

上一篇:helm部署prometheus


下一篇:helm 轻松完爆 gitlab