Zalando Postgres Operator 快速上手

本指南旨在让您快速了解在本地 Kubernetes 环境中使用 Postgres Operator。
前提条件
由于 Postgres Operator 是为 Kubernetes (K8s) 框架设计的,因此首先设置它。 对于本地测试,我们建议使用以下解决方案之一:
- minikube, 在
VM内创建单节点K8s集群(需要KVM或VirtualBox) - kind 和 k3d, 允许创建在
Docker上运行的多节点K8s集群(需要Docker)
要与 K8s 基础设施交互,请安装其 CLI 运行时 kubectl。
本快速入门假设您已经启动了 minikube 或创建了本地 kind 集群。 请注意,您还可以使用 Docker Desktop for Mac 中内置的 K8s 支持来遵循本教程的步骤。您必须将 minikube start 和 minikube 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 或更高版本一起使用,如下所示:
- 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。清单。
./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 后,您应该能够运行:
helm install postgres-operator ./charts/postgres-operator
该 chart 适用于 Helm 2 和 Helm 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 检查 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 文档中详细解释了可用选项。
创建 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 集群并重新开始。
更多
Zalando Postgres Operator 快速上手的更多相关文章
- 基础设施即代码(IAC),Zalando Postgres Operator 简介
Postgres Operator 在由 Patroni 提供支持的 Kubernetes (K8s) 上提供易于运行的高可用性 PostgreSQL 集群.它仅通过 Postgres 清单 (CRD ...
- 基础设施即代码(IAC),Zalando Postgres Operator UI 入门
Postgres Operator UI 提供了一个图形界面,方便用户体验数据库即服务.一旦 database 和/或 Kubernetes (K8s) 管理员设置了 operator,其他团队就很容 ...
- 几个小实践带你快速上手MindSpore
摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...
- 云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
使用 PGO 在 Kubernetes 上运行 Cloud Native PostgreSQL:来自 Crunchy Data 的 Postgres Operator! Cloud Native Po ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 快速上手Unity原生Json库
现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- 快速上手seajs——简单易用Seajs
快速上手seajs——简单易用Seajs 原文 http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...
随机推荐
- dotnet 委托的实现解析(2)开放委托和封闭委托 (Open Delegates vs. Closed Delegates)
前言 这是个人对委托的理解系列第二篇,部分翻译自 Open Delegates vs. Closed Delegates – SLaks.Blog,好像还没人翻译过,加上部分个人理解.希望能对大家理解 ...
- OpenCV使用级联分类器实现人脸检测
一.概述 案例:使用opencv级联分类器CascadeClassifier+其提供的特征数据实现人脸检测,检测到人脸后使用红框画出来. API介绍:detectMultiScale( InputAr ...
- python爬取今日头条图片
import requests from urllib.parse import urlencode from requests import codes import os # qianxiao99 ...
- 加速度传感器(MPA1064A)实测---LOTO虚拟示波器
加速度传感器(MPA1064A)实测---LOTO虚拟示波器 客户提供了一个加速度传感器,型号是MPA1064A,我们帮助客户测试下是否能测到传感器的输出,验证下测试方案.传感器很小巧,带了一根很长的 ...
- JVM内存模型——堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...
- Zookeeper 的典型应用场景 ?
Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...
- Redis 的同步机制了解么?
Redis 可以使用主从同步,从从同步.第一次同步时,主节点做一次 bgsave, 并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制 节点,复制节点接受完成后将 r ...
- 学习Solr(二)
一.Solr概述 1.什么是Solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可 ...
- Cookie与HttpSession对象
Cookie与HttpSession对象的作用 维护客户端浏览器与服务端会话状态的两个对象. 由于HTTP协议是一个无状态的协议,因此服务端不会记录当前客户端浏览器的访问状态 有些时候需要服务端能够记 ...
- C++ | 虚函数初探
虚函数 虚函数 是在基类中使用关键字 virtual 声明的函数.在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数. 我们想要的是在程序中任意点可以根据所调用的对象类型来选择调 ...