KubeBlocks: 클라우드 네이티브 데이터 인프라를 위한 컨테이너 기반 데이터베이스 관리 시스템

클라우드 네이티브 환경에서의 데이터 서비스 운영을 위한 KubeBlocks 소개

KubeBlocks는 컨테이너 기반의 데이터 인프라를 간편하게 구축하고 운영할 수 있도록 설계된 오픈소스 프로젝트입니다. Kubernetes 위에서 실행되며, 관리자에게 관계형 데이터베이스, NoSQL, 스트리밍 처리 엔진, 벡터 저장소 등 다양한 유형의 데이터 서비스를 선언적 방식으로 제공합니다. 이름은 'Kubernetes'와 '레고 블록'의 조합에서 유래되었으며, 복잡한 데이터 인프라를 단순한 블록 조합처럼 쉽게 구성할 수 있음을 상징합니다. 기존 Kubernetes는 무상태 애플리케이션에 강점을 가지지만, 상태 유지가 필요한 데이터베이스나 스토리지 기반 서비스에서는 한계가 있습니다. StatefulSet는 기본적인 고유성과 스토리지 보장을 제공하지만, 복제 일관성, 장애 복구, 롤링 업데이트 제어 등의 고급 기능을 충족시키기 어렵습니다. 이 문제를 해결하기 위해 KubeBlocks는 다음과 같은 핵심 기능을 도입했습니다: - ReplicationSet: 복제 세트의 상태를 추적하며, 장애 발생 시 자동 복구 및 지연 감소를 지원합니다. - ConsensusSet: 다중 노드 환경에서의 일관성 유지 및 마스터 전환 과정을 안정적으로 관리합니다. - 역할 기반 업데이트 순서: 주/비 동작 모델을 기반으로 업그레이드, 확장, 재시작 시 중단 시간을 최소화합니다. 이러한 기능 덕분에 사용자는 생산 환경에서도 신뢰성 높은 데이터 서비스를 몇 분 내에 배포할 수 있습니다.

주요 특징

  • 다양한 클라우드 공급업체(예: AWS, GCP, Azure, 알리바바 클라우드)와 호환되는 멀티클라우드 대응
  • MySQL, PostgreSQL, Redis, MongoDB, Kafka 등 총 32개 이상의 데이터베이스 및 스트리밍 엔진 지원
  • 실시간 모니터링, 백업/복원, 확장성, 성능 최적화를 포함한 프로덕션 수준의 운영 기능
  • 클러스터 상태 확인, 업그레이드, 확장, 백업 정책 적용 등 일상 운영 작업을 간소화
  • 명령줄 도구인 kbcli를 통해 직관적인 명령 기반 관리 가능

KubeBlocks 설치 절차

사전 준비: Kubernetes 버전 1.22 이상 필요 (공식 문서 기준)
  1. kbcli 설치
    curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash
    kbcli version
    echo "source <(kbcli completion bash)" >> ~/.bashrc
    . ~/.bashrc
  2. KubeBlocks 설치
    # 사용 가능한 버전 확인
    kbcli kubeblocks list-versions
    
    # 특정 버전 설치 (예: 0.9.0)
    kbcli kubeblocks install --version=0.9.0
    
    # 설치 상태 확인
    kbcli kubeblocks status
    출력 예시:
    KubeBlocks is deployed in namespace: kb-system, version: 0.9.0
    
    KubeBlocks Workloads:
    NAMESPACE   KIND         NAME                           READY PODS   CPU(CORES)   MEMORY(BYTES)   CREATED-AT                   
    kb-system   Deployment   kb-addon-snapshot-controller   1/1          N/A          N/A             Aug 05,2024 13:40 UTC+0800   
    kb-system   Deployment   kubeblocks                     1/1          N/A          N/A             Aug 05,2024 13:38 UTC+0800   
    kb-system   Deployment   kubeblocks-dataprotection      1/1          N/A          N/A             Aug 05,2024 13:38 UTC+0800   
    
    KubeBlocks Addons:
    NAME                           STATUS     TYPE   PROVIDER   
    mysql                          Enabled    Helm   N/A        
    postgresql                     Enabled    Helm   N/A        
    redis                          Enabled    Helm   N/A        
    kafka                          Enabled    Helm   N/A        
    mongodb                        Enabled    Helm   N/A        
    snapshot-controller            Enabled    Helm   N/A
  3. 확장 기능 활성화/비활성화
    # 지원되는 플러그인 목록 조회
    kbcli addon list
    
    # 특정 플러그인 활성화
    kbcli addon enable mysql
    
    # 특정 플러그인 비활성화
    kbcli addon disable redis

MySQL 클러스터 설치 및 연결 검증

  1. 네임스페이스 생성 및 클러스터 배포
    kubectl create namespace mysql-demo
    kbcli cluster create mysql mysql-demo -n mysql-demo
    > 참고: 실제 운영에서는 3노드 이상의 클러스터 구성 권장. 단일 노드는 테스트용으로만 활용.
  2. Pod 상태 확인
    kubectl get pods -n mysql-demo
    NAME                 READY   STATUS    RESTARTS   AGE
    mysql-demo-mysql-0   4/4     Running   0          6m41s
  3. 데이터베이스 접속 방법
    • kbcli를 통한 자동 접속
      kbcli cluster connect mysql-demo -n mysql-demo
    • kubectl을 통한 수동 접속
      # 인증 정보 확인
      kubectl get secrets -n mysql-demo | grep credential
      mysql-demo-conn-credential                  Opaque   5      28m
      
      # 사용자 이름 추출
      kubectl get secret -n mysql-demo mysql-demo-conn-credential -o jsonpath='{.data.\username}' | base64 -d
      root
      
      # 비밀번호 추출
      kubectl get secret -n mysql-demo mysql-demo-conn-credential -o jsonpath='{.data.\password}' | base64 -d
      rtbc8zdd
      
      # 컨테이너 내부로 진입 후 접속
      kubectl exec -ti -n mysql-demo mysql-demo-mysql-0 -- bash
      mysql -uroot -p

태그: KubeBlocks kubernetes MySQL PostgreSQL Redis

6월 26일 21:00에 게시됨