目录
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) |
成功连接数据库后,我们可以通过检查服务器版本来验证我们的安装。
配置选项
根据所选的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 |
然后,我们可以使用以下命令将持久卷声明附加到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 |
结论
在本文中,我们学习了如何使用helm chart在Kubernetes 集群中部署PostgreSQL数据库、更改配置以及升级和删除PostgreSQL chart。使用helm charts是在Kubernetes集群中部署常用应用程序的一种相对简单的方法。这使用户可以专注于数据库的开发,而无需创建复杂的Kubernetes配置。
https://www.codeproject.com/Articles/5298768/Deploy-and-Manage-PostgreSQL-on-Kubernetes