

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Terraform을 사용하여 Amazon EKS에 CockroachDB 클러스터 배포
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay 및 Kalyan Senthilnathan, Amazon Web Services*

## 요약
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

이 패턴은 [CockroachDB](https://www.cockroachlabs.com/docs/stable/) [연산자를 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS)에 다중 노드 CockroachDB ](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview)클러스터를 배포하기 위한 HashiCorp Terraform 모듈을 제공합니다. CockroachDB는 지리적으로 분산된 클러스터에서 자동 수평 샤딩, 고가용성 및 일관된 성능을 제공하는 분산 SQL 데이터베이스입니다. 이 패턴은 Amazon EKS를 관리형 Kubernetes 플랫폼으로 사용하고 TLS 보안 노드 통신을 위한 [cert-manager](https://cert-manager.io/docs/)를 구현합니다. 또한 트래픽 분산에 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)를 사용하고 내결함성 및 성능을 위해 데이터를 자동으로 복제하는 포드가 있는 CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)를 생성합니다.

**수강 대상**

이 패턴을 구현하려면 다음 사항을 숙지하는 것이 좋습니다.
+ HashiCorp Terraform 개념 및 코드형 인프라(IaC) 관행
+ AWS 서비스, 특히 Amazon EKS
+ StatefulSets, 연산자 및 서비스 구성을 포함한 Kubernetes 기본 사항
+ 분산 SQL 데이터베이스
+ TLS 인증서 관리와 같은 보안 개념.
+ DevOps 사례, CI/CD 워크플로 및 인프라 자동화

## 사전 조건 및 제한 사항
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Amazon EKS 클러스터에 리소스를 배포할 수 있는 권한
+ 노드 레이블이 지정된 Amazon EKS 클러스터 버전 v1.23 이상 `node=cockroachdb`
+ [Amazon EKS 클러스터에 설치된 Amazon Elastic Block Store 컨테이너 스토리지 인터페이스(CSI) 드라이버](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) 버전 1.19.0 이상
+ Terraform CLI 버전 1.0.0 이상, [설치](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)됨
+ kubectl, [설치](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)됨
+ Git, [설치됨](https://git-scm.com/install/)
+ AWS Command Line Interface (AWS CLI) 버전 2.9.18 이상, [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨

**제한 사항 **
+ CockroachDB Kubernetes 운영자는 다중 리전 배포를 위해 여러 Kubernetes 클러스터를 지원하지 않습니다. 자세한 제한 사항은 [여러 Kubernetes 클러스터에서 CockroachDB 오케스트레이션](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks)(CockroachDB 설명서) 및 [CockroachDB Kubernetes 연산자](https://github.com/cockroachdb/cockroach-operator)(GitHub)를 참조하세요.
+ 영구 볼륨 클레임(PVCs)의 자동 정리는 현재 기본적으로 비활성화되어 있습니다. 즉, 노드를 폐기하고 제거한 후 운영자는 포드에 마운트된 영구 볼륨을 제거하지 않습니다. 자세한 내용은 CockroachDB 설명서의 [자동 PVC 정리](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning)를 참조하세요.

**제품 버전**
+ CockroachDB 버전 22.2.2

## 아키텍처
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**대상 아키텍처**

다음 다이어그램은 Virtual Private Cloud(VPC) 내의 세 AWS 가용 영역에 대한 가용성이 높은 CockroachDB 배포를 보여줍니다. CockroachDB 포드는 Amazon EKS를 통해 관리됩니다. 아키텍처는 사용자가 CockroachDB 포드에 트래픽을 분산하는 Network Load Balancer를 통해 데이터베이스에 액세스하는 방법을 보여줍니다. 포드는 복원력과 내결함성을 제공하는 각 가용 영역의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행됩니다.

![VPC 내 세 AWS 가용 영역에 고가용성 CockroachDB 배포.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**생성된 리소스**

이 패턴에 사용되는 Terraform 모듈을 배포하면 다음과 같은 리소스가 생성됩니다.

1. **Network Load Balancer** -이 리소스는 클라이언트 요청의 진입점 역할을 하며 CockroachDB 인스턴스 간에 트래픽을 균등하게 분산합니다.

1. **CockroachDB StatefulSet** - StatefulSet는 Amazon EKS 클러스터 내에서 CockroachDB 배포의 원하는 상태를 정의합니다. CockroachDB 포드의 정렬된 배포, 조정 및 업데이트를 관리합니다.

1. **CockroachDB 포드 **- 이러한 포드는 Kubernetes 포드 내에서 컨테이너로 실행되는 CockroachDB의 인스턴스입니다. 이러한 포드는 분산 클러스터 전체에서 데이터를 저장하고 관리합니다.

1. **CockroachDB 데이터베이스** - 여러 포드에 걸쳐 CockroachDB에서 관리하는 분산 데이터베이스입니다. 고가용성, 내결함성 및 성능을 위해 데이터를 복제합니다.

## 도구
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**AWS 서비스**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
+ [Amazon Elastic Kubernetes Service(Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)를 사용하면 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치하거나 유지 관리할 필요 AWS 없이에서 Kubernetes를 실행할 수 있습니다.

**기타 도구**
+ [HashiCorp Terraform](https://www.terraform.io/docs)은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 인프라(IaC) 도구입니다.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/)는 Kubernetes 클러스터에 대해 명령의 실행을 돕는 명령줄 인터페이스입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub Terraform [리포지토리를 사용하여 Amazon EKS에 CockroachDB 클러스터 배포에서](https://github.com/aws-samples/crdb-cluster-eks-terraform) 사용할 수 있습니다. 코드 리포지토리에는 Terraform에 대한 다음 파일과 폴더가 포함되어 있습니다.
+ `modules` 폴더 -이 폴더에는 CockroachDB용 Terraform 모듈이 포함되어 있습니다.
+ `main` 폴더 -이 폴더에는 CockroachDB 하위 모듈을 호출하여 CockroachDB 데이터베이스 클러스터를 생성하는 루트 모듈이 포함되어 있습니다.

## 모범 사례
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ 노드를 3개 미만으로 축소하지 마십시오. 이는 CockroachDB에서 안티 패턴으로 간주되며 오류를 일으킬 수 있습니다. 자세한 내용은 CockroachDB 설명서의 [Cluster Scaling](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html)을 참조하세요.
+ Karpernter 또는 Cluster Autoscaler를 사용하여 Amazon EKS Autoscaling을 구현합니다. 이렇게 하면 CockroachDB 클러스터가 수평적으로 확장되고 새 노드가 자동으로 확장됩니다. 자세한 내용은 Amazon EKS 설명서에서 [Karpenter 및 Cluster Autoscaler를 사용하여 클러스터 컴퓨팅 자동 규모 조정](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html)을 참조하세요.
**참고**  
`podAntiAffinity` Kubernetes 예약 규칙으로 인해 하나의 Amazon EKS 노드에서 하나의 CockroachDB 포드만 예약할 수 있습니다.
+ Amazon EKS 보안 모범 사례는 Amazon EKS 설명서의 [보안 모범 사례를](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) 참조하세요.
+ CockroachDB에 대한 SQL 성능 모범 사례는 CockroachDB 설명서의 [SQL 성능 모범 사례를](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) 참조하세요.
+ Terraform 상태 파일을 위한 Amazon Simple Storage Service(Amazon S3) 원격 백엔드 설정에 대한 자세한 내용은 Terraform 설명서의 [Amazon S3](https://developer.hashicorp.com/terraform/language/backend/s3)를 참조하세요.

## 에픽
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

### 환경을 설정합니다
<a name="set-up-your-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 코드 리포지토리를 복제합니다. | 다음 명령을 입력하여 리포지토리를 복제합니다.<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps 엔지니어, Git | 
| Terraform 변수를 업데이트합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps 엔지니어, Terraform | 

### 리소스 배포
<a name="deploy-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인프라를 배포합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps 엔지니어, Terraform | 

### 배포 확인
<a name="verify-the-deployment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스 생성을 확인합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps 엔지니어 | 
| (선택 사항) 스케일 업 또는 스케일 다운. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps 엔지니어, Terraform | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인프라를 삭제합니다. | 노드를 로 확장`0`하면 컴퓨팅 비용이 절감됩니다. 그러나이 모듈에서 생성된 영구 Amazon EBS 볼륨에 대해서는 여전히 요금이 부과됩니다. 스토리지 비용을 제거하려면 다음 단계에 따라 모든 볼륨을 삭제합니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## 문제 해결
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 공급자 보안 인증을 검증하는 중 오류가 발생했습니다. | Terraform `apply` 또는 `destroy` 명령을 실행하면 다음 오류가 발생할 수 있습니다.<br />`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`<br />이 오류는 로컬 시스템 구성에 사용된 보안 인증 정보의 보안 토큰이 만료되어 발생합니다. 오류를 해결하는 방법에 대한 지침은 AWS CLI 설명서의 [구성 설정 및 보기를](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) 참조하세요. | 
| 보류 중인 상태의 CockroachDB 포드 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## 관련 리소스
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [단일 Kubernetes 클러스터에 CockroachDB 배포](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html)(CockroachDB 설명서)
+ [여러 Kubernetes 클러스터에서 CockroachDB 오케스트레이션](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html)(CockroachDB 설명서)
+ [AWS 공급자](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)(Terraform 설명서)

## 첨부
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip) 파일의 압축을 풉니다.