Terraform을 사용하여 Amazon EKS에 CockroachDB 클러스터 배포 - 권장 가이드

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

Terraform을 사용하여 Amazon EKS에 CockroachDB 클러스터 배포

Sandip Gangapadhyay 및 Kalyan Senthilnathan, Amazon Web Services

요약

이 패턴은 CockroachDB 연산자를 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS)에 다중 노드 CockroachDB 클러스터를 배포하기 위한 HashiCorp Terraform 모듈을 제공합니다. CockroachDB는 지리적으로 분산된 클러스터에서 자동 수평 샤딩, 고가용성 및 일관된 성능을 제공하는 분산 SQL 데이터베이스입니다. 이 패턴은 Amazon EKS를 관리형 Kubernetes 플랫폼으로 사용하고 TLS 보안 노드 통신을 위한 cert-manager를 구현합니다. 또한 트래픽 분산에 Network Load Balancer를 사용하고 내결함성 및 성능을 위해 데이터를 자동으로 복제하는 포드가 있는 CockroachDB StatefulSets를 생성합니다.

수강 대상

이 패턴을 구현하려면 다음 사항을 숙지하는 것이 좋습니다.

  • HashiCorp Terraform 개념 및 코드형 인프라(IaC) 관행

  • AWS 서비스, 특히 Amazon EKS

  • StatefulSets, 연산자 및 서비스 구성을 포함한 Kubernetes 기본 사항

  • 분산 SQL 데이터베이스

  • TLS 인증서 관리와 같은 보안 개념.

  • DevOps 사례, CI/CD 워크플로 및 인프라 자동화

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • CockroachDB Kubernetes 운영자는 다중 리전 배포를 위해 여러 Kubernetes 클러스터를 지원하지 않습니다. 자세한 제한 사항은 여러 Kubernetes 클러스터에서 CockroachDB 오케스트레이션(CockroachDB 설명서) 및 CockroachDB Kubernetes 연산자(GitHub)를 참조하세요.

  • 영구 볼륨 클레임(PVCs)의 자동 정리는 현재 기본적으로 비활성화되어 있습니다. 즉, 노드를 폐기하고 제거한 후 운영자는 포드에 마운트된 영구 볼륨을 제거하지 않습니다. 자세한 내용은 CockroachDB 설명서의 자동 PVC 정리를 참조하세요.

제품 버전

  • CockroachDB 버전 22.2.2

아키텍처

대상 아키텍처

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

VPC 내 세 AWS 가용 영역에 고가용성 CockroachDB 배포.

생성된 리소스

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

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

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

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

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

도구

AWS 서비스

기타 도구

  • HashiCorp Terraform은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 인프라(IaC) 도구입니다.

  • kubectl는 Kubernetes 클러스터에 대해 명령의 실행을 돕는 명령줄 인터페이스입니다.

코드 리포지토리

이 패턴의 코드는 GitHub Terraform 리포지토리를 사용하여 Amazon EKS에 CockroachDB 클러스터 배포에서 사용할 수 있습니다. 코드 리포지토리에는 Terraform에 대한 다음 파일과 폴더가 포함되어 있습니다.

  • modules 폴더 -이 폴더에는 CockroachDB용 Terraform 모듈이 포함되어 있습니다.

  • main 폴더 -이 폴더에는 CockroachDB 하위 모듈을 호출하여 CockroachDB 데이터베이스 클러스터를 생성하는 루트 모듈이 포함되어 있습니다.

모범 사례

  • 노드를 3개 미만으로 축소하지 마십시오. 이는 CockroachDB에서 안티 패턴으로 간주되며 오류를 일으킬 수 있습니다. 자세한 내용은 CockroachDB 설명서의 Cluster Scaling을 참조하세요.

  • Karpernter 또는 Cluster Autoscaler를 사용하여 Amazon EKS Autoscaling을 구현합니다. 이렇게 하면 CockroachDB 클러스터가 수평적으로 확장되고 새 노드가 자동으로 확장됩니다. 자세한 내용은 Amazon EKS 설명서에서 Karpenter 및 Cluster Autoscaler를 사용하여 클러스터 컴퓨팅 자동 규모 조정을 참조하세요.

    참고

    podAntiAffinity Kubernetes 예약 규칙으로 인해 하나의 Amazon EKS 노드에서 하나의 CockroachDB 포드만 예약할 수 있습니다.

  • Amazon EKS 보안 모범 사례는 Amazon EKS 설명서의 보안 모범 사례를 참조하세요.

  • CockroachDB에 대한 SQL 성능 모범 사례는 CockroachDB 설명서의 SQL 성능 모범 사례를 참조하세요.

  • Terraform 상태 파일을 위한 Amazon Simple Storage Service(Amazon S3) 원격 백엔드 설정에 대한 자세한 내용은 Terraform 설명서의 Amazon S3를 참조하세요.

에픽

작업설명필요한 기술

코드 리포지토리를 복제합니다.

다음 명령을 입력하여 리포지토리를 복제합니다.

git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git
DevOps 엔지니어, Git

Terraform 변수를 업데이트합니다.

  1. 다음 명령을 입력하여 복제된 리포지토리의 기본 폴더로 이동합니다.

    cd crdb-cluster-eks-terraform/main
  2. variable.tf 파일을 엽니다.

  3. 다음 변수의 기본값을 구성합니다.

    • region - 대상 입력 AWS 리전

    • eks_cluster_name - 대상 Amazon EKS 클러스터의 이름을 입력합니다.

    • number_of_nodes - 배포할 노드 수를 입력합니다.

  4. variable.tf 파일을 저장하고 닫습니다.

DevOps 엔지니어, Terraform
작업설명필요한 기술

인프라를 배포합니다.

  1. 다음 명령을 입력하여 Terraform 배포를 초기화합니다.

    terraform init
  2. 다음 명령을 입력하여 실행 계획을 생성합니다.

    terraform plan
  3. 계획을 검토하고 생성될 리소스 및 인프라 구성 요소를 검증합니다.

  4. 다음 명령을 입력하여 존속성을 설치합니다.

    terraform apply
  5. 메시지가 표시되면 를 입력하여 배포를 확인합니다.

  6. 배포 프로세스가 완료될 때까지 기다리세요.

DevOps 엔지니어, Terraform
작업설명필요한 기술

리소스 생성을 확인합니다.

  1. 다음 명령을 입력하여를 사용하여 Amazon EKS 컨텍스트를 설정합니다. AWS CLI

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. 다음 명령을 입력하여 CockroachDB를 사용하는 포드 수를 확인합니다.

    kubectl get pods -n <namespace>

    다음은 샘플 출력입니다.

    NAME READY STATUS RESTARTS AGE cockroach-operator-655fbf7847-zn9v8 1/1 Running 0 30m cockroachdb-0 1/1 Running 0 24m cockroachdb-1 1/1 Running 0 24m cockroachdb-2 1/1 Running 0 24m
  3. 포드 수가 variable.tf 파일에 정의한 값과 일치하는지 확인합니다.

DevOps 엔지니어

(선택 사항) 스케일 업 또는 스케일 다운.

  1. variable.tf 파일에서 노드 수를 늘리거나 줄인 다음 파일을 저장합니다.

  2. 단계를 반복하여 Terraform을 통해 인프라를 배포합니다. Terraform은 포드를 추가하거나 제거합니다.

  3. 단계를 반복하여 Cockroach DB를 사용하는 포드 수를 확인합니다. 예를 들어 노드 수를 3개에서 4개로 늘리면 이제 4개의 포드가 실행 중이어야 합니다.

DevOps 엔지니어, Terraform
작업설명필요한 기술

인프라를 삭제합니다.

노드를 로 확장0하면 컴퓨팅 비용이 절감됩니다. 그러나이 모듈에서 생성된 영구 Amazon EBS 볼륨에 대해서는 여전히 요금이 부과됩니다. 스토리지 비용을 제거하려면 다음 단계에 따라 모든 볼륨을 삭제합니다.

  1. 다음 명령을 입력하여 역할을 삭제합니다.

    terraform destroy
  2. 메시지가 표시되면 예를 입력하여 확인합니다.

Terraform

문제 해결

문제Solution

공급자 보안 인증을 검증하는 중 오류가 발생했습니다.

Terraform apply 또는 destroy 명령을 실행하면 다음 오류가 발생할 수 있습니다.

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.

이 오류는 로컬 시스템 구성에 사용된 보안 인증 정보의 보안 토큰이 만료되어 발생합니다. 오류를 해결하는 방법에 대한 지침은 AWS CLI 설명서의 구성 설정 및 보기를 참조하세요.

보류 중인 상태의 CockroachDB 포드

  1. podAntiAffinity Kubernetes 예약 규칙으로 인해 하나의 Amazon EKS 노드에서 하나의 CockroachDB 포드만 예약할 수 있습니다. CockroachDB 포드 수가 사용 가능한 Amazon EKS 노드 수를 초과하는 경우 CockroachDB 포드는 보류 중 상태일 수 있습니다. 이 경우 theAmazon EKS 노드가 자동으로 확장되도록 Cluster Autoscaler 또는 Karpenter를 구현해야 합니다. 자세한 내용은 Karpenter 및 Cluster Autoscaler를 사용한 클러스터 컴퓨팅 규모 조정을 참조하세요.

  2. 다음 명령을 입력하여 Kubernetes 작업자 노드에 node=cockroachdb 레이블이 있는지 확인합니다.

    kubectl get nodes --show-labels

    그렇지 않은 경우 모든 작업자 노드에 올바른 레이블이 지정되어 있는지 확인해야 합니다. 자세한 내용은 Amazon EKS 설명서의 노드 그룹 구성 편집을 참조하세요.

관련 리소스

첨부

이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.