105. 오퍼레이터 (Operator) 패턴 - 쿠버네티스 운영 자동화의 끝판왕

⚠️ 이 문서는 쿠버네티스가 깡통 상태에서는 DB 백업이나 장애 복구 같은 깐깐한 인간 관리자(DBA)의 지능이 필요한 작업을 전혀 못 하는 바보 기계에 불과한 한계를 극복하기 위해, **고도로 숙련된 20년 차 데이터베이스 엔지니어의 뇌(운영 노하우)를 파이썬이나 Go 언어 코드로 통째로 복제한 뒤 클러스터 안에 박아넣어, K8s 스스로 DB를 스케일링하고 백업하며 고장 나면 고치는 무인 자율주행 운영 모드를 완성한 '오퍼레이터(Operator) 패턴'**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 사람이 터미널에 매달려 해야 했던 복잡한 앱 운영(Ops) 메뉴얼을 소프트웨어 로봇으로 대체한 것이다. 쿠버네티스에게 "단순한 컨테이너 재시작 말고, MySQL DB 백업하는 방법이라는 새로운 마법을 가르쳐주는" 지능 확장 플러그인이다.
  2. 가치: State(상태)가 있는 더러운 애플리케이션(DB, Kafka, ElasticSearch)을 클라우드에서 굴릴 때, 새벽에 서버가 터져 데이터가 박살 나는 걸 방어한다. 엔지니어 없이도 Operator 봇이 1초 만에 마스터-슬레이브 스위칭과 복구를 끝내주어 인건비를 0으로 수렴시킨다.
  3. 기술 체계: 내가 마음대로 단어를 지어내는 새로운 껍데기 **CRD(Custom Resource Definition)**와, 이 껍데기가 K8s에 올라오면 잽싸게 낚아채서 뱃속에 코딩된 대로 리눅스 쉘(Shell)을 때려주는 두뇌 로봇 **커스텀 컨트롤러(Custom Controller)**의 완벽한 2인 1조로 돌아간다.

Ⅰ. 바보 K8s의 한계: Stateless는 쉽지만 Stateful은 지옥이다

웹 서버 껐다 켜는 건 유치원생도 한다. 문제는 데이터베이스다.

  1. 기본 K8s 컨트롤러의 한계 (멍청함):
    • 쿠버네티스의 기본 뇌(Deployment Controller)는 무식하게 튼튼하다. 웹 서버 3대 중 1대가 죽으면 즉시 1대를 뿅 띄워서 다시 3대를 맞춰준다(Desired State 유지).
    • 하지만 **데이터베이스(DB)**는 이런 식으로 다루면 다 터진다.
    • MySQL 마스터(Master) DB가 죽었다고 치자. K8s가 바보같이 마스터를 하나 덜렁 띄워놓고 끝낸다. 하지만 진짜 DB 관리자는 새 마스터가 뜨면 옛날 슬레이브 DB들을 찾아가 IP를 갱신해주고 백업 데이터를 다시 덮어씌워 줘야(Re-sync) 한다.
    • K8s는 DB의 이런 복잡한 '운영 절차(Domain Knowledge)'를 1도 모른다.
  2. 오퍼레이터 (Operator) 패턴의 등판 (도메인 지식의 코드화):
    • 코어OS(CoreOS)가 천재적인 생각을 해냈다. "K8s가 DB 다루는 법을 모른다면, **우리가 20년 차 DBA 아저씨의 머릿속에 있는 'DB 복구 매뉴얼'을 코드로 짜서 K8s 컨트롤러 안에 주입(Injection)**해 버리자!"
    • 이것이 오퍼레이터다. '도메인 지식을 코드로 박아 넣은 똑똑한 자동화 봇'.

📢 섹션 요약 비유: K8s 기본 기능은 맥도날드 햄버거 알바생입니다. 직원이 1명 쓰러지면 1초 만에 새 알바생을 밀어 넣어 빈자리를 채웁니다(단순 복구). 하지만 쓰러진 게 '초밥집 20년 차 주방장(데이터베이스)'이라면? 새 알바생을 데려와도 회를 못 썰어 가게가 망합니다(Stateful 장애). 오퍼레이터(Operator) 패턴은 초밥집 주방장의 20년 뇌(레시피와 노하우)를 AI 칩으로 복사해서 매장 컨트롤 박스에 쾅! 꽂아버리는 것입니다. 이제 주방장이 쓰러져도, 매장의 기계 팔(Operator 봇)이 AI 칩을 바탕으로 직접 회를 썰고 밥을 쥐는 완벽한 무인 자동화가 달성됩니다.


Ⅱ. 오퍼레이터의 2대 뼈대: CRD와 커스텀 컨트롤러

외계어를 창조하고, 그 외계어를 해독할 전용 로봇을 띄운다.

  1. CRD (Custom Resource Definition) - 껍데기 단어 만들기:
    • 쿠버네티스는 기본적으로 Pod, Service, Deployment 같은 정해진 단어(Resource)만 알아듣는다.
    • 관리자가 터미널에 kubectl get mysql 이라고 치면 K8s는 "mysql이 뭔 개소리야? 에러!"를 뿜는다.
    • 여기서 CRD를 쓴다. K8s의 단어장에 내가 맘대로 단어를 끼워 넣는 꼼수다. "야 K8s! 오늘부터 mysql이라는 단어를 합법적으로 인정해라!"라고 CRD를 등록하면, 비로소 kubectl get mysql이 먹히기 시작한다.
  2. Custom Controller (커스텀 컨트롤러) - 진짜 로봇 두뇌:
    • 단어장(CRD)만 추가됐다고 DB가 생기진 않는다. 이 껍데기를 받아서 행동할 로봇이 필요하다.
    • 개발자가 Go 언어로 MySQL-Controller.exe 라는 로봇(파드)을 하나 짜서 K8s 클러스터 허공에 상주시켜 둔다.
  3. 찰떡 콤비의 완벽한 핑퐁 (Watch & Reconcile):
    • 사용자가 my-db.yaml (kind: mysql) 파일을 kubectl apply로 던진다.
    • 허공에 숨어있던 MySQL-Controller 로봇이 매의 눈으로 이벤트를 낚아챈다(Watch). "오! 주인이 CRD mysql 주문서를 날렸네?"
    • 이 로봇의 뱃속에는 DBA의 지식이 코딩되어 있다. 로봇이 당장 리눅스 쉘을 치고 API를 쏴서, 1번 서버에 마스터 DB를 깔고 2번 서버에 슬레이브를 깐 뒤 방화벽을 뚫고 둘 사이에 비동기 복제본 연결까지 1분 만에 쫙 세팅해 버린다(Reconcile). 인간 DBA의 업무가 완전히 증발했다.

📢 섹션 요약 비유: 내가 스마트폰 회사(K8s)에 가서 "오늘부터 음성 인식으로 '피자 시켜줘'라는 명령어(CRD)를 인식하게 만들어라!"라고 우기면 스마트폰은 껍데기 명령어는 듣지만 피자를 주진 않습니다. 하지만 내가 스마트폰 배경화면에 '도미노피자 자동 배달 앱(Custom Controller 로봇)'을 하나 깔아두면? 내가 마이크에 "피자 시켜줘(yaml 제출)"라고 외치는 순간, 이 앱이 명령어를 캐치해서 내 카드 번호를 치고 주소를 적어 진짜 현관문 앞에 피자를 대령하는(Reconcile) 완벽한 콤비네이션이 완성됩니다.


Ⅲ. 생태계의 지배자: OperatorHub와 Helm의 차이

"그럼 어제 배운 Helm(헬름) 패키지랑 뭐가 다릅니까?"

  1. Helm (Day 1: 설치 전문가):
    • 어제 배운 헬름은 '설치'에 미친 놈이다. 명령어 한 줄 치면 복잡한 시스템을 1초 만에 깔아준다.
    • 단점: 깔아주고 집에 가버린다(Fire and Forget). 새벽 2시에 깔아둔 Kafka 브로커 1대가 죽었을 때, 이걸 백업하고 복구시켜 주는 기능은 헬름엔 1도 없다.
  2. Operator (Day 2: 평생 노예 관리자):
    • 오퍼레이터는 헬름처럼 한 번 깔아주기도 하지만, 안 가고 클러스터에 영원히 상주한다. (Day 2 Operation)
    • Kafka Operator를 깔면, 이 봇이 24시간 Kafka 상태를 째려보다가 1대가 죽으면 즉시 남은 서버의 락(Lock)을 풀고 마스터를 재조정하는 피 말리는 장애 복구 짓을 평생 알아서 해준다. 자동 스케일링, 버전 자동 업그레이드, 정기 백업까지 인간이 할 운영 노가다를 100% 대행한다.
  3. OperatorHub.io (로봇 앱스토어):
    • 이 어마어마한 자동화 봇들을 오픈소스 진영에서 다 만들어놨다.
    • 구글에 OperatorHub를 치면, Redis, MongoDB, Elasticsearch의 공식 벤더사들이 자기들 DB를 K8s에서 가장 쩔게 굴리는 20년 노하우를 꾹꾹 눌러 담은 오퍼레이터 봇들을 공짜로 올려놨다. 우리는 이걸 가져다 내 클러스터에 깔아두기만 하면, 연봉 1억짜리 수석 DBA를 무료로 24시간 고용하는 것과 똑같은 기적을 누리게 된다.

📢 섹션 요약 비유: **헬름(Helm)**은 '이케아 조립 기사'입니다. 침대와 옷장(시스템)을 기가 막히게 예쁘게 조립해서 방에 놔주고 돈 받고 떠납니다. 1년 뒤 옷장 문짝이 떨어지면 기사는 안 고쳐줍니다. **오퍼레이터(Operator)**는 조립 기사가 아니라 '입주 집사(AI 집사)'입니다. 침대를 조립해 줄 뿐만 아니라, 우리 집에 24시간 살면서 옷장 문짝이 떨어지면 즉각 드라이버를 가져와 고치고, 밤이 되면 자동으로 청소기(백업)를 돌리며 집안을 평생 무결점 상태로 지켜주는 영원한 노예 로봇입니다.