Zalando Postgres Operator 快速上手

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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 集群并重新开始。



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
NoSQL MongoDB 索引
Mongo优化——explain函数的基本使用
当数据量不大时,查询语句随便写,只要实现逻辑功能即可;但当数据量大到一定程度时,可能以前的方法就不可行了,因为一是查询数度变慢,更有甚者可能因数据量大而导致查询失败。解决这种问题最简单的方法是添加索引并利用好这些索引。可以通过explain函数来分析:1、在建索引前数据请求情况2、创建索引后数据请求是否有变好。现在就来看看explain相关知识。
4074 0
|
1月前
|
存储 关系型数据库 MySQL
深度剖析:MySQL聚合函数 count(expr) 如何工作?如何选择?
本文详细探讨了MySQL中count(expr)函数的不同形式及其执行效率,包括count(*)、count(1)、count(主键)、count(非主键)等。通过对InnoDB和MyISAM引擎的对比分析,解释了它们在不同场景下的实现原理及性能差异。文章还通过实例演示了事务隔离级别对统计结果的影响,并提供了源码分析和总结建议。适合希望深入了解MySQL统计函数的开发者阅读。
52 0
|
关系型数据库 MySQL
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
103 0
|
SQL 关系型数据库 MySQL
【MySQL从入门到精通】【高级篇】(三十)记一次mysql5.7的新特性derived_merge的坑
现有课堂活动评价的需求:教师对学生提交的活动进行评价, 教师可重复评价,即对同一个学生同一个活动进行多次评价,这种情况下需要取最新的那个评价。
498 0
【MySQL从入门到精通】【高级篇】(三十)记一次mysql5.7的新特性derived_merge的坑
|
SQL 关系型数据库 MySQL
软件开发入门教程网 之MySQL DELETE 语句
软件开发入门教程网 之MySQL DELETE 语句
|
SQL 关系型数据库 MySQL
软件开发入门教程网之MySQL GROUP BY 语句
软件开发入门教程网之MySQL GROUP BY 语句
|
安全 关系型数据库 MySQL
软件开发入门教程网之MySQL 运算符
本章节我们主要介绍 MySQL 的运算符及运算符的优先级。 MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算符包括: 运算符 作
|
Kubernetes 关系型数据库 持续交付
基础设施即代码(IAC),Zalando Postgres Operator 简介
基础设施即代码(IAC),Zalando Postgres Operator 简介
409 0
基础设施即代码(IAC),Zalando Postgres Operator 简介
|
存储 Prometheus Kubernetes
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
548 0
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
|
Kubernetes 关系型数据库 数据库
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
146 0
基础设施即代码(IAC),Zalando Postgres Operator UI 入门