카우치베이스 서버

퍼시스턴트 볼륨과 아마존 EBS를 사용하는 쿠버네티스의 스테이트풀 컨테이너

이 블로그에서는 Amazon EBS를 사용하여 Kubernetes에서 스테이트풀 컨테이너를 생성하는 방법을 보여줍니다. 카우치베이스 서버는 스테이트풀 컨테이너입니다. 즉, 컨테이너의 상태를 함께 가지고 다녀야 합니다. 쿠버네티스에서는 실행되는 가장 작은 원자 단위인
컨테이너는 파드입니다. 따라서 Couchbase Server 컨테이너는 파드로 실행됩니다. 그리고 기본적으로 Couchbase Server에 저장된 모든 데이터는 동일한 호스트에 저장됩니다.
stateful containers

이 수치는 원래 아마존의 Kubernetes 클러스터 및 Couchbase 서비스 노출. 또한 이 그림은 호스트에 로컬로 저장된 스토리지를 보여줍니다.
파드는 임시적이며 다른 호스트에서 다시 시작할 수 있습니다. A 쿠버네티스 볼륨 는 파드 내에서 실행되는 모든 컨테이너보다 오래 지속되며, 컨테이너를 다시 시작할 때 데이터가 보존됩니다. 그러나
파드가 존재하지 않게 되면 볼륨은 더 이상 존재하지 않게 됩니다. 이 문제는 장기간 데이터가 필요한 애플리케이션에 영구적인 클러스터 범위의 스토리지를 제공하는 퍼시스턴트 볼륨으로 해결할 수 있습니다.

영구 볼륨을 만들고 사용하는 과정은 3단계로 이루어집니다:
  1. 프로비저닝: 관리자가 클러스터의 네트워크 스토리지(예: AWS ElasticBlockStore 볼륨)를 프로비저닝합니다. 이것은 다음과 같이 호출됩니다. 퍼시스턴트 볼륨.
  2. 저장소 요청: 사용자가 다음을 사용하여 파드에 대한 스토리지를 요청합니다. 클레임. 클레임은 리소스 수준(CPU 및 메모리), 특정 크기 및 액세스 모드(예: 읽기/쓰기 1회 또는 쓰기 전용으로 여러 번 마운트 가능)를 지정할 수 있습니다.
    이를 다음과 같이 호출합니다. 퍼시스턴트 볼륨 클레임.
  3. 클레임 사용: 클레임은 볼륨으로 마운트되고 스토리지를 위해 파드에 사용됩니다.

특히, 이 블로그에서는 AWS ElasticBlockStore를 다음과 같이 사용하는 방법을 보여드립니다. 퍼시스턴트 볼륨를 생성하고 퍼시스턴트 볼륨 클레임를 클릭한 다음 포드에서 청구합니다.

stateful containers

이 블로그의 전체 소스 코드는 여기에서 확인할 수 있습니다: github.com/arun-gupta/couchbase-kubernetes.

AWS Elastic 블록 스토리지 프로비저닝

팔로잉 제한 사항 를 충족해야 합니다. Amazon ElasticBlockStorage가 Kubernetes에서 퍼시스턴트볼륨으로 사용되는 경우:

  • 파드가 실행되는 노드는 AWS EC2 인스턴스여야 한다.
  • 해당 인스턴스는 EBS 볼륨과 동일한 지역 및 가용성 영역에 있어야 합니다.
  • EBS는 볼륨을 마운트하는 단일 EC2 인스턴스만 지원합니다.

AWS Elastic 블록 스토리지를 생성합니다:

지역 us-west-2 지역 및 US-WEST-2A 가용성 영역이 사용됩니다. 따라서 쿠버네티스 클러스터는 다음을 시작해야 합니다.
를 동일한 지역 및 가용성 영역에서도 사용할 수 있습니다. 출력은 다음과 같이 표시됩니다:

볼륨을 다음과 같이 사용할 수 있는지 확인합니다:

출력은 다음과 같이 표시됩니다:

볼륨의 고유 식별자를 VolumeId 속성을 확인합니다. AWS 콘솔에서 EBS 블록을 확인할 수도 있습니다:

kubernetes-pv-couchbase-amazon-ebs

쿠버네티스 클러스터 시작

다운로드 쿠버네티스 1.3.3를 클릭하고 압축을 푼 다음 Amazon에서 클러스터를 시작합니다:

여기서 주목해야 할 세 가지 사항이 있습니다:

  • 클러스터가 시작되는 영역은 다음과 같이 명시적으로 설정됩니다. US-WEST-1A. 이는 EBS 스토리지 볼륨이 생성된 영역과 일치합니다.
  • 기본적으로 각 노드 크기는 m3.medium. 여기서는 다음과 같이 설정되어 있습니다. m3.large.
  • 기본적으로 마스터 노드 1개와 워커 노드 4개가 생성됩니다. 여기서는 3개의 워커 노드만 생성됩니다.

출력은 다음과 같이 표시됩니다:

시작에 대한 자세한 내용을 읽어보세요. 아마존의 쿠버네티스 클러스터.

퍼시스턴트 스토리지가 없는 카우치베이스 서버 포드

영구 저장소가 없는 Couchbase Server 파드를 생성해 보겠습니다. 즉, 다른 호스트에서 파드를 다시 스케줄링하면 해당 호스트에서 생성된 데이터에 액세스할 수 없습니다. 다음은 Couchbase Server 포드를 실행하는 빠른 단계입니다.
클러스터 외부에 노출합니다:

자세한 내용은 다음에서 확인하세요. 아마존의 쿠버네티스 클러스터. 마지막 명령은 인그레스 로드 밸런서 주소를 표시합니다. 다음 주소에서 Couchbase Server 웹 콘솔에 액세스합니다. :8091.

kubernetes-pv-couchbase-amazon-elb

다음을 사용하여 콘솔에 로그인합니다. 관리자 로그인 및 비밀번호 비밀번호를 입력합니다. 카우치베이스 서버 웹 콘솔의 메인 페이지가 표시됩니다:

 kubernetes-pv-couchbase-amazon-web-console-

기본값 여행 샘플 버킷은 이미 아룽업타/카우치베이스 이미지. 이 버킷은 데이터 버킷 탭을 클릭합니다:

kubernetes-pv-couchbase-amazon-databucket

를 클릭합니다. 새 데이터 버킷 만들기 버튼을 클릭하여 새 데이터 버킷을 만듭니다. 이름 지정 k8s를 클릭하고 모든 기본값을 선택한 다음 만들기 버튼을 눌러 버킷을 생성합니다:

kubernetes-pv-couchbase-amazon-k8s-bucket

생성된 버킷은 데이터 버킷 탭을 클릭합니다:

kubernetes-pv-couchbase-amazon-k8s-bucket-created

포드 상태를 확인합니다:

포드를 삭제합니다:

새 포드가 생성되는 과정을 지켜보세요:

웹 콘솔에 다시 액세스하여 버킷이 존재하지 않는지 확인합니다:

kubernetes-pv-couchbase-amazon-k8s-bucket-gone

생성된 리소스를 정리해 보겠습니다:

퍼시스턴트 스토리지가 있는 Couchbase 서버 포드

이제 퍼시스턴트 스토리지가 있는 Couchbase Server 포드를 노출해 보겠습니다. 위에서 설명한 대로 퍼시스턴트 볼륨 를 클릭하고 볼륨을 청구하세요.

저장소 요청

다른 쿠버네티스 리소스와 마찬가지로, 퍼시스턴트 볼륨은 리소스 설명 파일을 사용하여 생성됩니다:

여기서 중요한 정보는 다음과 같습니다:

  • 5GB의 스토리지 만들기
  • 읽기/쓰기를 위해 하나의 노드만 스토리지를 마운트할 수 있습니다.
  • 이전에 생성된 볼륨 ID를 지정합니다.

이 파일의 정의에 대한 자세한 내용은 다음에서 확인하세요. kubernetes.io/docs/user-guide/persistent-volumes/. 이 파일은 다음에서 사용할 수 있습니다: github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pv.yml.
볼륨 자체는 다음과 같이 만들 수 있습니다:

를 클릭하고 출력을 표시합니다:

클레임 사용

A 퍼시스턴트 볼륨 클레임 이 리소스 파일을 사용하여 만들 수 있습니다:

이 경우 PersistentVolume과 PersistentVolumeClaim은 모두 5GB이지만 반드시 그럴 필요는 없습니다. 이 파일의 정의에 대한 자세한 내용은 다음에서 확인하세요. 쿠버네티스 문서/사용자 가이드/퍼시스턴트 볼륨/#퍼시스턴트 볼륨 클레임.
이 파일은 다음 위치에 있습니다. github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pvc.yml. 클레임은 다음과 같이 만들 수 있습니다:

를 클릭하고 출력을 표시합니다:

영구 볼륨 클레임으로 RC 생성

이 리소스 파일을 사용하여 카우치베이스 복제 컨트롤러를 생성합니다:

여기서 중요한 부분은 다음과 같습니다:

  • 리소스는 다음을 사용하여 복제 컨트롤러를 정의합니다. 아룽업타/카우치베이스 도커 이미지
  • 볼륨 마운트 마운트할 볼륨을 정의합니다. /opt/couchbase/var 는 Couchbase Server가 모든 데이터를 저장하는 디렉터리입니다.
  • 볼륨 이 RC 정의에서 사용할 수 있는 다른 볼륨을 정의합니다.

RC를 다음과 같이 만듭니다:

를 클릭하고 출력을 표시합니다:

파드가 다음과 같은지 확인합니다. kubectl.sh get -w po 를 클릭합니다:

RC를 서비스로 노출하세요:

모든 서비스를 이용하세요:

서비스를 다음과 같이 설명합니다. kubectl.sh 설명 svc 카우치베이스 를 클릭합니다:

로드 밸런서가 안정화될 때까지 약 3분 정도 기다립니다. 다음 주소에서 Couchbase Server 웹 콘솔에 액세스합니다. :8091. 다시 한 번 강조하지만 여행 샘플 버킷이 존재합니다. 이 버킷은 다음에 의해 생성됩니다. 아룽업타/카우치베이스 이미지가 사용됩니다.

스테이트풀 컨테이너 표시

새 버킷을 만들어 보겠습니다. 이름 지정하기 쿠버네티스-pv를 클릭하고 모든 기본값을 설정한 후 만들기 버튼을 클릭하여 버킷을 생성합니다.

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket

이제 버킷이 콘솔에 표시됩니다:

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-created

카우치베이스 서버 파드를 종료하고 상태가 복원되는 것을 확인합니다. 파드를 다시 가져옵니다:

포드를 삭제합니다:

파드가 다시 생성됩니다:

이제 Couchbase 웹 콘솔에 액세스하면 이전에 생성한 버킷이 여전히 존재합니다:

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-still-there

이는 데이터가 EBS 백업 스토리지에 저장되어 있었기 때문입니다.

쿠버네티스 클러스터 정리

쿠버네티스 클러스터를 종료합니다:

그리고 볼륨을 분리합니다:

이 블로그의 전체 소스 코드는 여기에서 확인할 수 있습니다: github.com/arun-gupta/couchbase-kubernetes.

즐기세요!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 아룬 굽타

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 하나

  1. 좋은 기사입니다. 정리해 주셔서 감사합니다.

    이 예제는 단일 AZ에 대한 가정이 명확하게 명시되어 있습니다. 하지만 실제 프로덕션 환경에서는 여러 AZ에 걸쳐 k8s 클러스터를 배포해야 하며, 이는 다음과 같이 매우 쉽습니다. kops. 이로 인해 PV 배포에 여러 가지 문제가 발생합니다. 이를 수행하는 방법에 대한 좋은 예를 찾을 수 없었습니다. 혹시 알고 계신 예가 있으신가요? 아니면 여러 AZ를 지원하도록 이 예제를 업데이트할 의향이 있으신가요?

    k8s 문서를 읽으면 각 AZ에 대해 StorageClass 리소스를 사용해야 하는 것으로 보입니다. 퍼시스턴트 볼륨 클래스에 추가하고 싶지만 배포 (또는 ReplicationController)를 사용하여 올바른 StorageClass 노드에서 해당 장소가 예약되기 전까지는 알 수 없는 AZ를 기반으로 합니다.

    또한 여행 샘플 는 두 번 모두 저에게 나타나지 않았습니다. 그리고 두 번째 kubectl.sh expose rc couchbase --target-port=8091 --port=809-- type=LoadBalancerkubectl expose rc couchbase --target-port=8091 --port=8091 --type=LoadBalancer

    다음을 사용하도록 업데이트하는 것도 흥미로울 수 있습니다. kops (또는 이에 대한 다른 훌륭한 기사를 참조하세요) 그리고 복제 컨트롤러 와 함께 배포.

    1. 이에 대한 해결책을 찾았나요? PV로 CB 클러스터를 생성하려고 시도하고 있습니다. 처음 시작할 때는 모두 작동하는 것 같지만 일단 CD 파드를 죽이면 새 파드가 더 이상 CB 클러스터에 가입 할 수없고 IP가 차단 된 것 같고 CB 마스터 파드가 새 워커에 다시 연결할 수 없습니다.

      건배

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.