Files
obsidian/infra/k3s-migration.md

3.5 KiB

title, updated, status, tags
title updated status tags
K3s PostgreSQL 백엔드 이전 2026-03-25 완료
k3s
migration
postgresql
supabase

개요

기존 K3s 클러스터(외부 etcd)에서 Supabase PostgreSQL 백엔드로 전환하는 프로젝트. 2026-03-24~25 완료.

기존 클러스터 (폐기됨)

항목
노드 hp2(server), kr1(server), kr2(분리됨)
데이터스토어 외부 etcd (Incus 컨테이너 3개)
etcd 엔드포인트 http://192.168.9.214:2379, http://192.168.9.135:2379, http://192.168.9.134:2379

현재 클러스터

항목
컨트롤 플레인 kr1 (192.168.9.214), kr2 (192.168.9.135)
워커 (agent) hp2 (192.168.9.134)
데이터스토어 Supabase PostgreSQL (싱가포르)
Pooler Session mode, port 5432
DB 호스트 aws-1-ap-southeast-1.pooler.supabase.com
DB 유저 postgres.bahmyfgldxmtgvsufmwf
시크릿 Vault secret/cloud/supabase
커넥션 제한 pool_max_conns=5&pool_min_conns=1
max_connections 60 (무료 티어)
네트워크 LAN 192.168.9.x, flannel vxlan
Pod CIDR 10.42.0.0/16
Service CIDR 10.43.0.0/16
tls-san k3s.inouter.com, 192.168.9.135, 100.119.109.41
게이트웨이 Traefik (메인, DaemonSet hostPort) + APISIX (SafeLine WAF 전용)
스토리지 Longhorn v1.8.2
인증서 cert-manager + Google Trust Services (와일드카드 6개, Reflector)

장애 시나리오

장애 영향 복구
server 1대 죽음 서비스 무중단, 나머지 server가 API 유지 자동
agent 죽음 Pod 재스케줄 자동
server 2대 동시 기존 Pod 유지, 변경 불가 아무 노드에서 k3s server 시작
Supabase DB 장애 기존 Pod 유지, 변경 불가 Supabase 복구 시 자동

Supabase 제약사항

  • Transaction mode pooler(6543) 사용 불가 — K3s Kine이 prepared statements 사용, transaction pooler와 충돌
  • Session mode pooler(5432) 필수 — pool_max_conns로 커넥션 수 제한
  • 무료 티어 max_connections=60, Pro($25/월)도 Micro는 동일
  • Small($65/월 총)로 올리면 90개
  • 싱가포르 리전 → 서울에서 ~70ms 레이턴시 (허용 범위)

마이그레이션 이력

Phase 0: 인프라 구성 (2026-03-24~25)

  • kr2 첫 server 구성, Supabase PostgreSQL 연결
  • cert-manager + 와일드카드 인증서 6개 + Reflector
  • Traefik DaemonSet (hostPort 80/443) + Gateway API
  • APISIX replica 1 (SafeLine WAF 전용, Ingress Controller 제거)
  • HAProxy 80/443 → Traefik hostPort 복원
  • Longhorn v1.8.2

Phase 12: kr1 합류 + 서비스 이전 (2026-03-2425)

  • kr1 server로 합류 → 2-server HA 확보
  • 전 서비스 이전 완료 (NocoDB, Gitea, n8n, ArgoCD, Grafana, SearXNG, SafeLine 등)

Phase 3: hp2 합류 (2026-03-25)

  • hp2 agent로 합류 (server 3대 → server 2 + agent 1 구성으로 변경)
  • Supabase 커넥션 절약 (agent는 DB 커넥션 불필요)

Vault jp1 이전 (2026-03-24)

  • jp1 Incus default 프로젝트, vault 컨테이너 (Debian 13)
  • Vault v1.21.4 (raft 스토리지, 스냅샷 복원)
  • vault-mcp-server v0.2.0 (Go 바이너리, systemd, port 8080)
  • K3s vault 네임스페이스 → ExternalName 서비스로 전환

Phase 4: 정리 (2026-03-25)

  • 기존 etcd Incus 컨테이너 폐기 완료
  • 기존 K3s server.bak 삭제 완료

관련 문서

  • infra-hosts — 서버 목록
  • backup — 백업 체계 (etcd → PostgreSQL 전환 후 변경 필요)