Zalando Postgres Operator 快速上手

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: Zalando Postgres Operator 快速上手

   前提条件



由于 Postgres Operator 是为 Kubernetes (K8s) 框架设计的,因此首先设置它。对于本地测试,我们建议使用以下解决方案之一:


  • minikube, 在 VM 内创建单节点 K8s 集群(需要 KVMVirtualBox
  • kind 和 k3d, 允许创建在 Docker 上运行的多节点 K8s 集群(需要 Docker

要与 K8s 基础设施交互,请安装其 CLI 运行时 kubectl。


本快速入门假设您已经启动了 minikube 或创建了本地 kind 集群。请注意,您还可以使用 Docker Desktop for Mac 中内置的 K8s 支持来遵循本教程的步骤。您必须将 minikube startminikube delete 替换为您的启动操作,以获得 Docker 内置的 K8s 支持。


   配置选项


只能在部署新的 Postgres 集群之前配置 Postgres Operator。这可以通过两种方式工作:通过 ConfigMap 或自定义 OperatorConfiguration 对象。有关配置的更多详细信息,请参见此处。



   部署选项


Postgres Operator 可以通过以下方式部署:

  • Manual deployment
  • Kustomization
  • Helm chart


Kubernetes 上的手动部署设置


只需应用 yaml 清单即可安装 Postgres Operator。注意,我们提供的 /manifests 目录仅作为示例;您应该考虑将清单调整为您的 K8s 环境(例如:命名空间)。


# 首先,克隆存储库并切换到目录
git clone https://github.com/zalando/postgres-operator.git
cd postgres-operator
# 按以下顺序应用清单
kubectl create -f manifests/configmap.yaml  # 配置
kubectl create -f manifests/operator-service-account-rbac.yaml  # 身份和权限
kubectl create -f manifests/postgres-operator.yaml  # 部署
kubectl create -f manifests/api-service.yaml  # 通过 UI 使用 operator API


有一个 Kustomization manifest 结合了上述资源(CRD 除外)— 它可以与 kubectl 1.14 或更高版本一起使用,如下所示:



kubectl apply -k github.com/zalando/postgres-operator/manifests


为方便起见,我们使用 run_operator_locally 脚本通过 minikube 自动启动 operator。它应用 acid-minimal-cluster。清单。


./run_operator_locally.sh


OpenShift 上的手动部署设置


要在 OpenShift 中安装 Postgres Operator,您必须将配置参数 kubernetes_use_configmaps 更改为 "true"。否则,operatorPatroni 将在 OpenShift 不支持的 Endpoints 中存储 leader 和配置 keys。对于 postgres-operatorpostgres-pod 集群角色,这还需要一组稍微不同的规则。


oc create -f manifests/operator-service-account-rbac-openshift.yaml


Helm chart


或者,可以使用提供的 Helm chart 安装 operator,从而为您节省手动步骤。克隆此 repo 并将目录更改为 repo 根目录。安装 Helm v3 后,您应该能够运行:



helm install postgres-operator ./charts/postgres-operator


chart 适用于 Helm 2Helm 3。使用 v3 时,将跳过 v2 中的 crd-installhook 并发出警告。使用 Helm 2 安装应用程序的文档可以在 v2 文档中找到。


chart 还托管在:


   检查 Postgres Operator 是否正在运行


启动 operator 可能需要几秒钟。在应用 Postgres 集群清单之前检查 operator pod 是否正在运行。


# 如果您使用 yaml 清单创建了 operator
kubectl get pod -l name=postgres-operator
# 如果您使用 helm chart 创建了 operator
kubectl get pod -l app.kubernetes.io/name=postgres-operator


如果 operator 没有进入 Running 状态,请使用 kubectl describe 检查 deploymentpod 的最新 K8s 事件或检查 operator 日志:


kubectl logs "$(kubectl get pod -l name=postgres-operator --output='name')"


   部署 operator UI


在以下段落中,我们将描述如何使用 kubectl 从命令行访问和管理 PostgreSQL 集群。但也可以通过基于浏览器的 Postgres Operator UI 来完成。在部署 UI 之前,请确保 operator 正在运行,并且可以通过 K8s service 访问其 REST API。此 APIURL 必须在 UI 的部署清单中配置。


要部署 UI,只需应用其所有清单文件或使用 UI helm chart


# 手动部署
kubectl apply -f ui/manifests/
# 或 kustomization
kubectl apply -k github.com/zalando/postgres-operator/ui/manifests
# 或 helm chart
helm install postgres-operator-ui ./charts/postgres-operator-ui


operator 一样,检查 UI pod 是否进入 Running 状态:


# 如果您使用 yaml 清单创建了 operator
kubectl get pod -l name=postgres-operator-ui
# 如果您使用 helm chart 创建了 operator
kubectl get pod -l app.kubernetes.io/name=postgres-operator-ui


您现在可以通过端口转发 UI pod(注意 label selector)访问 Web 界面,并在浏览器中输入 localhost:8081


kubectl port-forward svc/postgres-operator-ui 8081:80


UI 文档中详细解释了可用选项。


   创建 Postgres cluster


如果 operator pod 正在运行,它会侦听有关 postgresql 资源的新事件。现在,是时候提交您的第一个 Postgres 集群清单了。


# 创建一个 Postgres cluster
kubectl create -f manifests/minimal-postgres-manifest.yaml


cluster 清单提交并通过验证后,operator 将创建 ServiceEndpoint 资源以及一个 StatefulSet,它根据清单中指定的实例数量启动新的 Pod。所有资源都像 cluster 一样命名。数据库 pod 可以通过它们的数字后缀来识别,从 -0 开始。他们运行 Zalando 的 Spilo 容器镜像。至于 servicesendpoints,将有一个用于 master pod,另一个用于所有副本(-repl 后缀)。检查是否所有组件都出现了。使用标签 application=spilo 过滤并列出标签 spilo-role 以查看当前谁是 master


# 检查部署的 cluster
kubectl get postgresql
# 检查创建的 database pod
kubectl get pods -l application=spilo -L spilo-role
# 检查创建的 service 资源
kubectl get svc -l application=spilo -L spilo-role


   通过 psql 连接到 Postgres cluster


您可以在 database pod 上创建端口转发以连接到 Postgres。有关说明,请参阅用户指南。使用 minikube 也很容易从指向 master podK8s service 中检索连接字符串:


export HOST_PORT=$(minikube service acid-minimal-cluster --url | sed 's,.*/,,')
export PGHOST=$(echo $HOST_PORT | cut -d: -f 1)
export PGPORT=$(echo $HOST_PORT | cut -d: -f 2)


cluster 中创建的 K8s Secret 中检索密码。默认情况下拒绝非加密连接,因此将 SSL 模式设置为 require


export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d)
export PGSSLMODE=require
psql -U postgres


   删除 Postgres cluster


要删除 Postgres 集群,只需删除 postgresql 自定义资源。


kubectl delete postgresql acid-minimal-cluster


这应该删除关联的 StatefulSetdatabase PodsServicesEndpointsPersistentVolume 被释放,PodDisruptionBudget 被删除。但是,Secrets 不会被删除,并且备份将保留在原位。


在集群仍在启动或在该阶段卡住时删除集群时,可能会删除 postgresql 资源,留下孤立的组件。在创建新的 Postgres 集群时,这可能会导致麻烦。对于全新的设置,您可以删除本地 minikubekind 集群并重新开始。



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
NoSQL MongoDB 索引
Mongo优化——explain函数的基本使用
当数据量不大时,查询语句随便写,只要实现逻辑功能即可;但当数据量大到一定程度时,可能以前的方法就不可行了,因为一是查询数度变慢,更有甚者可能因数据量大而导致查询失败。解决这种问题最简单的方法是添加索引并利用好这些索引。可以通过explain函数来分析:1、在建索引前数据请求情况2、创建索引后数据请求是否有变好。现在就来看看explain相关知识。
3713 0
|
4月前
|
Kubernetes Go API
Zp
|
关系型数据库 MySQL
MySQL教程之concat以及group_concat的用法
MySQL教程之concat以及group_concat的用法
Zp
184 0
|
SQL
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★下
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★下
103 0
|
SQL 数据库
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★上
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★上
142 0
|
SQL 关系型数据库 MySQL
软件开发入门教程网 之MySQL DELETE 语句
软件开发入门教程网 之MySQL DELETE 语句
|
SQL 关系型数据库 MySQL
软件开发入门教程网之MySQL GROUP BY 语句
软件开发入门教程网之MySQL GROUP BY 语句
|
Kubernetes 关系型数据库 持续交付
基础设施即代码(IAC),Zalando Postgres Operator 简介
基础设施即代码(IAC),Zalando Postgres Operator 简介
334 0
基础设施即代码(IAC),Zalando Postgres Operator 简介
|
Kubernetes 关系型数据库 数据库
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
115 0
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
|
存储 Prometheus Kubernetes
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
469 0
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator