快速上手Zalando Postgres Operator,你会了吗?

快速上手Zalando Postgres Operator,你会了吗?

作者:为少 2022-04-08 00:01:41

云计算

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

前提条件

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

  • minikube, 在 VM 内创建单节点 K8s 集群(需要 KVM 或 VirtualBox)

https://github.com/kubernetes/minikube/releases

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

https://kind.sigs.k8s.io/

https://k3d.io

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

https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-via-curl

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

配置选项

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

  • https://postgres-operator.readthedocs.io/en/latest/reference/operator_parameters/

部署选项

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 或更高版本一起使用,如下所示:

  • https://github.com/kubernetes-sigs/kustomize
  • https://github.com/zalando/postgres-operator/blob/master/manifests/kustomization.yaml
kubectl apply -k github.com/zalando/postgres-operator/manifests

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

  • https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml
./run_operator_locally.sh

OpenShift 上的手动部署设置

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

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

Helm chart

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

  • https://helm.sh/
helm install postgres-operator ./charts/postgres-operator

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

  • https://v2.helm.sh/docs/

该 chart 还托管在:

  • https://opensource.zalando.com/postgres-operator/charts/postgres-operator/

检查 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 检查 deployment 或 pod 的最新 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。此 API 的 URL 必须在 UI 的部署清单中配置。

  • https://postgres-operator.readthedocs.io/en/latest/operator-ui/
  • https://github.com/zalando/postgres-operator/blob/master/manifests/api-service.yaml
  • https://github.com/zalando/postgres-operator/blob/master/ui/manifests/deployment.yaml#L43

要部署 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 文档中详细解释了可用选项。

https://postgres-operator.readthedocs.io/en/latest/operator-ui/

创建 Postgres cluster

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

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

在 cluster 清单提交并通过验证后,operator 将创建 Service 和 Endpoint 资源以及一个 StatefulSet,它根据清单中指定的实例数量启动新的 Pod。所有资源都像 cluster 一样命名。数据库 pod 可以通过它们的数字后缀来识别,从 -0 开始。他们运行 Zalando 的 Spilo 容器镜像。至于 services 和 endpoints,将有一个用于 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 pod 的 K8s 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

这应该删除关联的 StatefulSet、database Pods、Services 和 Endpoints。PersistentVolume 被释放,PodDisruptionBudget 被删除。但是,Secrets 不会被删除,并且备份将保留在原位。

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

https://github.com/zalando/postgres-operator/issues/551

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/279026.html<

(0)
管理的头像管理
上一篇2025-05-11 21:00
下一篇 2025-05-11 21:02

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注