Couchbase Autonomous Operator를 사용하면 오픈 소스 Kubernetes 또는 엔터프라이즈 Red Hat OpenShift 컨테이너 플랫폼에서 기본적으로 Couchbase 배포를 실행할 수 있습니다. 오늘 Couchbase Autonomous Operator 0.8 베타 리프레시 출시를 발표하게 되어 기쁩니다!
Couchbase 클러스터를 실행하고 관리하는 것이 훨씬 쉬워졌습니다. 쿠버네티스용 카우치베이스 자율 운영자. 이제 사용자는 쿠버네티스 위에 Couchbase를 배포하고 장애 복구 및 다차원 확장과 같은 클러스터 관리의 대부분을 Couchbase Autonomous Operator가 처리하도록 할 수 있습니다. 그러나 사용자는 가만히 앉아서 Couchbase Autonomous Operator가 하는 일을 지켜보는 것만으로도 다소 불편함을 느낄 수 있습니다. 이러한 걱정을 조금이나마 덜어드리기 위해, 이 3부작 블로그 시리즈에서는 Couchbase의 품질 엔지니어링 팀이 Kubernetes에서 Couchbase를 실행할 때 고객이 안심하고 사용할 수 있는 다양한 방법을 안내해드립니다.
이 블로그 시리즈에서는 쿠버네티스에서 Couchbase를 위해 수행하는 세 가지 유형의 테스트를 중점적으로 다룹니다. 시리즈의 첫 번째 포스팅은 수동 테스트에 초점을 맞출 것입니다. 두 번째 포스팅에서는 Couchbase 자율 운영자 테스트에 대해 설명합니다. 그리고 세 번째 포스팅에서는 사용자가 기능 테스트 도구인 테스트 러너를 사용하여 Couchbase 인스턴스를 직접 테스트하는 방법을 보여드리겠습니다.
1단계: 카우치베이스 자율 운영자 수동 인증
수동 테스트는 자동화된 테스트의 스릴에 비해 지루한 경우가 많지만, Kubernetes를 사용하면 실제로 꽤 재미있을 수 있습니다. 이 포스팅에서는 쿠버네티스에 대한 카우치베이스 여행 샘플 앱 운영자가 관리하는 Couchbase 클러스터를 데이터 저장소로 사용하여 모두 Kubernetes에 설정합니다. 애플리케이션과 클러스터가 모두 Kubernetes에 설정되면 몇 가지 확장 및 장애 시나리오를 테스트해 보겠습니다.
다음 섹션에서는 이에 대해 설명합니다:
0: 사전 요구 사항 및 설정
1: 클러스터 배포
2: 클러스터 구성
3: 애플리케이션 배포
4: 확인
사전 요구 사항 및 설정:
쿠버네티스에서 Couchbase를 사용하여 여행 샘플 앱을 설정하기 위해 미니큐브를 사용하겠습니다. 미니큐브 설정에 대한 지침은 여기에서 확인할 수 있습니다: https://kubernetes.io/docs/getting-started-guides/minikube/.
미니큐브가 설정되면 메모리와 CPU 수를 늘릴 수 있습니다. 다음을 사용하여 클러스터를 모니터링하려면 Kubernetes 대시보드를 불러와야 합니다: 미니큐브 대시보드
클러스터 배포:
미니큐브를 설정한 후, Couchbase Autonomous Operator와 이 운영자가 관리할 Couchbase 클러스터를 초기화해야 합니다. 다음 YAML 파일은 쿠버네티스 마스터에게 Couchbase Autonomous Operator 배포를 생성하도록 지시합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
배포.yaml --- apiVersion: 확장/V1베타1 종류: 배포 메타데이터: 이름: 카우치베이스 운영자 사양: 복제본: 1 템플릿: 메타데이터: 레이블: 이름: 카우치베이스 운영자 사양: 컨테이너: - 이름: 카우치베이스 운영자 이미지: 카우치베이스/K8S-운영자:0.8.0-beta 환경: - 이름: 내_팟_네임스페이스 valueFrom: fieldRef: fieldPath: 메타데이터.네임스페이스 - 이름: MY_POD_NAME valueFrom: fieldRef: fieldPath: 메타데이터.이름 포트: - 이름: READY-PORT 컨테이너 포트: 8080 readinessProbe: httpGet: 경로: /readyz 포트: READY-PORT 초기 지연 시간: 3 기간초: 3 실패 임계값: 19 |
라는 파일을 만듭니다. deployment.yaml 을 생성하고 이 YAML을 Kubernetes에 제출합니다: kubectl create -f 경로/to/deployment.yaml. 몇 초 후에 운영자 배포가 Kubernetes 대시보드에 표시되어야 합니다.

그림 1: 카우치베이스 자율 운영자를 배포한 후의 Kubernetes 클러스터 상태.
다음으로, 카우치베이스 자율 운영자가 카우치베이스 노드를 관리할 수 있도록 비밀을 쿠버네티스에 제공해야 합니다.
|
1 2 3 4 5 6 7 8 9 10 |
비밀.yaml --- apiVersion: v1 종류: 비밀 메타데이터: 이름: cb-example-auth 유형: 불투명 데이터: 사용자 이름: QWRtaW5pc3RyYXRvcg== 비밀번호: cGFzc3dvcmQ= |
secret.yaml이라는 파일을 생성하고 다음을 사용하여 Kubernetes에 암호를 전송합니다: kubectl create -f 경로/to/secret.yaml을 실행한다.
다음으로, 2개의 Couchbase 노드로 구성된 클러스터를 불러와 보겠습니다. 다음 YAML은 두 개의 노드, 두 개의 버킷(기본 및 여행 샘플)과 모든 서비스가 활성화된 클러스터를 지정합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
cb-cluster.yaml --- apiVersion: couchbase.database.couchbase.com/v1beta1 종류: 카우치베이스클러스터 메타데이터: 이름: cb-example 사양: baseImage: 카우치베이스/서버 버전: 엔터프라이즈-5.0.1 authSecret: cb-example-auth 노출 관리자 콘솔true 일시 중지됨: false 클러스터: 데이터서비스메모리쿼터: 256 인덱스서비스메모리쿼터: 256 검색서비스메모리쿼터: 256 인덱스 스토리지 설정메모리_최적화 자동 페일오버 타임아웃: 10 버킷: - 이름기본값 유형: 카우치베이스 메모리 쿼터: 128 복제본: 1 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false - 이름: 여행 샘플 유형: 카우치베이스 메모리 쿼터: 128 복제본: 1 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false 서버: - 크기: 2 이름모든 서비스 서비스: - 데이터 - 색인 - 쿼리 - 검색 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 |
클러스터 구성을 제출합니다: kubectl create -f 경로/to/cb-cluster.yaml.

그림 2: Couchbase 노드를 2개로 확장한 후의 Kubernetes 클러스터 상태.
클러스터 구성:
이제 두 개의 노드 클러스터를 Couchbase 자율 운영자가 관리하고 있으므로, 클러스터 구성에 대한 업데이트를 cb-cluster.yaml 파일에서 수행한 후 Kubernetes에 다시 제출해야 합니다. Couchbase UI를 통해 수동으로 변경하는 경우, 운영자는 클러스터를 cb-cluster.yaml에 지정된 구성으로 다시 정렬하는 조치를 취합니다. 클러스터를 변경하려면 먼저 cb-cluster.yaml에서 변경을 수행한 다음 Kubernetes를 다음으로 업데이트합니다: kubectl 적용 -f 경로/to/cb-cluster.yaml
다음 단계는 클러스터의 트래블 샘플 버킷에 트래블 샘플 데이터와 인덱스 정의를 로드하는 것입니다. 다음 명령은 포드 cb-example-0000에서 cbimport를 호출합니다: kubectl 실행 포드 cb-example-0000 -ti /opt/couchbase/bin/cbimport json -c 127.0.0.1:8091 -u 관리자 -p 비밀번호 -b travel-sample -f 샘플 -d /opt/couchbase/samples/travel-sample.zip
애플리케이션 배포:
클러스터는 이제 모두 설정되었지만 여행 샘플 앱은 설정되지 않았습니다. 이제 Kubernetes가 앱에 사용할 도커 이미지를 빌드해야 합니다. 아래 도커 파일은 제 포크인 https://github.com/korry8911/try-cb-python 에서 여행 샘플 앱을 가져와 모든 종속 요소를 설치합니다. 이 블로그 포스팅을 위해 travel.py 파일을 수정하여 Kubernetes 파이썬 클라이언트를 사용하여 동일한 Kubernetes 네임스페이스에서 실행 중인 Couchbase 노드의 IP를 가져오도록 했습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#travel.py (수정됨) #https://github.com/korry8911/try-cb-python/blob/master/travel.py#L20 구성.로드_인클러스터_구성() v1 = 클라이언트.CoreV1Api() 인쇄("카우치베이스 노드 찾기:") ret = v1.리스트_팟_포_모든_네임스페이스(시계=False) cbip = [] 에 대한 i in ret.항목: 인쇄("%s\t%s\t%s" % (i.상태.pod_ip, i.메타데이터.네임스페이스, i.메타데이터.이름)) 만약 'cb-example' in i.메타데이터.이름: cbip.추가(i.상태.pod_ip) |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#Dockerfile FROM 우분투:14.04 RUN apt-get 업데이트 RUN apt-get 설치 -y gcc g++ make cmake git-핵심 libevent-dev 리베프-dev libssl-dev libffi-dev psmisc iptables zip 압축 해제 python-dev python-pip vim curl # 빌드 libcouchbase RUN git 복제 git://github.com/카우치베이스/libcouchbase.git && \ mkdir libcouchbase/빌드 WORKDIR libcouchbase/빌드 RUN ../cmake/구성 --접두사=/usr && \ make && \ make 설치 WORKDIR / RUN git 복제 https://github.com/korry8911/시도-cb-python.git WORKDIR 시도-cb-python ARG BRANCH=5.0 RUN git 결제 $BRANCH RUN cat 여행.py # 파이썬 개발팀 설치 RUN pip2 설치 --업그레이드 포장 앱 디렉터리 RUN pip 설치 -U pip 설정 도구 RUN pip 설치 파라미코 &&\ pip 설치 gevent &&\ pip 설치 boto &&\ pip 설치 httplib2 &&\ pip 설치 pyyaml &&\ pip 설치 카우치베이스 RUN pip 설치 -r 요구 사항.txt COPY 진입점.sh 진입점.sh RUN chmod +x ./진입점.sh 엔트리포인트 ["sh", "entrypoint.sh"] |
|
1 2 3 4 |
#entrypoint.sh #!/bin/bash python 여행.py 동안 true; do 수면 1000; 완료 |
여행 샘플 앱 도커 이미지를 빌드합니다: 도커 빌드 -t 당신의 도커허브 핸들/여행 샘플:최신. 도커 이미지는 쿠버네티스 워커 노드에 로드해야 합니다. 가장 쉬운 방법은 dockerhub에서 이미지를 가져오는 것입니다. 트래블 샘플 이미지를 푸시합니다: 도커 푸시 당신의-도커허브-핸들/여행-샘플:최신.
여행 샘플 앱 구성은 다음 파일에 정의되어 있습니다. 도커 핸들을 추가해야 합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
여행 샘플.yaml --- apiVersion: 확장/V1베타1 종류: 배포 메타데이터: 이름: 여행 샘플 사양: 복제본: 1 템플릿: 메타데이터: 레이블: 이름: 여행 샘플 사양: 컨테이너: - 이름: 여행 샘플 이미지귀하의 도커허브 핸들/여행 샘플최신 |
여행 샘플 앱을 로드합니다: kubectl create -f path/to/travel-sample.yaml.

그림 3: 여행 샘플 앱을 배포한 후의 Kubernetes 클러스터 상태.
기본적으로 쿠버네티스는 클러스터 외부에서 파드에 대한 액세스를 허용하지 않는다. 따라서 여행 샘플 앱에 도달하려면, 여행 샘플 앱이 들어오는 요청을 수신 대기하는 포트를 프록시하는 노드-포트 서비스를 생성해야 합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
노드포트.yaml --- 종류: 서비스 apiVersion: v1 메타데이터: 이름: 여행 샘플 사양: 유형: NodePort 포트: - 포트: 8080 nodePort: 32000 선택기: 이름: 여행 샘플 |
를 사용하여 여행 샘플에 대한 노드-포트 서비스를 생성합니다: kubectl create -f 경로/to/nodeport.yaml을 실행한다.

그림 4: 노드-포트 서비스를 추가한 후의 Kubernetes 클러스터 상태.
미니큐브에서 애플리케이션을 실행하고 있으므로 여행 샘플 앱을 실행하여 액세스해야 합니다: 미니큐브 서비스 여행 샘플.
인증:
이제 여행 샘플 앱을 사용해 보았으니, Couchbase 클러스터를 노드 하나씩 확장해 보겠습니다. 이렇게 하려면 cb-cluster.yaml 파일의 서버 섹션에서 size 매개 변수를 2에서 3으로 변경합니다. 그런 다음 변경 사항을 Kubernetes에 제출합니다: kubectl apply -f 경로/to/cb-cluster.yaml을 실행한다.

그림 5: Couchbase 노드를 3개로 확장한 후의 Kubernetes 클러스터 상태.
이제 Couchbase 클러스터는 3개 노드로, Couchbase Autonomous Operators 자동 페일오버 기능을 테스트하기에 충분한 노드 수입니다. Couchbase 노드 하나를 종료하여 장애 시나리오를 시뮬레이션하고 Couchbase Autonomous Operator가 자동으로 새 노드를 클러스터로 다시 리밸런싱하는 것을 지켜보겠습니다. Kubernetes 대시보드에서 파드로 이동하여 cb-example-0002 파드를 삭제하여 하나의 Couchbase 파드를 종료합니다.
10초의 자동 페일오버 타임아웃 기간이 지나면, Couchbase 자율 운영자는 클러스터에서 장애 노드를 제거하고 새 노드를 초기화한 후 클러스터로 노드의 밸런스를 재조정합니다. 이 과정에서 사용자는 서비스 중단 없이 여행 샘플 앱을 사용할 수 있습니다.

그림 6: Couchbase 노드 장애에서 복구된 후의 Kubernetes 클러스터 상태.
결론:
Couchbase 자율 운영자는 다음에서 Couchbase 클러스터를 실행하는 데 따르는 많은 번거로움을 덜어줍니다. 오픈 소스 Kubernetes 및/또는 엔터프라이즈 레드햇 오픈시프트 컨테이너 플랫폼. 노드 장애가 발생하더라도 클러스터의 원하는 상태가 자동으로 유지됩니다. 노드 복구 기능의 수동 인증은 재미있지만 더 많은 테스트가 필요합니다. 다음 포스트에서는 Couchbase Autonomous Operator의 다른 기능에 대한 기능 테스트 접근 방식을 심층적으로 살펴보겠습니다.
베타 버전을 확인할 준비가 되셨나요?
- 아래 단계에 따라 베타 버전을 쉽게 받을 수 있습니다. 사전 요구 사항 및 설정 를 사용하여 Kubernetes 또는 OpenShift 플랫폼에 Couchbase Operator를 배포할 수 있습니다.
- 도커파일 링크
- 카우치베이스 서버 - https://hub.docker.com/_/couchbase/
- 카우치베이스 운영자 - https://hub.docker.com/r/couchbase/k8s-operator/
질문, 의견 또는 추가 피드백이 있는 경우 아래에 댓글을 남기거나 다음 주소에 게시하세요. https://www.couchbase.com/forums/.