本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Terraform 在 Amazon EKS 中部署 CockroachDB 叢集
Sandip Gangapadhyay 和 Kalyan Senthilnathan,Amazon Web Services
總結
此模式提供 HashiCorp Terraform 模組,用於使用 CockroachDB
目標對象
若要實作此模式,建議您熟悉下列項目:
HashiCorp Terraform 概念和基礎設施即程式碼 (IaC) 實務
AWS 服務,特別是 Amazon EKS
Kubernetes 基本概念,包括 StatefulSets、運算子和服務組態
分散式 SQL 資料庫
安全概念,例如 TLS 憑證管理。
DevOps 實務、CI/CD 工作流程和基礎設施自動化
先決條件和限制
先決條件
限制
CockroachDB Kubernetes Operator 不支援多區域部署的多個 Kubernetes 叢集。如需更多限制,請參閱跨多個 Kubernetes 叢集協調 CockroachDB
(CockroachDB 文件) 和 CockroachDB Kubernetes Operator (GitHub)。 持久性磁碟區宣告 (PVCs的自動剔除目前預設為停用。這表示在解除委任並移除節點之後,運算子不會移除掛載至其 Pod 的持久性磁碟區。如需詳細資訊,請參閱 CockroachDB 文件中的自動 PVC 剔除
。
產品版本
CockroachDB 22.2.2 版
Architecture
目標架構
下圖顯示虛擬私有雲端 (VPC) 中三個 AWS 可用區域的高可用性 CockroachDB 部署。CockroachDB Pod 是透過 Amazon EKS 管理。架構說明使用者如何透過 Network Load Balancer 存取資料庫,將流量分配到 CockroachDB Pod。在每個可用區域中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行的 Pod,可提供彈性和容錯能力。

已建立資源
部署此模式中使用的 Terraform 模組會建立下列資源:
Network Load Balancer – 此資源可做為用戶端請求的進入點,並將流量平均分配到 CockroachDB 執行個體。
CockroachDB StatefulSet – StatefulSet 定義 Amazon EKS 叢集中 CockroachDB 部署的所需狀態。它會管理 CockroachDB Pod 的排序部署、擴展和更新。
CockroachDB Pod – 這些 Pod 是做為 Kubernetes Pod 內容器執行的 CockroachDB 執行個體。這些 Pod 會跨分散式叢集存放和管理資料。
CockroachDB 資料庫 – 這是由 CockroachDB 管理的分散式資料庫,跨越多個 Pod。它會複寫資料以實現高可用性、容錯能力和效能。
工具
AWS 服務
AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可協助您 AWS 服務 透過命令列 shell 中的命令與 互動。
Amazon Elastic Kubernetes Service (Amazon EKS) 可協助您在 上執行 Kubernetes, AWS 而無需安裝或維護您自己的 Kubernetes 控制平面或節點。
其他工具
HashiCorp Terraform
是一種基礎設施即程式碼 (IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。 kubectl
是一種命令列界面,可協助您針對 Kubernetes 叢集執行命令。
程式碼儲存庫
此模式的程式碼可在 GitHub 中使用 Terraform 儲存庫在 Amazon EKS 中部署 CockroachDB 叢集
modules資料夾 – 此資料夾包含 CockroachDB 的 Terraform 模組main資料夾 – 此資料夾包含呼叫 CockroachDB 子模組的根模組,以建立 CockroachDB 資料庫叢集。
最佳實務
請勿縮減至少於三個節點。這被視為 CockroachDB 上的反模式,並可能導致錯誤。如需詳細資訊,請參閱 CockroachDB 文件中的叢集擴展
。 使用 Karpernter 或 Cluster Autoscaler 實作 Amazon EKS 自動擴展。這可讓 CockroachDB 叢集自動水平擴展和自動擴展新節點。如需詳細資訊,請參閱 Amazon EKS 文件中的使用 Karpenter 和 Cluster Autoscaler 擴展叢集運算。
注意
由於
podAntiAffinityKubernetes 排程規則,在一個 Amazon EKS 節點中只能排程一個 CockroachDB Pod。如需 Amazon EKS 安全最佳實務,請參閱 Amazon EKS 文件中的安全最佳實務。
如需 CockroachDB 的 SQL 效能最佳實務,請參閱 CockroachDB 文件中的 SQL 效能最佳實務
。 如需為 Terraform 狀態檔案設定 Amazon Simple Storage Service (Amazon S3) 遠端後端的詳細資訊,請參閱 Terraform 文件中的 Amazon S3
。
史詩
| 任務 | Description | 所需的技能 |
|---|---|---|
複製程式碼儲存庫。 | 輸入下列命令來複製儲存庫:
| DevOps 工程師,Git |
更新 Terraform 變數。 |
| DevOps 工程師,Terraform |
| 任務 | Description | 所需的技能 |
|---|---|---|
部署 基礎設施。 |
| DevOps 工程師,Terraform |
| 任務 | Description | 所需的技能 |
|---|---|---|
驗證資源建立。 |
| DevOps 工程師 |
(選用) 向上或向下擴展。 |
| DevOps 工程師,Terraform |
| 任務 | Description | 所需的技能 |
|---|---|---|
刪除基礎設施。 | 將節點擴展至
| Terraform |
疑難排解
| 問題 | 解決方案 |
|---|---|
驗證供應商登入資料時發生錯誤 | 當您執行 Terraform
此錯誤是由本機電腦組態中使用的登入資料的安全字符過期所造成。如需如何解決錯誤的指示,請參閱 AWS CLI 文件中的設定和檢視組態設定。 |
處於待定狀態的 CockroachDB Pod |
|
相關資源
在單一 Kubernetes 叢集中部署 CockroachDB
(CockroachDB 文件) 跨多個 Kubernetes 叢集協調 CockroachDB
(CockroachDB 文件) AWS 提供者
(Terraform 文件)
附件
若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip