本文介绍: StackGres 1.6 数据库平台工程功能声明式 K8S CRsStackGres operator 完全由 Kubernetes 自定义资源管理。除了 kubectl 或任何其他 Kubernetes API 访问之外,不需要安装任何客户端或其他工具管理 StackGres。您的请求由 CRD 的 spec 部分表示,任何 result 信息都在集群资源status 部分中提…

image

StackGres 1.6 数据库平台工程功能

声明式 K8S CRs

StackGres operator 完全由 Kubernetes 自定义资源管理。除了 kubectl 或任何其他 Kubernetes API 访问之外,不需要安装任何客户端或其他工具来管理 StackGres。您的请求由 CRD 的 spec 部分表示,任何 result 信息都在集群资源status 部分中提供。

StackGres CRDs设计为非常高阶的,并且抽象(隐藏)了所有 Postgres复杂性。对于 StackGres,如果您知道如何使用 kubectl 以及如何定义 CRDs,那么您也已经成为 Postgres 的专家用户

在 CRDs 中定义 StackGres 的定义操作能力使您能够将所有 Postgres 集群定义基础设施代码(IaC),并在 Git 中进行版本控制。这就启用了 GitOps配置管理方式,当您向版本控制中的 CRDs 提交更改时,可以自动管理您的集群。通常,这种资源定义方式支持非常灵活和可扩展方法

查看 CRD Reference,了解 StackGres 资源的结构

请参阅 Getting Started,开始极简的 StackGres 安装。

Note: 如果您更喜欢可视化 UI 而不是 YAML 文件命令行,请注意,您可以通过 CRDs 查询执行的每一个操作可以通过 web 控制台进行。
同样,在 web 控制台执行的任何操作都将自动反映在 CRDs 中。
选择权在你。

默认调优

StackGres 集群将由高度专业的 OnGres Postgres DBA 团队精心调整的初始 Postgres 配置创建

这意味着 StackGres 附带了一个开箱即用的调优配置,即使您不是 Postgres 高级用户,也可以很好地使用这个默认配置使用 StackGres,您不需要成为 Postgres 专家就可以操作生产就绪的集群。

如果您希望进一步调优 Postgres,您可以通过 SGPostgresConfig CRD 创建自定义配置,并相应地在集群中引用它们。

OnGres, StackGres 的创造者们痴迷于充分调优 Postgres。所以他们建立了 postgresqlCO.NF一个帮助成千上万的 Postgres 用户更好调优他们数据库网站

自定义配置

StackGres 是用普通 Postgres 构建的,并提供没有限制的 Postgres 实例
您可以提供自定义配置,并在自己的 Postgres 安装中使用任何进一步的自定义

完全的 postgres 用户访问权限

在 StackGres 中没有限制的伪用户。相反,您可以以最大权限访问 postgres 用户( postgres 中的 “root” 用户)。你拥有它,没有任何警告

定义配置

StackGres 允许高级 Postgres 用户进一步定制组件配置。这些配置由 CRDs 支持并经过充分验证,因此如果错误设置集群,就不会有一个简单的 ConfigMap 导致集群崩溃

请参阅 配置指南,深入了解如何调优 Postgres 或连接池配置。至于其他 Kubernetes 资源,您可以自定义公开的服务pod标签节点容忍度等等。

总的来说,StackGres 让你完全控制

高可用

StackGres 集成了 Postgres 中最著名的、经过生产测试高可用性软件: Patroni

StackGres 完全集成了 Patroni,您无需再做其他任何事情。如果任何 pod、任何节点或任何东西发生故障,集群将在几秒钟内自动执行故障转移并重新修复,而无需人工干预。

StackGres 通过 Kubernetes 服务应用程序公开了一个读写(主)和一个只读(副本)连接,在任何中断事件发生后,该连接自动更新

请参阅 High Availability Guide,了解更多关于将 Patroni 集成到 StackGres 中的信息,以及如何执行手动切换如何测试故障转移。

自动备份

备份数据库的关键部分,也是任何灾难恢复策略的关键。StackGres 包括基于连续归档备份,它允许零数据丢失恢复和 PITR(Pointin-Time Recovery),将数据库恢复任意过去的时间点。

StackGres 还提供备份的自动生命周期管理。备份总是存储在当今可用的最持久的介质中: cloud object storage,如 Amazon’s S3Google Cloud StorageAzure Blob。如果您在 prem运行,您可以使用 Minio 或其他兼容 S3 的软件存储备份

您需要提供 bucket 访问信息凭据,配置保留策略,其他一切都由 StackGres 完全自动化
您还可以随时通过简单的 YAML 文件创建手动备份

请参阅 Backups Guide 以了解有关如何定义和管理备份的更多信息

服务器端连接池

由于 Postgres 进程模型原因,强烈建议生产场景使用连接池

StackGres 提供了集成服务器连接池PgBouncer 作为一个 sidecar 容器部署在 Postgres 容器旁边。

服务器端池可以控制连接流入,即进入 Postgres 的连接,并确保 Postgres 不会被可能导致显著性能下降的流量淹没。StackGres 还将相关连接池指标导出到 Prometheus,并且专门的仪表板显示集成web 控制台的 Grafana 中。

您可以通过 SGPoolingConfig CRD 调优低级配置,甚至完全禁用连接池。

查看 Connection Pooling Configuration section ,了解有关如何配置连接池的更多信息

分布式日志

对于那些厌倦了在集群的每个 pod输入 kubectl exec然后在 Postgres 日志grepawk获取你想要的信息的人来说,StackGres 是一个更好解决方案

StackGres 支持 Postgres 和 Patroni 的集中分布式日志
分布式日志集群可以通过基于 YAML 的 CRDs 或 web 控制台快速创建和配置。

Postgres 和 Patroni 容器日志都将通过 FluentBit sidecar 捕获,并将它们转发分布式日志服务器
它也包含一个 Fluentd 收集器,将日志转发到专用的 Postgres 数据库。为了支持高日志量摄取,这个日志专用数据库通过 TimescaleDB 扩展进行了增强,StackGres 还依赖于 TimescaleDB 扩展执行日志保留策略

然后可以从集中位置通过 SQL 查询聚合的日志,或者通过 web 控制台进行可视化,其中包括搜索过滤功能。日志使用丰富的元数据进行了增强,这有助于任何 Postgres 故障排除。

有关如何配置分布式日志的更多信息,请参阅 Distributed Logs Guide

可观测

StackGres 使 Postgres 指标用于增强可观察性,并与 Prometheus 堆栈完全集成,包括预定义的,特定于 Postgres 的 dashboards 和 alerts。

StackGres 利用 Envoy sidecar 透明代理所有 Postgres 流量。OnGres 团队与 Envoy 社区合作开发第一个 Postgres filter for Envoy这个 Envoy Postgres 过滤器通过解码 Postgres wire 协议并向 Prometheus 发送指标来提供增强的可观测性。这不仅增加了在 Postgres 级别不可用的指标,而且对 Postgres 没有任何影响,因为这些指标是在代理级别收集的。这个过程对 Postgres 是完全透明的。

Envoy发送额外的指标,只要在 Kubernetes 中配置了 Prometheus 实例,就没有更多的事情要做。

StackGres web 控制台包括内置的 Grafana 仪表板来可视化这些指标。

请参阅 Monitoring Guide ,以了解关于如何配置监视的更多信息。

Web UI 管理控制台

StackGres 带有一个功能齐全的 web 控制台,允许您读取任何信息并执行任何操作,这些操作也可以通过 kubectl 和 StackGres CRDs 完成

image

这个 web 控制台是针对 DBA 的内部使用的,可以通过 LoadBalancer 或其他 Kubernetes 路由机制公开。

web 控制台可以通过默认的管理凭据访问,也可以通过 Kubernetes RBAC 进行用户身份验证或 SSO 集成访问。它还附带了一个 REST API,以提供进一步的灵活性。

查看 Admin UI Guide,了解如何访问和使用它的更多信息。

web 控制台支持光和暗模式,以优化您的用户体验

Day-2 操作

StackGres 以生产就绪方式全面管理您的Postgres集群。它具有 day-2 的操作功能,如 PostgreSQL 的次要和主要版本升级容器升级受控重启vacuum 或 repack,可以以简单安全方式使用。

版本升级或重新启动等管理操作很容易造成压力,这就是为什么设计良好的 database operator 应该合理方式实现这些操作的原因。StackGres 以受控的生产级方式执行 day-2 操作。

一般来说,工程师在 StackGres CRDs 中定义所需的目标状态,通过 Kubernetes API (或者 web 控制台)应用更改然后 StackGres operator 负责其余的工作。这种方法最大限度地减少了用户方面的粗心错误,因为不需要过程步骤,只需要声明性定义。StackGres CRDs 提供了一种类型安全的方式来定义资源、配置和集群操作,并由 StackGres operator 理解验证

根据所需的更改,StackGres 以合理的方式执行更改,并考虑到生产准备情况。
这意味着,例如,所需的 Postgres 集群重启不只是立即执行(并且可能危及数据库可用性),而是以受控的方式执行。

StackGres 旨在提供 DBA 专家和 Kubernetes operator 的最佳组合

高级复制模式

StackGres 为 Postgres 实例支持不同的高级复制模式,包括异步同步和组复制

还支持在单独的 Kubernetes 集群上进行级联复制和备用集群,以便进行灾难恢复。

可以在 SGCluster CRD replication section 中配置复制模式

Sharding,高可用分布式 Postgresql

集成 Patroni + Citus + PgBouncer,高可用分布式 Postgresql 一键部署

PostgreSQL 扩展

扩展是 Postgres 最受欢迎的功能
通过扩展数据库功能可以以任何可以想象的方式进行扩展
而且,Postgres 用户受益于由数百个开源扩展组成的生态系统

StackGres 支持 150 多个 Postgres 扩展,并且可以动态地将扩展加载到 Postgres 集群的 pod 中。
因此,StackGres 是世界上拥有最多扩展的 Postgres 平台

查看 扩展完整列表扩展指南,以了解如何在 StackGres 中配置和使用扩展。

生态

StackGres 用户受益于一个非常活跃、友好和支持的生态系统

StackGres 100% 是免费开源的,有一个开源友好的许可证
没有“具有高级功能的高级版本”,也没有任何生产使用限制
It’s just Open Source.

如果你想了解更多关于 StackGres 内部工作的信息,甚至想贡献自己的力量,你可以查看 official repositories、issue trackers 或 community Slack:

StackGres 1.6 数据库平台工程快速上手

本篇中,您将学习如何开始使用 StackGres。
我们将在 Kubernetes 集群上安装 StackGres,并创建一个 Postgres 实例。

NOTE:运行demo,您需要一个已经在 kubectl 中配置的 K8s environment

安装 Operator

为了便于演示我们提供了一些 Kubernetes 资源文件,以便安装 StackGres operator。
假设您已经安装了 kubectl CLI, 您可以使用以下命令安装 operator:

kubectl apply -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

这将安装所有必需的资源,并将 StackGres operator 添加到新的命名空间 stackgres 中。

stackgres-operator-demo.yml 将使用 LoadBalancer 暴露 UI。
请注意,使用此功能可能会给您的主机提供商带来额外成本(例如,EKS、GKE 和 AKS 就是这种情况)。

等待 Operator 启动

一旦它准备好了,你会看到 operator pods状态Running:

kubectl get pods -n stackgres
# 正常会有如下输出
NAME                                  READY   STATUS    RESTARTS   AGE
stackgres-operator-668bf7586d-krh7f   1/1     Running   0          28h
stackgres-restapi-d7f9bd787-dh6tr     2/2     Running   0          28h

创建集群

创建第一个 StackGres 集群,必须创建一个包含集群配置的简单自定义资源。
下面的命令,使用命令行执行此操作:

cat << 'EOF' | kubectl create -f -
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
  name: simple
spec:
  instances: 1
  postgres:
    version: 'latest'
  pods:
    persistentVolume: 
      size: '5Gi'
EOF

# 正常会有如下输出
sgcluster.stackgres.io/simple created

这将使用最新的 PostgreSQL 版本创建一个集群,一个节点,一个 5Gi 的磁盘,使用默认的存储类。
它使用 StackGres 对 PostgreSQL、连接池和资源配置文件的默认配置。

验证创建的集群

一个名为 simple 的集群将部署环境中配置的默认名称空间中(通常是名称空间 default)。

查看创建状态

kubectl get pods --watch

最后,你应该看到这样的东西:

NAME       READY   STATUS    RESTARTS      AGE
simple-0   6/6     Running   1 (41s ago)   68s

通过 psql 访问 Postgres

打开 psql 控制台并管理 PostgreSQL 集群,你可以连接到主实例(标签role: masterpod )的 postgres-util 容器
在这个快速入门中,我们只有一个 pod,您可以简单地提供它的名称,但是无论您有多少实例,以下命令都可以工作:

kubectl exec -ti "$(kubectl get pod --selector app=StackGresCluster,stackgres.io/cluster=true,role=master -o name)" -c postgres-util -- psql

# 正常会有如下输出
psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.

postgres=#

Note: 直接通过 postgres-util sidecar 连接将授予您使用 postgres 用户的访问权限。它类似于 sudo -i postgres -c psql

阅读有关 postgres-util side car 以及 how to connect to the Postgres cluster详细信息

通过 Kubernetes Services 访问 Postgres

虽然通过 psql 访问集群是一个很好的快速测试,但应用程序通常使用 Kubernetes 服务连接到我们的实例。
为此,需要对访问进行身份验证,这可以通过添加专用的 postgres 用户来实现,或者,对于这个快速入门,通过使用 postgres 用户( Postgres 中的超级用户)来实现postgres 用户的密码是创建集群时随机生成的。您可以通过获取 key "superuser-password" 从一个名为 cluster 的 secret 中检索它:

kubectl get secret simple --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'

# 正常会有如下输出
397a-7aaf-49e3-80d

现在我们可以使用用户 postgres 和刚刚返回密码进行身份验证。为此,我们已经可以使用一个应用程序,或者,出于测试目的,再次使用 psql,但是从通过 Kubernetes 服务名称连接到 Postgres 的不同容器中:

kubectl run psql --rm -it --image ongres/postgres-util --restart=Never -- psql -h simple postgres postgres
If you don't see a command prompt, try pressing enter.


# 397a-7aaf-49e3-80d 此处输入密码即可
# 成功会有如下输出

psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.

postgres=#

一次psql 命令将要求输入密码,这是超级用户的密码。

连接到 UI

现在您对 StackGres 有了更多的了解,您可以轻松地从 UI 管理所有集群了。UI 将要求输入用户名和密码。默认情况下,这些是 admin 和随机生成的密码。您可以运行以下命令获取用户和自动生成的密码:

kubectl get secret -n stackgres stackgres-restapi-admin --template '{{ printf "username = %snpassword = %sn" (.data.k8sUsername | base64decode) ( .data.clearPassword | base64decode) }}'

# 正常会有如下输出
username = admin
password = 1ba7-235c-4563-8fc

有了凭据,让我们连接到 operator web UI。为此,您可以转发 operator pod 的 HTTPS 端口:

POD_NAME=$(kubectl get pods --namespace stackgres -l "stackgres.io/restapi=true" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward "$POD_NAME" 8443:9443 --namespace stackgres

# 正常会有如下输出
Forwarding from 127.0.0.1:8443 -> 9443
Forwarding from [::1]:8443 -> 9443
Handling connection for 8443

然后,您可以在以下地址打开浏览器 localhost:8443/admin/

image

image

清理

卸载这个演示生成的所有资源,你可以运行:

kubectl delete --ignore-not-found -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

有关更多详细信息,请查看 卸载 部分

此外,请参阅 通过 helm 安装 部分,以改变这些。

更多

原文地址:https://blog.csdn.net/o__cc/article/details/134740708

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_39518.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

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