本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 在亚马逊 EKS 中部署 CockroachDB 集群
亚马逊 Web Services 的 Sandip Gangapadhyay 和 Kalyan Senthilnathan
Summary
这种模式提供了一个 HashiCorp Terraform 模块,用于使用 CockroachDB 运算符在亚马逊 Elastic Kubernetes Service(Amazon EKS)上部署多节点 Coc
目标受众
要实现此模式,我们建议您熟悉以下内容:
HashiCorp Terraform 概念和基础设施即代码 (IaC) 实践
AWS 服务,尤其是 Amazon EKS
Kubernetes 基础知识 StatefulSets,包括运算符和服务配置
分布式 SQL 数据库
安全概念,例如 TLS 证书管理。
DevOps 实践、 CI/CD 工作流程和基础设施自动化
先决条件和限制
先决条件
活跃的 AWS 账户
在 Amazon EKS 集群中部署资源的权限
Amazon EKS 集群版本 1.23 或更高版本,其节点标记为
node=cockroachdbAmazon Elastic Block Store 容器存储接口 (CSI) 驱动程序
版本 1.19.0 或更高版本,安装在 Amazon EKS 集群中 Git,已安装
AWS Command Line Interface (AWS CLI) 版本 2.9.18 或更高版本,已安装并配置
限制
CockroachDB Kubernetes 运营商不支持多个 Kubernetes 集群进行多区域部署。有关更多限制,请参阅跨多个 Kubernetes 集群编排 CockroachDB(CockroachDB 文档)和 CockroachDB Kubernetes
Operator ()。 GitHub 默认情况下,永久卷声明的自动修剪功能 (PVCs) 处于禁用状态。这意味着,在停用和移除节点后,操作员将不会移除已安装到其 pod 上的永久卷。有关更多信息,请参阅 CockroachDB 文档中的自动 PVC 修剪
。
产品版本
CockroachDB 版本 22.2.2
架构
目标架构
下图显示了虚拟私有云 (VPC) 中跨三个可用区域的高 AWS 可用性 CockroachDB 部署。CockroachDB 吊舱通过亚马逊 EKS 进行管理。该架构说明了用户如何通过 Network Load Balancer 访问数据库,该负载均衡器将流量分配到 CockroachDB 容器。Pod 在每个可用区的亚马逊弹性计算云 (Amazon EC2) 实例上运行,这提供了弹性和容错能力。

资源已创建
部署此模式中使用的 Terraform 模块会创建以下资源:
Network Load Balancer — 此资源充当客户端请求的入口点,并在 CockroachDB 实例之间均匀分配流量。
CockroachDB StatefulSet — StatefulSet 定义了 Amazon EKS 集群中 CockroachDB 部署的所需状态。它管理 CockroachDB 容器的有序部署、扩展和更新。
CockroachDB pod — 这些 pod 是 CockroachDB 在 Kubernetes 容器中作为容器运行的实例。这些 Pod 存储和管理分布式集群中的数据。
CockroachDB 数据库 — 这是由 CockroachDB 管理的分布式数据库,跨越多个 pod。它复制数据以实现高可用性、容错能力和性能。
工具
AWS 服务
AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
亚马逊 Elastic Kubernetes Service(亚马逊 EKS)可帮助你在上面运行 AWS Kubernetes,而无需安装或维护自己的 Kubernetes 控制平面或节点。
其他工具
HashiCorp Terraform
是一款基础设施即代码(IaC)工具,可帮助您使用代码来预调配和管理云基础设施和资源。 kubectl
:针对 Kubernetes 集群运行命令的命令行界面。
代码存储库
此模式的代码可在使用 Terra form 存储库的 Amazon EKS 中 GitHub 部署 CockroachDB 集群中
modules文件夹 — 此文件夹包含 CockroachDB 的 Terraform 模块main文件夹 — 此文件夹包含调用 CockroachDB 子模块来创建 CockroachDB 数据库集群的根模块。
最佳实践
不要缩减到少于三个节点。这被认为是 CockroachDB 上的反模式,可能会导致错误。有关更多信息,请参阅 CockroachDB 文档中的集群扩展
。 使用 Karpernter 或集群自动扩缩器实现 Amazon EKS 自动扩展。这允许 CockroachDB 集群进行水平扩展,并自动添加新节点。有关更多信息,请参阅 Amazon EKS 文档中的使用 Karpenter 和 Cluster Autoscaler 扩展集群计算。
注意
由于
podAntiAffinityKubernetes 的调度规则,只能在一个 Amazon EKS 节点中调度一个 CockroachDB 容器。有关 Amazon EKS 安全最佳实践,请参阅 Amazon EKS 文档中的安全最佳实践。
有关 CockroachDB 的 SQL 性能最佳实践,请参阅 CockroachDB 文档中的 SQL 性能最佳实践
。 有关为 Terraform 状态文件设置亚马逊简单存储服务 (Amazon S3) 远程后端的更多信息,请参阅 Terraform 文档中的亚马逊 S
3。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
克隆代码存储库。 | 输入以下命令来克隆存储库:
| DevOps 工程师,Git |
更新 Terraform 变量。 |
| DevOps 工程师,Terraform |
| Task | 说明 | 所需技能 |
|---|---|---|
部署基础设施。 |
| DevOps 工程师,Terraform |
| Task | 说明 | 所需技能 |
|---|---|---|
验证资源创建。 |
| DevOps 工程师 |
(可选)向上或向下扩展。 |
| DevOps 工程师,Terraform |
| Task | 说明 | 所需技能 |
|---|---|---|
删除基础设施。 |
| Terraform |
问题排查
| 问题 | 解决方案 |
|---|---|
验证提供商凭证时出错 | 当你运行 Terraform
此错误是由本地计算机配置中使用的凭证安全令牌过期引起的。有关如何解决该错误的说明,请参阅 AWS CLI 文档中的设置和查看配置设置。 |
CockroachDB 吊舱处于待处理状态 |
|
相关资源
在@@ 单个 Kubernetes 集群中部署 CockroachDB(Cock
roachDB 文档) 在@@ 多个 Kubernetes 集群中编排 CockroachDB
(CockroachDB 文档) AWS 提供者
(Terraform 文档)
附件
要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip