Ssoon

Percona Operator (1) - DBaaS on Kubernetes 본문

Database Operator In Kubernetes study

Percona Operator (1) - DBaaS on Kubernetes

구구달스 2022. 6. 20. 18:49
CloudNet@ 팀의 가시다님이 진행하는 Database Operator In Kubernetes study 스터디 중 DBaaS on Kubernetes 내용에 대해 정리하였습니다.

DBaaS(“Database-as-a-Service”) 란?

물리적 하드웨어를 설정하거나 소프트웨어를 설치하거나 성능을 위해 구성 작업을 수행하지 않고 사용자가 데이터베이스를 설정, 운영, 확장하도록 지원하는 소프트웨어 및/또는 서비스를 말합니다.

 

Kubernetes 서비스에서의 DBaaS

  • 데이터베이스가 프로비저닝되고 사용자는 엔드포인트 정보와 그에 연결하기 위한 암호를 얻습니다.
  • 데이터베이스는 가용성이 높고 특정 SLA를 충족합니다.
  • 데이터베이스는 쉽게 감시 및 백업할 수 있습니다. (관리 서비스)

 

Topologies

DB당 Kubernetes 클러스터 수

  • 장점 : 단순하고 설계상 워크로드를 효율적으로 분리가 가능합니다.
  • 단점 : Kubernetes 클러스터마다 etcd 및 컨트롤 플레인소프트웨어를 실행하는 자체 마스터가 탑재되어 있어 많은 오버헤드가 추가됩니다.

노드 분리가 있는 공유 Kubernetes

  • 장점 : 분리성이 뛰어나 오버헤드가 없습니다.
  • 단점 : 클러스터 내 모든 노드의 사용률을 적절하게 유지하는 것은 어려울 수 있으며, 그 결과 많은 계산 능력이 낭비됩니다.

완전 공유 Kubernetes

  • 각 고객 또는 각 데이터베이스에는 고유한 네임스페이스가 있습니다.
  • 장점: 계산 자원을 효율적으로 사용하여 낭비를 방지합니다.
  • 단점: 리소스는 cgroup을 통해 분리되므로 보안 및 "소음 테넌트"에 대처하기가 어려울 수 있습니다

Shared Kubernetes with VM-Like Isolation

  • VM과 같은 분리는 일반적으로 애플리케이션과 호스트 커널 간의 경계를 강화하는 특수 컨테이너 런타임에 의해 제공됩니다.
  • 리소스 오버헤드가 약간 증가하지만 보안은 크게 향상됩니다.

High Availability

  • 데이터베이스 노드는 서로 다른 Kubernetes 노드에서 실행되고 있습니다. 이러한 설계로 인해 단일 VM 또는 서버 장애 시 다운타임이 발생하지 않습니다.
  • Kubernetes에서는 Affinity 또는 Pod Topology Thread Constraints 을 사용하여 개별 노드에서 포드 스케줄을 적용합니다.
  • Percona Kubernetes Operators에서는 최종 사용자가 원활하게 작업할 수 있도록 기본적으로 anti-affinity 가 활성화되어 있습니다.

Storage

  • 데이터베이스에는 데이터 및 스토리지가 필요하며 오퍼레이터가 Kubernetes에 데이터를 저장하는 방법은 다양합니다.

StatefulSets

  • StatefulSet은 "Pods 세트의 배포와 확장을 관리하고 이러한 Pod의 순서와 고유성에 대한 보증을 제공합니다.
  • 데이터가 있는 Pods가 고유한 이름을 가지며 예측 가능한 순서로 시작되도록 합니다.

Persistent Volume Claims

  • 네트워크 스토리지를 통한 PVC는 클라우드 업체에서 제공하는 것도 있으며, CephGluster 등과 같은 프라이빗 클라우드 솔루션이 있습니다.
  • PVC의 성능은 네트워크 성능 및 스토리지에 사용되는 기본 디스크에 크게 좌우됩니다.

Local Storage

  • Kubernetes는 HostPath 및 EmptyDir 제공하여 Pod가 실행되는 노드의 스토리지로 사용합니다.
  • 네트워크 스토리지를 사용할 수 없거나 복잡성이 발생하는 경우(프라이빗 클라우드 등)에는 로컬 스토리지를 사용하면 성능을 향상시킬 수 있습니다.

문제점 #1 -노드 장애로 인한 데이터 손실 발생

  • 전체 NODE가 충돌할 경우 한 POD의 데이터가 완전히 손실되고 새 NODE에서 POD가 다시 시작되면 어떻게든 복구하거나 다른 NODE에서 동기화해야 하기 때문에 로컬 스토리지를 사용하는 것은 어렵습니다.

문제점 #2 – 데이터 제한의 어려움

  • DBaaS는 스토리지 제한을 포함하여 제한된 리소스를 가진 데이터베이스 인스턴스를 사용자에게 제공해야합니다.
  • 로컬 스토리지에서는 데이터베이스 확장을 제한할 수 없는 문제는 다음과 같은 방법으로 해결할 수 있습니다.
  1. 데이터 사용량을 지속적으로 모니터링하는 사이드카 컨테이너 실행(예: du)
  2. 데이터베이스 노드가 전용 Kubernetes 노드에서 실행되는 토폴로지를 선택합니다.

Network

  • DBaaS는 사용자에게 데이터베이스에 연결할 endpoint을 제공합니다.
  • 데이터베이스 서비스의 가용성을 높이려면 여러 DB 노드를 실행합니다.
  • 노드 간 트래픽밸런싱을 위해 HAProxy 또는 ProxySQL을 선택할 수 있습니다.
  • 프록시는 DB 노드와 함께 배포되어 트래픽의 균형을 맞추고 DB 노드의 상태를 모니터링합니다.
  • 이러한 프록시가 없으면 응용 프로그램은 트래픽 자체를 라우팅할 위치를 파악하거나 다른 외부 프록시를 사용해야 합니다.
  • LoadBalancerIngress또는 NodePort를 사용하여 Kubernetes 외부에서 프록시를 공개하고 엔드포인트 정보를 사용자에게 반환합니다.

 

Comments