Zalando Postgres Operator 快速上手

2022年5月24日08:25:49

Zalando Postgres Operator  快速上手

本指南旨在让您快速了解在本地Kubernetes 环境中使用Postgres Operator

前提条件

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

要与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

您现在可以通过端口转发 UIpod(注意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 开始。他们运行ZalandoSpilo 容器镜像。至于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 集群并重新开始。

更多

  • 作者:为少
  • 原文链接:https://www.cnblogs.com/hacker-linner/p/16115709.html
    更新时间:2022年5月24日08:25:49 ,共 5163 字。