本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下EKS方法简化 Postgre 在亚马逊上的SQL部署 PGO
由 Shalaka Dengale 创作 () AWS
摘要
这种模式将 Crunchy Data (PGO) 中的 Postgres 操作员与亚马逊 Elastic Kubernetes Service(亚马逊)集成在一起,以简化云原生环境中的 EKS Postgre 部署。SQL PGO为在 Kubernetes 中管理 Postgre SQL 数据库提供了自动化和可扩展性。当您PGO与 Amazon 结合使用时EKS,它将构成一个强大的平台,用于高效部署、管理和扩展 Postgre SQL 数据库。
这种集成提供了以下主要好处:
自动部署:简化 Postgre SQL 集群的部署和管理。
自定义资源定义 (CRDs):使用 Kubernetes 原语进行 Postgre 管理。SQL
高可用性:支持自动故障转移和同步复制。
自动备份和恢复:简化备份和恢复流程。
水平扩展:启用 Postgre SQL 集群的动态扩展。
版本升级:便于滚动升级,停机时间最短。
安全:强制执行加密、访问控制和身份验证机制。
先决条件和限制
先决条件
活跃 AWS 账户的.
AWS命令行界面 (AWSCLI) 版本 2,在 Linux、macOS 或 Windows 上安装和配置。
AWSCLIConfig, AWS 用于从命令行连接资源。
eksctl
,在 Linux、macOS 或 Windows 上安装和配置。 kubectl
,已安装并配置为访问您的 Amazon EKS 集群上的资源。有关更多信息,请参阅亚马逊文档中的设置 kubectl 和 eksc tl。EKS您的计算机终端已配置为访问 Amazon EKS 集群。有关更多信息,请参阅 Amazon EKS 文档中的配置您的计算机以与集群通信。
产品版本
Postgre SQL 版本 10 或更高版本。此模式使用 Postgre SQL 版本 16。
限制
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分
。有关特定终端节点,请参阅服务终端节点和配额页面,然后选择服务的链接。
架构
目标技术堆栈
Amazon EKS
亚马逊 Virtual Private Cloud(亚马逊VPC)
亚马逊弹性计算云(亚马逊EC2)
目标架构
此模式构建的架构包含具有三个节点的 Amazon EKS 集群。每个节点在后端的一组EC2实例上运行。此 Postgre SQL 设置遵循主副本架构,这对于读取密集型用例特别有效。例架包括以下组件:
主数据库容器 (pg-primary) 托管主 Postgre SQL 实例,所有写入操作都将定向到该实例。
辅助副本容器(pg-replica)托管 Postgre SQL 实例,这些实例从主数据库复制数据并处理读取操作。
PgBouncer是附带的 Postgre SQL 数据库的轻量级连接池器。PGO它位于客户端和 Postgre SQL 服务器之间,充当数据库连接的中介。
PGO在此 Kubernetes 环境中自动部署和管理 Postgre SQL 集群。
Patroni 是一款开源工具,用于管理和自动化 Postgre 的高可用性配置。SQL它包含在PGO。当你PGO在 Kubernetes 中使用 Patroni 时,它在确保 Postgre 集群的弹性和容错能力方面起着至关重要的作用。SQL有关更多信息,请参阅 Patroni 文档
。
该工作流程包括以下步骤:
部署PGO操作员。您在亚马逊上运行的 Kubernetes 集群上部署PGO操作员。EKS这可以通过使用 Kubernetes 清单或 Helm 图表来完成。这种模式使用 Kubernetes 清单。
定义 Postgre SQL 实例。操作员运行时,您可以创建自定义资源 (CRs) 来指定 Postgre SQL 实例的所需状态。这包括存储、复制和高可用性设置等配置。
操作员管理。你可以通过 Kubernetes API 对象与操作员进行交互,例如CRs创建、更新或删除 Postgre 实例。SQL
监控和维护。您可以监控在亚马逊EKS上运行的 Postgre SQL 实例的运行状况和性能。操作员通常会提供指标和日志以进行监控。您可以根据需要执行例行维护任务,例如升级和修补。有关更多信息,请参阅 Amazon EKS 文档中的监控集群性能和查看日志。
扩展和备份:您可以使用运营商提供的功能来扩展 Postgre SQL 实例和管理备份。
这种模式不包括监控、维护和备份操作。
自动化和扩缩
您可以使用自动 AWS CloudFormation 创建基础架构。有关更多信息,请参阅亚马逊EKS文档 AWS CloudFormation中的使用创建亚马逊EKS资源。
您可以使用 GitVersion 或 Jenkins 内部版本号来自动部署数据库实例。
工具
AWS 服务
亚马逊 Elastic Kubernetes Servic EKS e(亚马逊)可帮助你在上面运行 AWS Kubernetes,而无需安装或维护自己的 Kubernetes 控制平面或节点。
AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行外壳中的命令进行交互。
其他工具
最佳实践
请遵循以下最佳实践,以确保平稳高效的部署:
保护您的EKS集群。为EKS集群实施安全最佳实践,例如对服务帐号 AWS Identity and Access Management (IAMIRSA)、网络策略和VPC安全组使用 () 角色。使用限制对EKS群集API服务器的访问并加密节点与API服务器之间的通信TLS。
确保与在亚马逊上运行的 Kubernetes PGO 之间的版本兼容性。EKS某些PGO功能可能需要特定的 Kubernetes 版本或引入兼容性限制。有关更多信息,请参阅PGO文档中的组件和兼容性
。 规划PGO部署的资源分配CPU,包括内存和存储。考虑两者的资源需求PGO及其管理的 Postgre SQL 实例。监控资源使用情况并根据需要扩展资源。
专为高可用性而设计。设计您的PGO部署以实现高可用性,从而最大限度地减少停机时间并确保可靠性。PGO跨多个可用区部署多个副本以实现容错能力。
为PGO管理的 Postgre SQL 数据库@@ 实施备份和恢复程序。使用与 Kubernetes 和 Amazon 兼容的第三方备份解决方案提供的功能。PGO EKS
为您的PGO部署@@ 设置监控和日志记录,以跟踪性能、运行状况和事件。使用 Prometheus 等工具监控指标,使用 Grafana 等工具进行可视化。配置日志以捕获PGO日志以进行故障排除和审计。
正确@@ 配置网络以允许 Postgre SQL 实例与 Kubernetes 集群中的其他服务之间PGO进行通信。使用亚马逊VPC网络功能和 Kubernetes 联网插件(例如 Calico 或 A VPC CNI mazon
)进行网络策略执行和流量隔离。 考虑性能、耐久性和可扩展性等因素,为 Postgre SQL 数据库@@ 选择合适的存储选项。使用 Amazon Elastic Block Store (AmazonEBS) 卷或 AWS 托管存储服务进行永久存储。有关更多信息,请参阅亚马逊文档中的在亚马逊上存储 Kubernetes EBS 卷。EKS
使用基础设施即代码 (IaC) 工具,例如 AWS CloudFormation 在 Amazon PGO EKS 上自动部署和配置。将基础设施组件(包括EKS集群、网络和PGO资源)定义为一致性、可重复性和版本控制的代码。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建一个 IAM 角色。 |
| AWS 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
创建 Amazon EKS 集群。 | 如果您已经部署了集群,请跳过此步骤。否则,请使用 注意此模式使用亚马逊EC2作为亚马逊的节点组EKS。如果要使用 AWS Fargate,请参阅 eksctl
| AWS管理员、Terraform 或 ekctl 管理员、Kubernetes 管理员 |
验证集群的状态。 | 运行以下命令以查看集群中节点的当前状态:
如果您遇到错误,请参阅 Amazon EKS 文档的疑难解答部分。 | AWS管理员、Terraform 或 ekctl 管理员、Kubernetes 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
启用提供IAMOIDC商。 | 作为亚马逊EBS容器存储接口 (CSI) 驱动程序的先决条件,您的集群必须有一个现有 IAM OpenID Connect (OIDC) 提供程序。 使用以下命令启用该IAMOIDC提供程序:
有关此步骤的更多信息,请参阅 Amazon EKS 文档。 | AWS 管理员 |
为 Amazon EBS CSI 驱动程序创建一个IAM角色。 | 使用以下
如果您使用加密的 Amazon EBS 硬盘,则必须进一步配置策略。有关说明,请参阅 Amazon EBS SCI 驱动程序文档 | AWS 管理员 |
添加 Amazon EBS CSI 驱动程序。 | 使用以下
| AWS 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
克隆PGO存储库。 | 为以下内容克隆 GitHub 存储库PGO:
| AWS DevOps |
提供创建服务帐号的角色详细信息。 | 要授予 Amazon EKS 集群访问所需 AWS 资源的权限,请在
| AWS管理员,Kubernetes 管理员 |
创建命名空间和PGO先决条件。 |
| Kunernetes 管理员 |
验证 Pod 的创建情况。 | 验证命名空间和默认配置是否已创建:
| AWS管理员,Kubernetes 管理员 |
验证PVCs。 | 使用以下命令验证永久卷声明 (PVCs):
| AWS管理员,Kubernetes 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
创建运算符。 | 修改位于的文件内容,使其与以下内容
这些更新执行以下操作:
| AWS管理员、DBA、Kubernetes 管理员 |
部署操作员。 | 部署PGO操作员以实现在 Kubernetes 环境中简化 Postgre SQL 数据库的管理和操作:
| AWS管理员、DBA、Kubernetes 管理员 |
验证部署。 |
从命令输出中,记下主副本 ( | AWS管理员、DBA、Kubernetes 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
向主副本写入数据。 | 使用以下命令连接到 Postgre SQL 主副本并将数据写入数据库:
| AWS管理员,Kubernetes 管理员 |
确认只读副本具有相同的数据。 | 连接到 Postgre 只SQL读副本并检查流式复制是否正常运行:
只读副本应具有您在上一步中在主副本中创建的表。 | AWS管理员,Kubernetes 管理员 |
故障排除
事务 | 解决方案 |
---|---|
吊舱无法启动。 |
|
副本明显落后于主数据库。 |
|
你无法看见 Postgre SQL 集群的性能和运行状况。 |
|
复制不起作用。 |
|
相关资源
亚马逊 Elastic Kubernetes Service(白皮书上的部署选项概述)AWS
AWS CloudFormation(AWS白皮书上的部署选项概述)
开始使用亚马逊 EKS — eksctl(亚马逊EKS用户指南)
设置 kubectl 和 eksctl(亚马逊EKS用户指南)
为 OpenID Connect 联合创建角色(IAM用户指南)