업계 FIRST CRD를 통해 기본적으로 kubernetes(k8s) API와 통합된 NoSQL 데이터베이스는 고객에게 엄청난 성능, 민첩성, 클라우드 이식성을 제공하여 다음과 같은 이점을 제공합니다. 무료 에서
- Couchbase 클러스터 관리 또는 관리하기
- 노드 장애에 대한 걱정을 덜어주는 k8s 운영자가 여러분을 위해 파드를 돌립니다.
- 노드 추가 후 리밸런싱 작업 수행에 대한 걱정, k8s 오퍼레이터가 대신 수행합니다.
- 공급업체 종속
k8과 기본적으로 통합하면 사용자 정의 컨트롤러를 정의할 수 있으며, 이를 통해 Couchbase 클러스터에서 발생하는 특정 조건에 대한 워크플로우를 정의할 수 있습니다. 사용자 정의 컨트롤러에 해당 로직을 작성하면 Couchbase 클러스터를 더 잘 관리할 수 있습니다.
Azure AKS에서 Couchbase Autonomous Operator를 실행하는 것은 현재 기술 미리보기 중입니다.
다음과 같은 작업을 수행합니다.
- CLI로 Azure에 로그인(az 로그인)
- 리소스 그룹 만들기
- AKS에서 k8s 클러스터 만들기
- k8s 대시보드에 액세스(선택 사항)
- 카우치베이스 자율 운영자 배포
- AKS에 카우치베이스 클러스터 배포하기
- 클러스터에 일부(~100,000개) 문서 삽입하기
- 하나의 명령으로 클러스터 확장
- 노드 장애를 시뮬레이션하여 파드 삭제하기
- k8s가 클러스터 정의와 일치하도록 해당 이벤트를 감시하고 새 파드를 불러오는 것을 확인합니다.
- 참조
이제 Azure Kubernetes Service의 Autonomous Operator 배포를 매우 상세하게 단계별로 살펴보겠습니다.
CLI로 Azure에 로그인(az 로그인)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
az 로그인 To sign in, 사용 a 웹 브라우저 에 열기 의 페이지 https://aka.ms/devicelogin에 접속하여 코드 BFU6N7R8L을 입력하여 인증합니다. [ { "cloudName": "AzureCloud", "id": "xxxxxx-deff-4604-xxxxx-xxxxxxxxx", "isDefault": true, "name": "MyOrgAzure", "state": "사용", "tenantId": "xxbf6-f537-4fde-bc07-ooooooo777777", "user": { "name": "ram@couchbase.com", "type": "user" } } ] |
리소스 그룹 만들기
1 |
az 그룹 create --이름 램리소스GP --위치 eastus |
k8s 클러스터 만들기
Azure 포털에 로그인하고 검색 아이콘에서 Azure Kubernetes Service를 검색하면 다음과 같은 화면이 표시됩니다.

K8 서비스 만들기
k8s 노드에 대한 인스턴스 크기를 선택하고 요구 사항에 따라 노드 수를 선택합니다.

인스턴스 유형 선택
인스턴스 유형 선택

k8s 워커 노드의 번호를 선택하세요.
k8s 클러스터에 RBAC 사용

k8s용 RBAC 선택
기본 네트워킹 선택

네트워킹에 대한 기본 설정 선택
컨테이너 모니터링 사용

컨테이너 모니터링을 위한 기본 설정 선택
유효성 검사가 통과되었는지 확인하고 생성

다음을 클릭하면 k8s 클러스터에 대한 유효성 검사가 통과된 것을 확인할 수 있습니다.
실행 명령을 사용하여 Azure에서 로컬로 실행 중인 k8s 클러스터를 가져옵니다(개인적으로 이 명령은 AKS에서 실행 중인 원격 k8s 클러스터를 관리할 수 있는 기능을 제공하므로 유용하다고 생각합니다. 다른 옵션을 사용할 수 있습니다. Azure 셸)
1 2 |
az aks get-자격 증명 --리소스-그룹=램리소스GP --이름=ramk8saks 병합 "ramk8saks" as 현재 컨텍스트 in /사용자/ram.dhakne/.kube/구성 |
아래 스크린샷은 AKS 클러스터 구성이 로컬에서 올바르게 설정되었는지 확인하는 방법을 보여줍니다.

AKS에서 실행 중인 k8s 클러스터 확인
k8s 대시보드에 액세스(선택 사항)
모든 k8s 자산은 kubectl을 통해 관리할 수 있으며, Couchbase 클러스터에 대한 GUI 액세스를 통해 관리가 더 쉬워집니다. 하지만 k8s 대시보드를 통해서도 k8s 자산을 관리하고 싶습니다.
1 2 3 4 5 6 7 |
az aks 찾아보기 --리소스-그룹 램리소스GP --이름 ramk8saks 병합 "ramk8saks" as 현재 컨텍스트 in /var/폴더/0l/sr0jnvw10nb55xt8nz6zcrzc0000gn/T/tmpvw6ub8_7 프록시 실행 중 on http://127.0.0.1:8001/ 프레스 CTRL+C 에 닫기 의 터널... 전달 에서 127.0.0.1:8001 -> 9090 전달 에서 [::1]:8001 -> 9090 처리 연결 에 대한 8001 |
[팁] k8s 대시보드에서 다음과 같은 권한 문제가 발생하는 경우
1 2 |
경고 구성 맵 는 금지됨: 사용자 "시스템:서비스 계정:큐브-시스템:쿠버네티스-대시보드" 할 수 없음 목록 구성 맵 in 의 네임스페이스 "default" |
를 클릭한 다음 다음 명령을 실행합니다.
1 2 |
kubectl create 클러스터 역할 바인딩 쿠버네티스-대시보드 --클러스터 역할=클러스터-관리자 --서비스 계정=kube-시스템:쿠버네티스-대시보드 클러스터 역할 바인딩.rbac.권한 부여.k8s.io "쿠버네티스 대시보드" 생성 |
현재 URL에서 실행 중인 k8s 대시보드에 액세스할 수 있어야 합니다. http://127.0.0.1:8001/
카우치베이스 자율 운영자 배포
CB 운영자를 배포하는 것은 일회성 작업이며 매우 간단하다는 점을 기억하세요.
로컬 노트북에 다음 URL에서 운영자 zip 파일을 다운로드했습니다. 카우치베이스 운영자 패키지 다운로드
k8s에서 카우치베이스 클러스터에 RBAC 활성화
1 2 3 4 |
kubectl create -f 클러스터-역할.yaml kubectl create 서비스 계정 카우치베이스-연산자 --네임스페이스 기본값 서비스 계정 "카우치베이스 운영자" 생성 kubectl create 클러스터 역할 바인딩 카우치베이스-연산자 --클러스터 역할 카우치베이스-연산자 --서비스 계정 기본값:카우치베이스-오퍼레이터 클러스터 역할 바인딩.rbac.권한 부여.k8s.io "카우치베이스 운영자" 생성 |
카우치베이스 운영자 배포
1 2 |
kubectl create -f 연산자.yaml 배포.확장 프로그램 "카우치베이스 운영자" 생성 |
1 2 3 |
kubectl get 배포 이름 DESIRED 현재 UP-TO-날짜 사용 가능 AGE 카우치베이스-연산자 1 1 1 0 9s |
1분 이내에 준비가 완료되며, 배포가 진행되는 과정을 지켜볼 수 있습니다.
1 2 3 4 |
kubectl get 배포 -l 앱=카우치베이스-연산자 --시계 이름 DESIRED 현재 UP-TO-날짜 사용 가능 AGE 카우치베이스-연산자 1 1 1 0 8s 카우치베이스-연산자 1 1 1 1 13s |
AKS에 카우치베이스 클러스터 배포하기
이제 AKS에 자율 운영자를 배포했으니, 이제 Couchbase 클러스터를 배포해 보겠습니다.
AKS를 사용하면 기본적으로 StorageClass가 제공됩니다.
1 2 3 4 |
kubectl get sc 이름 프로바이더 AGE 기본값 (기본값) 쿠버네티스.io/azure-디스크 8h 관리-프리미엄 쿠버네티스.io/azure-디스크 8h |
배포를 위해 관리형 프리미엄을 선택하겠습니다.
자세한 yaml 파일은 여기에서 확인할 수 있습니다, 카우치베이스-퍼시스턴트-클러스터.yaml
1 |
kubectl create -f 카우치베이스-지속적-클러스터.yaml |
카우치베이스 클러스터가 나타나고 4개의 파드를 생성하는 데 몇 분 정도 걸리며, 처음으로 레지스트리에서 도커 이미지를 다운로드하므로 커피를 마시기 좋은 시간입니다!
1 2 3 4 5 6 7 |
kubectl get 포드 --시계 이름 READY 상태 다시 시작 AGE cb-op-aks-데모-0000 1/1 실행 중 0 48m cb-op-aks-데모-0001 1/1 실행 중 0 44m cb-op-aks-데모-0002 1/1 실행 중 0 40m cb-op-aks-데모-0003 1/1 실행 중 0 37m 카우치베이스-연산자-6cb7687498-zfzq5 1/1 실행 중 1 1h |
NodePort(기본값은 LoadBalancer)에서 cb-op-aks-demo-ui 서비스를 노출하면 공용 IP를 통해 Couchbase Server GUI에 액세스할 수 있습니다.

노드포트에서 로드밸런서에 cb-op-aks-demo-ui를 노출합니다.
명령 실행
1 |
kubectl get 서비스 |
는 다음과 같은 출력을 제공해야 합니다.
1 |
cb-op-aks-데모-ui 로드밸런서 10.0.191.163 40.121.65.8 8091:30427/TCP,18091:31034/TCP |
이제 기본 사용자 이름/비밀번호(예: 관리자/비밀번호)로 GUI에 로그인합니다.

로드밸런서가 노출한 공용 IP에서 GUI에 로그인합니다.
클러스터에 일부(~100,000개) 문서 삽입하기
1 |
cbc-베개 싸움 -U 카우치베이스://localhost/default -u 관리자 -P 암호 -J -t 4 -I 99998 -p `호스트 이름` |
[팁] 실행하기 전에 컨테이너에 유틸리티 cbc-pillowfight를 설치해야 합니다. 이 유틸리티의 설치는 이 블로그의 범위를 벗어납니다.
버킷 통계 차트에 불이 켜져 있어야 합니다.

베개 싸움이 실행 중일 때의 버킷 통계
하나의 명령으로 클러스터 확장
데이터 노드 용량을 3개에서 5개로 늘리고 싶다고 가정하고, 서버:size를 5로 변경하는 등 couch-base-persistent-cluster.yaml 파일을 업데이트하기만 하면 카우치베이스 클러스터를 확장하는 매우 간단한 작업이 가능합니다.

클러스터 확장하기
새로운 파드가 생성되고, 클러스터에 파드와 카우치베이스 노드가 추가되고, 리밸런싱이 수행되는 것을 보게 될 것입니다. 정말 놀랍습니다!
1 |
kubectl 로그 -f 카우치베이스-연산자-6cb7687498-zfzq5 |

파드가 생성되고 리밸런싱이 수행됩니다.
클러스터가 확장되었으며 새로운 클러스터 정의는 다음과 같습니다. 총 100,000개의 항목 중 각 노드에 ~20,000개의 항목/노드가 있는 것을 관찰할 수 있습니다.

새로운 클러스터 정의
[팁] 컨테이너에 PV가 있는지 확인해 보겠습니다.
포드에 로그인하고 다음 명령을 실행합니다. lsblk -a
1 |
kubectl exec -ti cb-op-aks-데모-0000 /bin/bash |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root@cb-op-aks-데모-0000:/# lsblk -a 이름 MAJ:MIN RM 크기 RO 유형 마운트포인트 loop1 7:1 0 0 loop <강한>sdd 8:48 0 4G 0 디스크 /mnt/데이터</강한> sdb 8:16 0 32G 0 디스크 `-sdb1 8:17 0 32G 0 part loop6 7:6 0 0 loop loop4 7:4 0 0 loop sr0 11:0 1 690K 0 rom loop2 7:2 0 0 loop <강한>sde 8:64 0 4G 0 디스크 /mnt/색인</강한> loop0 7:0 0 0 loop <강한>sdc 8:32 0 4G 0 디스크 /opt/카우치베이스/var/lib/카우치베이스</강한> sda 8:0 0 30G 0 디스크 `-sda1 8:1 0 30G 0 part /opt/카우치베이스/var loop7 7:7 0 0 loop loop5 7:5 0 0 loop loop3 7:3 0 0 loop |
In 카우치베이스-퍼시스턴트-클러스터.yaml 스토리지 볼륨을 4GiB 크기로 정의했고, 강조 표시된 스니펫에서 4GiB의 Couchbase 디렉터리가 있음을 알 수 있습니다!
노드 장애를 시뮬레이션하여 파드 삭제하기
데이터 서비스 노드인 k8s 대시보드에서 포드 cb-op-aks-demo-0000을 삭제합니다.

k8s 대시보드에서 포드 삭제하기
와 함께 자동 페일오버 타임아웃 변수 타임아웃을 초과하면 노드가 자동 페일오버되고 자율 운영자가 이를 감지하여 Couchbase 클러스터에 의해 자동 페일오버됩니다.

노드 삭제 및 장애 조치
카우치베이스 커스텀 컨트롤러는 클러스터 정의를 지속적으로 감시하고 있으며 총 4개의 노드 또는 k8s 파드가 필요하며 하나가 없어진 것을 확인하여 새 파드를 생성하고 클러스터에 가입한 후 리밸런싱을 수행합니다.

새 파드가 생성되고, 클러스터에 가입하고, 리밸런싱 작업이 수행되며, 이 모든 과정이 자동으로 수행됩니다.
카우치베이스 운영자 파드 로그에서

coucbase-operator-xxx 로그의 재조정 진행 상황
잠시 시간을 내어 여기서 무슨 일이 있었는지 살펴봅시다!
노드에 장애가 발생했고, 사용자 정의 컨트롤러(일명 카우치베이스 운영자)가 이를 감지했으며, 카우치베이스 클러스터 정의를 보고 총 7개의 포드 또는 7개의 카우치베이스 노드가 있어야 한다는 것을 확인하고, 하나가 없어진 것을 확인하고, 자동 장애 조치 시간 초과를 기다린 후 새 파드를 스핀하고 클러스터에 가입하고 재조정 작업을 수행합니다.
카우처스는 민첩성, 성능, 최첨단 기술 측면에서 고객에게 더 나은 서비스를 제공하기 위해 지속적인 차별화를 추구합니다. 이것은 확실히 게임 체인저입니다. 여러분의 피드백에 감사드리며, AKS에서 실행되는 쿠버네티스 기반 Couchbase Autonomous Operator를 통해 마이크로서비스를 향한 여정이 한 걸음 더 쉬워지기를 기대합니다.
참조
https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv
https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster
새로운 Kubernetes 및 OpenShift용 Couchbase Autonomous Operator 1.0이 이제 정식 버전으로 출시되었습니다!
https://docs.couchbase.com/operator/1.0/overview.html