OpenShift 는 도커 컨테이너와 쿠버네티스를 기반으로 하는 레드햇의 서비스형 플랫폼(PaaS)입니다. 엔터프라이즈 앱 개발 및 배포를 위한 Docker 컨테이너와 Kubernetes 컨테이너 클러스터 관리자를 기반으로 하는 Red Hat의 오픈 소스 컨테이너 애플리케이션 플랫폼입니다.
Couchbase의 Operator는 OpenShift도 지원합니다. 이제 몇 줄의 명령어만으로 클러스터를 빠르게 확장 및 축소하고, 장애로부터 복구하거나, 심지어 클러스터의 아키텍처를 변경하는 방법을 살펴보겠습니다:
비디오 트랜스크립션:
코드:
1 |
https://github.com/couchbaselabs/kubernetes-starter-kit |
전제 조건
미니시프트 시작
미니 시프트를 시작하려면 다음 명령을 입력하기만 하면 됩니다:
1 |
미니시프트 시작 |
시작되면 다음 명령을 실행하여 다음을 추가합니다. oc 를 클래스 경로에 추가합니다:
1 |
평가 $(미니시프트 oc-환경) |
또한 관리자로 클러스터에 액세스할 수 있도록 다음 추가 기능을 포함할 수도 있습니다:
1 |
미니시프트 addon 신청하기 관리자-사용자 |
이제 OpenShift에 액세스하려면 다음 명령을 사용하면 됩니다:
1 |
oc 로그인 -u 관리자 |
미니시프트 구성
시작하기 전에 만들어야 할 몇 가지 사항이 있습니다. 필요한 명령어만 나열해 보겠지만 공식 문서에서 확인할 수 있습니다. 여기.
1 - 오픈시프트 프로젝트 만들기
1 2 3 |
oc 로그인 -u 개발자 oc new-프로젝트 연산자-예제 oc 로그아웃 |
2 - 새 사용자 정의 리소스 정의 및 클러스터 역할 만들기
1 2 3 4 |
oc 로그인 -u 관리자 oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/crd.yaml oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/cluster-role-sa.yaml oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/cluster-role-user.yaml |
3- OpenShift 프로젝트를 위한 RBAC 설정하기
1 2 3 4 5 |
oc create 서비스 계정 카우치베이스-연산자 --네임스페이스 연산자-예제 oc create 역할 바인딩 카우치베이스-연산자 --클러스터 역할 카우치베이스-연산자 --서비스 계정 연산자-예제:카우치베이스-연산자 oc adm 정책 추가-scc-에-사용자 anyuid 시스템:서비스 계정:연산자-예제:카우치베이스-연산자 oc create 역할 바인딩 카우치베이스 클러스터 --클러스터 역할 카우치베이스 클러스터 --사용자 개발자 --네임스페이스 연산자-예제 oc create 클러스터 역할 바인딩 카우치베이스 클러스터 --클러스터 역할 카우치베이스 클러스터 --사용자 개발자 |
오픈시프트에 카우치베이스의 오퍼레이터 배포하기
이제 모든 설정을 마쳤으니 Couchbase의 Operator를 배포해 보겠습니다. 앞서 언급했듯이 이전 블로그 게시물운영자는 클러스터에 새 노드 조인, 데이터 재조정, 로그 통합 등과 같은 DBA 작업의 일부를 자동화하는 역할을 담당합니다.
다음 명령을 실행하여 운영자를 배포할 수 있습니다:
1 |
oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/operator.yaml |
아래 명령을 실행하여 배포가 성공적으로 실행되었는지 확인합니다:
1 |
oc get 포드: |
OpenShift에 Couchbase 배포하기
OpenShift에 Couchbase를 배포하는 것은 다음과 거의 동일합니다. 쿠버네티스에 배포하기를 설치하려면 "kubernetes" 디렉터리에서 다음 명령을 실행하면 됩니다:
1 2 |
oc create -f 비밀.yaml // 웹 콘솔에 로그인하는 데 사용할 사용자 및 비밀번호를 생성합니다. oc create -f 카우치베이스-클러스터.yaml |
yaml 파일에는 버킷 이름, 서버 수, 서비스 수 등과 같은 클러스터 사양이 포함되어 있습니다:
secret.yaml
1 2 3 4 5 6 7 8 |
apiVersion: v1 종류: 비밀 메타데이터: 이름: cb-example-auth 유형: 불투명 데이터: 사용자 이름: 관리자용 QWRtaW5pc3RyYXRvcg== #base64 비밀번호비밀번호: cGFzc3dvcmQ= #base64 |
couchbase-cluster.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 |
apiVersion: couchbase.database.couchbase.com/v1beta1 종류: 카우치베이스클러스터 메타데이터: 이름: cb-example 사양: baseImage: 카우치베이스/서버 버전: 엔터프라이즈-5.0.1 authSecret: cb-example-auth 노출 관리자 콘솔true 클러스터: 데이터서비스메모리쿼터: 256 인덱스서비스메모리쿼터: 256 검색서비스메모리쿼터: 256 인덱스 스토리지 설정메모리_최적화 자동 페일오버 타임아웃: 30 버킷: - 이름: 카우치베이스 샘플 유형: 카우치베이스 메모리 쿼터: 128 복제본: 3 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false 서버: - 크기: 3 이름모든 서비스 서비스: - 데이터 - 색인 - 쿼리 - 검색 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 |
참고하세요. 공식 문서 를 통해 각 속성의 기능을 이해할 수 있습니다.
위 파일에서는 3개의 노드를 원한다고 지정했는데, 이는 3개의 노드가 Couchbase를 실행해야 한다는 의미입니다:
1 |
oc get 포드 |
OpenShift에서 데이터베이스에 액세스하기
웹 콘솔을 외부에 노출할 수 있는 방법은 여러 가지가 있습니다. 이 문서에서는 다음 명령을 사용하여 포트를 로컬 컴퓨터로 간단히 전달해 보겠습니다:
1 |
oc 포트-앞으로 cb-예제-0000 8091:8091 |
이제 로컬 컴퓨터의 다음 위치에서 Couchbase의 웹 콘솔에 액세스할 수 있습니다. http://localhost:8091:
생성된 모든 노드가 이미 클러스터의 일부임을 알 수 있습니다. 이 모든 작업은 Couchbase의 운영자에 의해 자동으로 수행되었습니다.
OpenShift의 데이터베이스 노드 장애에서 복구하기
인스턴스 중 하나를 죽여 클러스터가 어떻게 작동하는지 확인해 보겠습니다:
1 |
oc 삭제 pod cb-예제-0001 |
카우치베이스는 즉시 노드 "사라짐'를 클릭하면 복구 프로세스가 시작됩니다. 에서 지정한 대로 카우치베이스-cluster.yaml 항상 3개의 서버를 실행하도록 설정하면 쿠버네티스는 새 인스턴스를 시작합니다. cb-example-0004:
한 번 cb-예시-004 가 올라가면 운영자는 새로 생성된 노드를 클러스터에 조인한 다음 데이터 리밸런싱을 트리거합니다.
오픈 시프트에서 카우치베이스 축소하기
데이터베이스 확장이 어렵다고 생각되면 데이터베이스를 축소해 보세요. 다행히도 Couchbase와 OpenShift를 사용하면 매우 간단합니다. 클러스터 구성을 변경하기만 하면 됩니다:
couchbase-cluster.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 |
apiVersion: couchbase.database.couchbase.com/v1beta1 종류: 카우치베이스클러스터 메타데이터: 이름: cb-example 사양: baseImage: 카우치베이스/서버 버전: 엔터프라이즈-5.0.1 authSecret: cb-example-auth 노출 관리자 콘솔true 클러스터: 데이터서비스메모리쿼터: 256 인덱스서비스메모리쿼터: 256 검색서비스메모리쿼터: 256 인덱스 스토리지 설정메모리_최적화 자동 페일오버 타임아웃: 30 버킷: - 이름: 카우치베이스 샘플 유형: 카우치베이스 메모리 쿼터: 128 복제본: 3 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false 서버: - 크기: 1 //변경됨 이름모든 서비스 서비스: - 데이터 - 색인 - 쿼리 - 검색 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 |
그런 다음 다음 명령을 실행하여 변경 사항을 OpenShift에 푸시합니다:
1 |
oc 대체 -f 카우치베이스-클러스터.yaml |
그러나 데이터 손실의 위험 없이 동시에 2개의 노드를 죽일 수는 없기 때문에 여기에는 작은 세부 사항이 있습니다. 이 문제를 방지하기 위해 운영자는 클러스터를 한 번에 하나의 인스턴스씩 점진적으로 축소하고, 이 과정에서 데이터가 손실되지 않도록 리밸런싱을 트리거합니다:
오픈시프트에서 카우치베이스 확장하기
다시 3노드로 확장해 보겠습니다. 짐작할 수 있듯이, 우리가 해야 할 일은 크기 매개변수를 카우치베이스-cluster.yaml 돌아가기 3:
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 |
apiVersion: couchbase.database.couchbase.com/v1beta1 종류: 카우치베이스클러스터 메타데이터: 이름: cb-example 사양: baseImage: 카우치베이스/서버 버전: 엔터프라이즈-5.0.1 authSecret: cb-example-auth 노출 관리자 콘솔true 클러스터: 데이터서비스메모리쿼터: 256 인덱스서비스메모리쿼터: 256 검색서비스메모리쿼터: 256 인덱스 스토리지 설정메모리_최적화 자동 페일오버 타임아웃: 30 버킷: - 이름: 카우치베이스 샘플 유형: 카우치베이스 메모리 쿼터: 128 복제본: 3 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false 서버: - 크기: 3 //3개 서버로 돌아가기 이름모든 서비스 서비스: - 데이터 - 색인 - 쿼리 - 검색 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 |
그런 다음 다음을 실행하여 구성을 업데이트합니다.
1 |
oc 대체 -f 카우치베이스-클러스터.yaml |
몇 분 후, 이제 다시 3개의 노드가 있는 것을 확인할 수 있습니다:
다차원 스케일링
각 노드에서 실행하려는 서비스를 지정하여 다차원 확장을 활용할 수도 있습니다:
couchbase-cluster.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 |
apiVersion: couchbase.database.couchbase.com/v1beta1 종류: 카우치베이스클러스터 메타데이터: 이름: cb-example 사양: baseImage: 카우치베이스/서버 버전: 엔터프라이즈-5.0.1 authSecret: cb-example-auth 노출 관리자 콘솔true 클러스터: 데이터서비스메모리쿼터: 256 인덱스서비스메모리쿼터: 256 검색서비스메모리쿼터: 256 인덱스 스토리지 설정메모리_최적화 자동 페일오버 타임아웃: 30 버킷: - 이름: 카우치베이스 샘플 유형: 카우치베이스 메모리 쿼터: 128 복제본: 3 ioPriority높음 퇴거 정책: fullEviction 충돌 해결: seqno 활성화Flushtrue enableIndexReplica: false 서버: - 크기: 2 이름: 데이터_및_색인 서비스: - 데이터 - 색인 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 - 크기: 1 이름: 쿼리 및 검색 서비스: - 쿼리 - 검색 데이터 경로: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 indexPath: /옵트/카우치베이스/변수/라이브/카우치베이스/데이터 |
다시 다음 명령을 사용하여 변경 사항을 OpenShift에 푸시해야 합니다:
1 |
oc 대체 -f 카우치베이스-클러스터.yaml |
이 시나리오에서는 데이터 및 인덱스를 실행하는 두 개와 전체 텍스트 검색 및 쿼리를 실행하는 하나의 노드 등 세 개의 새 노드가 생성됩니다.
OpenShift에서 애플리케이션을 Couchbase에 연결하기
OpenShift에서 애플리케이션을 배포하는 것은 Kubernetes에서 애플리케이션을 배포하는 것과 매우 유사합니다. 가장 큰 차이점은 oc 를 사용하는 대신 kubectl. 이 문서 는 단계별 프로세스를 보여줍니다.
궁금한 점이 있으면 다음 주소로 트윗해 주세요. @deniswsrosa 를 클릭하거나 아래에 댓글을 남겨 주세요.
함께 읽어보세요:
아주 잘 작성된 블로그입니다! 확장/축소하는 방법, 다차원 기능을 보여주는 방법을 모두 같은 블로그에서 보여주는 것이 좋습니다.
감사합니다! 궁금한 점이 있으시면 언제든지 문의해 주세요.
안녕 데니스
이 기사에 감사드립니다. 환상적으로 보이지만 링크가 더 이상 작동하지 않는 것 같습니다. https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/crd.yaml
현재 그들이 어디에 살고 있는지 알려주시겠어요?
감사합니다, Adrian