이 실습 튜토리얼 블로그는 주로 미니큐브를 실행하는 랩톱/데스크톱에서 Couchbase Kubernetes Operator를 설정하는 것에 대한 세부 사항을 다룹니다. 사용자 정의 TLS 인증서와 영구 볼륨을 설정하는 것이 특징입니다. 클러스터를 확장 및 축소하는 방법도 확인합니다. 또한 Couchbase 클러스터의 백업/복원을 실행하고 Python SDK를 사용하여 샘플 애플리케이션을 실행합니다.
설치는 노트북에서 실행할 수 있는 미니큐브를 사용하는 오픈 소스 쿠버네티스에서 Couchbase Operator 1.2를 사용합니다. 배포는 명령줄 도구를 사용하여 MacOS에 배포합니다.
실습 튜토리얼 개요
사전 요구 사항
macOS용 CLI 명령, 아래 명령을 사용하여 Mac용 패키지 관리자를 업데이트하세요.
|
1 |
$ brew update |
아래 링크에서 하이퍼바이저 설치
https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-OSX.dmg
미니큐브 설치
|
1 |
$ brew cask install minikube |
kubectl 설치
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos
아래 명령어를 사용하여 미니큐브를 시작합니다.
[HINT] 이 튜토리얼에 필요하지 않은 경우 노트북의 모든 애플리케이션을 중지/종료하세요. 미니큐브에서 실행 중인 미니큐브 및 카우치베이스 클러스터는 많은 리소스를 필요로 합니다.
|
1 2 3 |
$ sudo minikube start $ sudo kubectl cluster-info |
노트북의 미니큐브에 대한 환경 세부 정보는 다음과 같습니다.
|
1 |
minikue on macos : v1.2.0 |
카우치베이스 오퍼레이터가 노트북에서 작동하도록 vCPU와 메모리를 4 및 4GiB로 설정합니다.
|
1 2 |
sudo minikube config set memory 4096 sudo minikube config set cpus 4 |
|
1 2 3 4 |
$ sudo minikube config view - cpus: 4 - memory: 4096 |
미니큐브 클러스터 세부 정보
|
1 2 3 4 |
$ sudo kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 3d11h v1.15.0 |
카우치베이스 자율 운영자 배포하기
입학 컨트롤러 배포
cd를 dir 파일에 복사하여 필요한 yaml에 액세스합니다. 파일 패키지를 노트북에 로컬 디렉토리에 다운로드해야 합니다.
먼저 배포 범위를 지역화하기 위해 네임스페이스를 생성합니다.
|
1 |
$ sudo kubectl create namespace cbdb |
스키마 유효성 검사를 위한 변하는 웹후크인 배포 허용 컨트롤러
|
1 |
$ sudo kubectl create -f admission.yaml --namespace cbdb |
입학 컨트롤러에 대한 배포 쿼리
|
1 2 3 |
$ sudo kubectl get deployments --namespace cbdb NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator-admission 1/1 1 1 11m |
카우치베이스 자율 운영자 배포
사용자 지정 리소스 정의 배포
CRD의 범위는 k8s 클러스터 전체 또는 네임스페이스에 국한될 수 있습니다. 선택은 devops/k8s 관리자에게 달려 있습니다. 아래 예에서는 특정 네임스페이스로 로컬라이즈되었습니다.
|
1 |
sudo kubectl create -f crd.yaml --namespace cbdb |
운영자 역할 배포
|
1 |
$ sudo kubectl create -f operator-role.yaml --namespace cbdb |
서비스 계정 만들기
|
1 |
$ sudo kubectl create serviceaccount couchbase-operator --namespace cbdb |
서비스 계정 'couchbase-operator'를 운영자 역할로 바인딩합니다.
|
1 |
$ sudo kubectl create rolebinding couchbase-operator --role couchbase-operator --serviceaccount cbdb:couchbase-operator --namespace cbdb |
카우치베이스 자율 운영자 배포 배포
|
1 |
$ sudo kubectl create -f operator-deployment.yaml --namespace cbdb |
쿼리 배포
|
1 2 3 4 |
$ sudo kubectl get deployment --namespace cbdb NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator 1/1 1 1 20m couchbase-operator-admission 1/1 1 1 20m |
Couchbase 클러스터 배포
네임스페이스 dbdb에 TLS 인증서 배포
아래 링크의 도움말 파일을 사용하여 적절한 네임스페이스를 사용해야 하며, 여기서는 'cbdb'를 사용했습니다. 링크 제공 여기
kubectl을 통해 배포된 TLS 시크릿 쿼리하기
|
1 2 3 4 |
$ sudo kubectl get secrets --namespace cbdb NAME TYPE DATA AGE couchbase-operator-tls Opaque 1 14h couchbase-server-tls Opaque 2 14h |
Couchbase UI에 액세스하기 위한 비밀 배포
|
1 |
$ sudo kubectl create -f secret.yaml --namespace cbdb |
미니큐브 k8s 클러스터에 대한 StorageClass 세부 정보 보기
|
1 2 3 |
$ sudo kubectl get storageclass NAME PROVISIONER AGE standard (default) k8s.io/minikube-hostpath 3d14h |
Couchbase 클러스터 배포
|
1 |
$ sudo kubectl create -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb |
위 배포를 위한 YAML 파일을 찾을 수 있습니다. 여기
모든 것이 순조롭게 진행되면 PV, TLS 인증서와 함께 배포된 Couchbase 클러스터를 볼 수 있습니다.
|
1 2 3 4 5 6 7 |
$ sudo kubectl get pods --namespace cbdb NAME READY STATUS RESTARTS AGE cb-opensource-k8s-0000 1/1 Running 0 5h58m cb-opensource-k8s-0001 1/1 Running 0 5h58m cb-opensource-k8s-0002 1/1 Running 0 5h57m couchbase-operator-864685d8b9-j72jd 1/1 Running 0 20h couchbase-operator-admission-7d7d594748-btnm9 1/1 Running 0 20h |
Couchbase UI에 액세스
Couchbase 클러스터에 대한 서비스 세부 정보 보기
|
1 2 3 |
$ sudo kubectl get svc --namespace cbdb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 6h11m cb-opensource-k8s-ui NodePort 10.100.90.161 8091:30477/TCP,18091:30184/TCP |
CB UI 서비스를 통한 CB 클러스터 노출
|
1 2 3 |
$ sudo kubectl port-forward service/cb-opensource-k8s-ui 8091:8091 --namespace cbdb Forwarding from 127.0.0.1:8091 -> 8091 Forwarding from [::1]:8091 -> 8091 |
Couchbase UI 액세스
로그인 https://localhost:8091 를 눌러 CB UI에 액세스합니다.

루트 CA를 확인하여 사용자 지정 x509 인증서가 사용 중인지 확인합니다.
보안->루트 인증서를 클릭합니다.

무작위로 파드 삭제, 001 파드 삭제하기
|
1 2 |
$ sudo kubectl delete pod cb-opensource-k8s-0001 --namespace cbdb pod "cb-opensource-k8s-0001" deleted |
자동 페일오버 타임아웃에 따라 서버가 자동으로 페일오버됩니다.

손실된 카우치베이스 노드는 카우치베이스 운영자가 지속적으로 감시하는 클러스터 정의로 자동 복구됩니다.

확장/축소
클릭 한 번으로 확대 또는 축소를 변경할 수 있습니다.
확장
크기를 3에서 4로 변경
|
1 2 3 4 5 6 7 8 9 |
--- a/opensrc-k8s/cmd-line/files/couchbase-persistent-cluster-tls-k8s-minikube.yaml enableIndexReplica: false compressionMode: passive servers: - - size: 3 + - size: 4 name: data services: - data |
아래 명령을 실행합니다.
|
1 |
sudo kubectl apply -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb |
붐!
클러스터 확장.
주의: K8 클러스터에는 확장할 수 있는 충분한 리소스가 있어야 합니다.
축소
스케일업과 정반대로 클러스터를 원하는 수로 줄입니다. 하지만 3 이상은 아니어야 합니다.
카우치베이스 MVP는 3노드입니다.
카우치베이스 서버 백업 및 복원
cbbackupmgr을 통한 CB 클러스터 백업
지정된 백업 마운트/볼륨에 백업 리포지토리를 생성합니다.
|
1 2 |
$ cbbackupmgr config --archive /tmp/data/ --repo myBackupRepo Backup repository `myBackupRepo` created successfully in archive `/tmp/data/` |
백업
|
1 |
$ cbbackupmgr backup -c couchbase://127.0.0.1 -u Administrator -p password -a /tmp/data/ -r myBackupRepo |
복원
|
1 2 |
# use --force-updates to use all updates from backup repo rather than current state of cluster $ cbbackupmgr restore -c couchbase://127.0.0.1 -u Administrator -p password -a /tmp/data/ -r myBackupRepo --force-updates |
다른 네임스페이스에서 샘플 Python 애플리케이션 실행하기
앱 계층을 위한 네임스페이스 만들기
|
1 2 |
$ sudo kubectl create namespace apps namespace/apps created |
앱 포드 배포
|
1 2 |
$ sudo kubectl create -f app_pod.yaml --namespace apps pod/app01 created |
샘플 파이썬 프로그램을 실행하여 카우치베이스 클러스터에 문서를 업로드합니다.
앱 파드에 파드 셸/엑섹에 로그인합니다.
|
1 |
$ sudo kubectl exec -ti app01 bash --namespace apps |
파이썬 SDK 설치를 위한 포드 준비하기
파드의 FQDN으로 프로그램 편집하기
카우치베이스 포드에 실행한 후 아래 명령을 실행하세요.
|
1 |
$ sudo kubectl exec -ti cb-opensource-k8s-0000 bash --namespace cbdb |
앱 포드에 대한 FQDN 받기
|
1 2 |
root@cb-opensource-k8s-0000:/# hostname -f cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local |
올바른 연결 문자열로 프로그램 편집
연결 문자열은 아래와 같습니다:
|
1 |
cluster = Cluster('couchbase://cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local') |
미니큐브의 네임스페이스는 모두 동일한 kube-dns를 공유하기 때문에
프로그램 실행
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@app01:/# python python_sdk_example.py CB Server connection PASSED Open the bucket... Done... Upserting a document... Done... Getting non-existent key. Should fail.. Got exception for missing doc Inserting a doc... Done... Getting an existent key. Should pass... Value for key 'babyliz_liz' Value for key 'babyliz_liz' {u'interests': [u'Holy Grail', u'Kingdoms and Dungeons'], u'type': u'Royales', u'name': u'Baby Liz', u'email': u'babyliz@cb.com'} Delete a doc with key 'u:baby_arthur'... Done... Value for key [u:baby_arthur] Got exception for missing doc for key [u:baby_arthur] with error Closing connection to the bucket... root@app01:/# |
삽입된 문서는 다음과 같이 표시되어야 합니다.

결론
미니큐브 버전인 v1.2.0에 버전 1.2로 Couchbase Autonomous Operator를 배포했습니다. Couchbase 클러스터에는 네임스페이스로 역할이 제한된(보다 안전한) 권한 컨트롤러, RBAC가 필요합니다. 배포된 CRD는 클러스터 전체 범위를 갖지만 이는 설계상입니다. 배포된 Couchbase 클러스터에는 PV 지원 및 고객 x509 인증서가 있었습니다.
Couchbase 클러스터가 어떻게 자가 치유를 통해 사용자의 개입 없이도 클러스터를 정상적으로 복구하는지 확인했습니다.
백업 및 복원은 Couchbase 서버에 매우 중요합니다. 백업 및 복원을 수행하는 데 권장되는 유틸리티는 cbbackupmgr입니다. 또한 네임스페이스에 배포된 애플리케이션 포드에 Couchbase 파이썬 sdk를 설치하는 방법과 해당 애플리케이션이 Couchbase 서버와 대화하고 CRUD 작업을 수행하도록 하는 방법도 살펴봤습니다.
정리(선택 사항)
생성된 모든 k8s 에셋의 구성을 해제하려면 아래 단계를 수행하세요.
|
1 2 3 4 5 6 7 8 |
sudo kubectl delete -f secret.yaml --namespace cbdb sudo kubectl delete -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb sudo kubectl delete rolebinding couchbase-operator --namespace cbdb sudo kubectl delete serviceaccount couchbase-operator --namespace cbdb sudo kubectl delete -f operator-deployment.yaml --namespace cbdb sudo kubectl get deployments --namespace cbdb sudo kubectl delete -f admission.yaml --namespace cbdb sudo kubectl delete pod app01 --namespace apps |
안녕하세요 램 ,
감사합니다 ... 이것은 좋은 포괄적 인 문서입니다 ... 내가 찾고 있던 것을 몇 가지 지적합니다 :
웹 콘솔에서 모든 노드가 사라지도록 모든 서비스에 대해 클러스터 구성을 0으로 편집할 수 있나요?
또한 자율 프레임 워크에서 전체 클러스터를 다시 시작하려는 경우 실행중인 포드 및 프로세스를 중지하는 방법 또는 프로세스는 무엇입니까? 데이터 손실 없이 그렇게 할 수 있는 기능이 있나요?
때로는 재조정과 같은 작업이 미쳤고 결코 멈추지 않으므로 (해결되지 않은 CB에 많은 오픈 티켓이 표시됨)이 시나리오에서는 가능하면 클러스터를 다시 시작하고 싶습니다.