本指南旨在让您快速了解在本地 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-install hook 并发出警告。使用 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 开始。他们运行 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 集群并重新开始。

更多

Zalando Postgres Operator 快速上手的更多相关文章

  1. 基础设施即代码(IAC),Zalando Postgres Operator 简介

    Postgres Operator 在由 Patroni 提供支持的 Kubernetes (K8s) 上提供易于运行的高可用性 PostgreSQL 集群.它仅通过 Postgres 清单 (CRD ...

  2. 基础设施即代码(IAC),Zalando Postgres Operator UI 入门

    Postgres Operator UI 提供了一个图形界面,方便用户体验数据库即服务.一旦 database 和/或 Kubernetes (K8s) 管理员设置了 operator,其他团队就很容 ...

  3. 几个小实践带你快速上手MindSpore

    摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...

  4. 云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator

    使用 PGO 在 Kubernetes 上运行 Cloud Native PostgreSQL:来自 Crunchy Data 的 Postgres Operator! Cloud Native Po ...

  5. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  6. 快速上手Unity原生Json库

    现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...

  7. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

  8. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  9. 快速上手seajs——简单易用Seajs

    快速上手seajs——简单易用Seajs   原文  http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...

随机推荐

  1. mysql 索引模板

    DROP TABLE IF EXISTS `table_name`; CREATE TABLE `table_name` ( `id` bigint(20) UNSIGNED NOT NULL AUT ...

  2. 使用数据库、Redis、ZK分别实现分布式锁!

    分布式锁三种实现方式: 基于数据库实现分布式锁: 基于缓存(Redis等)实现分布式锁: 基于Zookeeper实现分布式锁: 基于数据库实现分布式锁 悲观锁 利用select - where - f ...

  3. rsync同步文件到远程机器,卡住10多秒--问题解决过程

    背景 以前大体介绍过,我们这边是做运维平台的.如果要形象化理解,那么,比如jenkins这种喜闻乐见的软件大致了解吧,jenkins就经常需要同步文件/版本包到远程机器上,jenkins怎么实现的,没 ...

  4. nginx配置只允许某个IP或某些IP进行访问

    server{ listen 80; listen 443 ssl; server_name ehall.jerry.plus; ssl_certificate "****.crt" ...

  5. 百度Paddle速查_CPU和GPU的mnist预测训练_模型导出_模型导入再预测_导出onnx并预测

    需要做点什么 方便广大烟酒生研究生.人工智障炼丹师算法工程师快速使用百度PaddelPaddle,所以特写此文章,默认使用者已有基本的深度学习概念.数据集概念. 系统环境 python 3.7.4 p ...

  6. [WC2018]州区划分(FWT,FST)

    [WC2018]州区划分(FWT,FST) Luogu loj 题解时间 经典FST. 在此之前似乎用到FST的题并不多? 首先预处理一个子集是不是欧拉回路很简单,判断是否连通且度数均为偶数即可. 考 ...

  7. C++设计模式 - 总结

    一个目标:管理变化,提高复用 掌握设计模式一个核心目标:管理变化,提高复用.在使用设计模式中发现并没有实现复用,这就和设计初衷相违背了,说明代买写的不好. 两种手段:分解VS.抽象 在代码设计中,该开 ...

  8. 面试问题之计算机网络:HTTP和HTTPS的区别

    https://blog.csdn.net/qq_38289815/article/details/80969419

  9. 如何通过sql语句完成分页?

    oracle select rownum,bookId from [rownum是伪列名,bookId是列名] (select rownum row_id,bookId from xiaoWJ_boo ...

  10. Thread 类中的 yield 方法有什么作用?

    使当前线程从执行状态(运行状态)变为可执行态(就绪状态). 当前线程到了就绪状态,那么接下来哪个线程会从就绪状态变成执行状态呢?可 能是当前线程,也可能是其他线程,看系统的分配了.