이 실습 튜토리얼 블로그는 주로 미니큐브를 실행하는 랩톱/데스크톱에서 Couchbase Kubernetes Operator를 설정하는 것에 대한 세부 사항을 다룹니다. 사용자 정의 TLS 인증서와 영구 볼륨을 설정하는 것이 특징입니다. 클러스터를 확장 및 축소하는 방법도 확인합니다. 또한 Couchbase 클러스터의 백업/복원을 실행하고 Python SDK를 사용하여 샘플 애플리케이션을 실행합니다.
설치는 노트북에서 실행할 수 있는 미니큐브를 사용하는 오픈 소스 쿠버네티스에서 Couchbase Operator 1.2를 사용합니다. 배포는 명령줄 도구를 사용하여 MacOS에 배포합니다.
실습 튜토리얼 개요
사전 요구 사항
macOS용 CLI 명령, 아래 명령을 사용하여 Mac용 패키지 관리자를 업데이트하세요.
1 |
$ brew 업데이트 |
아래 링크에서 하이퍼바이저 설치
https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-OSX.dmg
미니큐브 설치
1 |
$ brew cask 설치 미니큐브 |
kubectl 설치
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos
아래 명령어를 사용하여 미니큐브를 시작합니다.
[HINT] 이 튜토리얼에 필요하지 않은 경우 노트북의 모든 애플리케이션을 중지/종료하세요. 미니큐브에서 실행 중인 미니큐브 및 카우치베이스 클러스터는 많은 리소스를 필요로 합니다.
1 2 3 |
$ sudo 미니큐브 시작 $ sudo kubectl 클러스터-정보 |
노트북의 미니큐브에 대한 환경 세부 정보는 다음과 같습니다.
1 |
미니쿠에 on macos : v1.2.0 |
카우치베이스 오퍼레이터가 노트북에서 작동하도록 vCPU와 메모리를 4 및 4GiB로 설정합니다.
1 2 |
sudo 미니큐브 구성 set 메모리 4096 sudo 미니큐브 구성 set cpus 4 |
1 2 3 4 |
$ sudo 미니큐브 구성 보기 - cpus: 4 - 메모리: 4096 |
미니큐브 클러스터 세부 정보
1 2 3 4 |
$ sudo kubectl get 노드 이름 상태 역할 AGE 버전 미니큐브 준비 마스터 3d11h v1.15.0 |
카우치베이스 자율 운영자 배포하기
입학 컨트롤러 배포
cd를 dir 파일에 복사하여 필요한 yaml에 액세스합니다. 파일 패키지를 노트북에 로컬 디렉토리에 다운로드해야 합니다.
먼저 배포 범위를 지역화하기 위해 네임스페이스를 생성합니다.
1 |
$ sudo kubectl create 네임스페이스 cbdb |
스키마 유효성 검사를 위한 변하는 웹후크인 배포 허용 컨트롤러
1 |
$ sudo kubectl create -f 입학.yaml --네임스페이스 cbdb |
입학 컨트롤러에 대한 배포 쿼리
1 2 3 |
$ sudo kubectl get 배포 --네임스페이스 cbdb 이름 READY UP-TO-날짜 사용 가능 AGE 카우치베이스-연산자-입학 1/1 1 1 11m |
카우치베이스 자율 운영자 배포
사용자 지정 리소스 정의 배포
CRD의 범위는 k8s 클러스터 전체 또는 네임스페이스에 국한될 수 있습니다. 선택은 devops/k8s 관리자에게 달려 있습니다. 아래 예에서는 특정 네임스페이스로 로컬라이즈되었습니다.
1 |
sudo kubectl create -f crd.yaml --네임스페이스 cbdb |
운영자 역할 배포
1 |
$ sudo kubectl create -f 연산자-역할.yaml --네임스페이스 cbdb |
서비스 계정 만들기
1 |
$ sudo kubectl create 서비스 계정 카우치베이스-연산자 --네임스페이스 cbdb |
서비스 계정 'couchbase-operator'를 운영자 역할로 바인딩합니다.
1 |
$ sudo kubectl create 역할 바인딩 카우치베이스-연산자 --역할 카우치베이스-연산자 --서비스 계정 cbdb:카우치베이스-연산자 --네임스페이스 cbdb |
카우치베이스 자율 운영자 배포 배포
1 |
$ sudo kubectl create -f 연산자-배포.yaml --네임스페이스 cbdb |
쿼리 배포
1 2 3 4 |
$ sudo kubectl get 배포 --네임스페이스 cbdb 이름 READY UP-TO-날짜 사용 가능 AGE 카우치베이스-연산자 1/1 1 1 20m 카우치베이스-연산자-입학 1/1 1 1 20m |
Couchbase 클러스터 배포
네임스페이스 dbdb에 TLS 인증서 배포
아래 링크의 도움말 파일을 사용하여 적절한 네임스페이스를 사용해야 하며, 여기서는 'cbdb'를 사용했습니다. 링크 제공 여기
kubectl을 통해 배포된 TLS 시크릿 쿼리하기
1 2 3 4 |
$ sudo kubectl get 비밀 --네임스페이스 cbdb 이름 유형 데이터 AGE 카우치베이스-연산자-tls 불투명 1 14h 카우치베이스-서버-tls 불투명 2 14h |
Couchbase UI에 액세스하기 위한 비밀 배포
1 |
$ sudo kubectl create -f 비밀.yaml --네임스페이스 cbdb |
미니큐브 k8s 클러스터에 대한 StorageClass 세부 정보 보기
1 2 3 |
$ sudo kubectl get 스토리지 클래스 이름 프로바이더 AGE 표준 (기본값) k8s.io/미니큐브-호스트 경로 3d14h |
Couchbase 클러스터 배포
1 |
$ sudo kubectl create -f 카우치베이스-지속적-클러스터-tls-k8s-미니큐브.yaml --네임스페이스 cbdb |
위 배포를 위한 YAML 파일을 찾을 수 있습니다. 여기
모든 것이 순조롭게 진행되면 PV, TLS 인증서와 함께 배포된 Couchbase 클러스터를 볼 수 있습니다.
1 2 3 4 5 6 7 |
$ sudo kubectl get 포드 --네임스페이스 cbdb 이름 READY 상태 다시 시작 AGE cb-오픈소스-k8s-0000 1/1 실행 중 0 5시간 58분 cb-오픈소스-k8s-0001 1/1 실행 중 0 5시간 58분 cb-오픈소스-k8s-0002 1/1 실행 중 0 5시간 57분 카우치베이스-연산자-864685d8b9-j72jd 1/1 실행 중 0 20h 카우치베이스-연산자-입학-7d7d594748-btnm9 1/1 실행 중 0 20h |
Couchbase UI에 액세스
Couchbase 클러스터에 대한 서비스 세부 정보 보기
1 2 3 |
$ sudo kubectl get svc --네임스페이스 cbdb 이름 유형 클러스터-IP 외부-IP PORT(S) AGE 6시간 11분 cb-오픈소스-k8s-ui NodePort 10.100.90.161 8091:30477/TCP,18091:30184/TCP |
CB UI 서비스를 통한 CB 클러스터 노출
1 2 3 |
$ sudo kubectl 포트-앞으로 서비스/cb-오픈소스-k8s-ui 8091:8091 --네임스페이스 cbdb 전달 에서 127.0.0.1:8091 -> 8091 전달 에서 [::1]:8091 -> 8091 |
Couchbase UI 액세스
로그인 http://localhost:8091 를 눌러 CB UI에 액세스합니다.
루트 CA를 확인하여 사용자 지정 x509 인증서가 사용 중인지 확인합니다.
보안->루트 인증서를 클릭합니다.
무작위로 파드 삭제, 001 파드 삭제하기
1 2 |
$ sudo kubectl 삭제 pod cb-오픈소스-k8s-0001 --네임스페이스 cbdb pod "cb-opensource-k8s-0001" 삭제됨 |
자동 페일오버 타임아웃에 따라 서버가 자동으로 페일오버됩니다.
손실된 카우치베이스 노드는 카우치베이스 운영자가 지속적으로 감시하는 클러스터 정의로 자동 복구됩니다.
확장/축소
클릭 한 번으로 확대 또는 축소를 변경할 수 있습니다.
확장
크기를 3에서 4로 변경
1 2 3 4 5 6 7 8 9 |
--- a/opensrc-k8s/cmd-라인/파일/카우치베이스-지속적-클러스터-tls-k8s-미니큐브.yaml enableIndexReplica: false 압축모드: 패시브 서버: - - 크기: 3 + - 크기: 4 이름: 데이터 서비스: - 데이터 |
아래 명령을 실행합니다.
1 |
sudo kubectl 신청하기 -f 카우치베이스-지속적-클러스터-tls-k8s-미니큐브.yaml --네임스페이스 cbdb |
붐!
클러스터 확장.
주의: K8 클러스터에는 확장할 수 있는 충분한 리소스가 있어야 합니다.
축소
스케일업과 정반대로 클러스터를 원하는 수로 줄입니다. 하지만 3 이상은 아니어야 합니다.
카우치베이스 MVP는 3노드입니다.
카우치베이스 서버 백업 및 복원
cbbackupmgr을 통한 CB 클러스터 백업
지정된 백업 마운트/볼륨에 백업 리포지토리를 생성합니다.
1 2 |
$ cbbackupmgr 구성 --아카이브 /tmp/데이터/ --repo myBackupRepo 백업 저장소 `myBackupRepo` 생성 성공 in 아카이브 `/tmp/데이터/` |
백업
1 |
$ cbbackupmgr 백업 -c 카우치베이스://127.0.0.1 -u 관리자 -p 암호 -a /tmp/data/ -r myBackupRepo |
복원
1 2 |
#는 --force-updates를 사용하여 클러스터의 현재 상태가 아닌 백업 저장소의 모든 업데이트를 사용합니다. $ cbbackupmgr 복원 -c 카우치베이스://127.0.0.1 -u 관리자 -p 암호 -a /tmp/data/ -r myBackupRepo --force-updates |
다른 네임스페이스에서 샘플 Python 애플리케이션 실행하기
앱 계층을 위한 네임스페이스 만들기
1 2 |
$ sudo kubectl create 네임스페이스 앱 네임스페이스/앱 생성 |
앱 포드 배포
1 2 |
$ sudo kubectl create -f 앱_팟.yaml --네임스페이스 앱 pod/app01 생성 |
샘플 파이썬 프로그램을 실행하여 카우치베이스 클러스터에 문서를 업로드합니다.
앱 파드에 파드 셸/엑섹에 로그인합니다.
1 |
$ sudo kubectl exec -ti app01 bash --네임스페이스 앱 |
파이썬 SDK 설치를 위한 포드 준비하기
파드의 FQDN으로 프로그램 편집하기
카우치베이스 포드에 실행한 후 아래 명령을 실행하세요.
1 |
$ sudo kubectl exec -ti cb-오픈소스-k8s-0000 bash --네임스페이스 cbdb |
앱 포드에 대한 FQDN 받기
1 2 |
root@cb-오픈소스-k8s-0000:/# 호스트 이름 -f cb-오픈소스-k8s-0000.cb-오픈소스-k8s.cbdb.svc.클러스터.local |
올바른 연결 문자열로 프로그램 편집
연결 문자열은 아래와 같습니다:
1 |
클러스터 = 클러스터('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_sdk_example.py CB 서버 연결 통과 열기 의 버킷... 완료... 업서팅 a 문서... 완료... 얻기 비-존재 키. Should 실패.. Got 예외 에 대한 누락 doc 삽입 a doc... 완료... 얻기 an 존재 키. Should 통과... 가치 에 대한 키 'babyliz_liz' 가치 에 대한 키 'babyliz_liz' {u'관심사': [u'성배', u'킹덤즈 앤 던전'], u'type': u'Royales', u'name': u'베이비 리즈', u'이메일': u'babyliz@cb.com'} 삭제 a doc 와 함께 키 'u:baby_arthur'... 완료... 가치 에 대한 키 [u:baby_arthur] Got 예외 에 대한 누락 doc 에 대한 키 [u:baby_arthur] 와 함께 오류 닫기 연결 에 의 버킷... 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 삭제 -f 비밀.yaml --네임스페이스 cbdb sudo kubectl 삭제 -f 카우치베이스-지속적-클러스터-tls-k8s-미니큐브.yaml --네임스페이스 cbdb sudo kubectl 삭제 역할 바인딩 카우치베이스-연산자 --네임스페이스 cbdb sudo kubectl 삭제 서비스 계정 카우치베이스-연산자 --네임스페이스 cbdb sudo kubectl 삭제 -f 연산자-배포.yaml --네임스페이스 cbdb sudo kubectl get 배포 --네임스페이스 cbdb sudo kubectl 삭제 -f 입학.yaml --네임스페이스 cbdb sudo kubectl 삭제 pod app01 --네임스페이스 앱 |
안녕하세요 램 ,
감사합니다 ... 이것은 좋은 포괄적 인 문서입니다 ... 내가 찾고 있던 것을 몇 가지 지적합니다 :
웹 콘솔에서 모든 노드가 사라지도록 모든 서비스에 대해 클러스터 구성을 0으로 편집할 수 있나요?
또한 자율 프레임 워크에서 전체 클러스터를 다시 시작하려는 경우 실행중인 포드 및 프로세스를 중지하는 방법 또는 프로세스는 무엇입니까? 데이터 손실 없이 그렇게 할 수 있는 기능이 있나요?
때로는 재조정과 같은 작업이 미쳤고 결코 멈추지 않으므로 (해결되지 않은 CB에 많은 오픈 티켓이 표시됨)이 시나리오에서는 가능하면 클러스터를 다시 시작하고 싶습니다.