✋[Open Project Season II] 질문 - K8s 기반 DB 운영에 대한 DevOps와 DBA의 관점 차이 및 패러다임 충돌?

K8s에 db를 올려본 devops엔지니어입니다. 컴퓨팅엔진인 Pod가 언제든 죽을수 있다는 사실이 dba 입장에서는 받아들이기 어려워하는 지점이었던 것 같아요. 이런 인식차이에 대해서 어떻게 생각하시는지 궁금해요

| This is a space where knowledge is not merely consumed, but respected, sovereign, and connected—shared together with cloud industry professionals (Bros).|
| 지식이 소비되지 않고 존중·주권보장·연결되는 공간으로 클라우드 현업 전문가(Bro)와 함께 공유하고 있습니다. |

1. 사실 이건 기술 논쟁이 아닌 '안정성’의 정의 차이입니다

두 전문가가 "안정성"이라는 같은 단어를 쓰면서 서로 다른 것을 말하고 있는 것이 충동의 본질입니다.

  • DBA의 안정성(정적 안정성): “서버가 절대 죽지 않는 것.” 수십 년간 물리 서버의 견고함을 신뢰해 온 이들에게 서버 종료는 데이터 정합성 파괴와 복구 시간(RTO)의 불확실성을 의미합니다. 그들에게 DB는 정성껏 관리해야 하는 **“애완동물(Pets)”**입니다.

  • DevOps의 안정성(동적 복구력): “죽어도 빠르게 살아나는 것.” 결함을 상수로 두고, 시스템이 스스로 치유(Self-healing)하는 능력을 안정성으로 정의합니다. 그들에게 Pod는 언제든 교체 가능한 **“가축(Cattle)”**입니다.

2. "점유와 격리"의 언어로 설득하기

DBA에게 "K8s가 알아서 해준다"는 식의 설득은 오히려 불안감을 키웁니다. 대신 **request/limit**과 같은 기계적 보증 장치를 통해 **“점유와 격리”**의 언어로 소통해야 합니다.

  • QoS Class (Guaranteed): “우리 DB는 노드에서 가장 마지막까지 보호됩니다”

    requestlimit을 동일한 값으로 설정하면 Pod는 Guaranteed QoS 등급을 받습니다. 이는 자원이 부족할 때 다른 Pod들이 먼저 정리(Eviction)될지언정, 우리 DB는 물리 서버처럼 자원을 독점 점유하며 보호받는다는 약속입니다.

  • 리소스 격리: “옆집 WAS가 날뛰어도 우리 DB는 안전합니다”

    limit 설정은 리눅스 커널 수준(Cgroups)에서 자원을 격리합니다. 옆에 있는 애플리케이션에 메모리 누수가 발생해 OOM 킬러가 작동하더라도, 보이지 않는 벽에 막혀 우리 DB의 메모리 영역은 절대 침범할 수 없습니다.

  • 스케줄링 보증: “이사 갈 집을 미리 검사합니다”

    Pod가 재배치될 때, 스케줄러는 단순히 빈자리를 보는 게 아니라 우리가 예약한 **‘전용석(Request)’**이 있는지 확인합니다. 자리가 확보되지 않으면 아예 배포를 하지 않으므로 자원 부족으로 인한 성능 저하를 방지합니다.

3. 아키텍처로 증명하는 데이터의 안전성

단순한 컨테이너를 넘어 DB의 정체성을 유지하는 장치들을 함께 보여주어야 합니다.

  • StatefulSet: Pod가 죽어도 고유한 식별자와 스토리지(PV)를 유지함을 보증합니다. "Pod는 죽어도 데이터와 이름은 죽지 않는다"는 점을 강조하십시오.

  • Pod Anti-Affinity: 마스터와 슬레이브 Pod가 절대 같은 물리 노드에 뜨지 않도록 강제하여 하드웨어 장애에 대비합니다.

  • Operator 패턴: 장애 시 Failover와 백업/복구를 자동화하는 **“지능형 관리자”**가 상시 대기하는 구조임을 증명합니다.


결론: 불신을 시스템적인 신뢰로 바꾸는 과정

실전에서는 이렇게 제안해 보십시오.

“우리 DB에는 **request: 32Gi / limit: 32Gi**를 설정해 물리 서버 한 대를 통째로 예약한 것과 똑같은 효과를 내겠습니다. 여기에 **ResourceQuota**까지 걸어서 다른 팀이 실수로라도 우리 자원을 뺏어가지 못하도록 전용 통로를 만들겠습니다.”