--- title: K3s PostgreSQL 백엔드 이전 updated: 2026-03-26 status: 완료 tags: [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 LoadBalancer 192.168.9.53) + APISIX (SafeLine WAF 전용, LB 192.168.9.50) | | LB | MetalLB L2 (192.168.9.50-59), K3s ServiceLB 비활성화 | | 스토리지 | Longhorn v1.8.2 | | 인증서 | cert-manager + Google Trust Services (와일드카드 8개, Reflector) | | disable | traefik (Helm 별도 설치), servicelb (MetalLB 사용) | ## 장애 시나리오 | 장애 | 영향 | 복구 | |------|------|------| | 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 1~2: kr1 합류 + 서비스 이전 ✅ (2026-03-24~25) - 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 삭제 완료 ### Phase 5: MetalLB 도입 + 네임스페이스 정리 ✅ (2026-03-26) - MetalLB L2 도입 (192.168.9.50-59), K3s ServiceLB 비활성화 - NodePort 전면 제거 → LoadBalancer 전환 (APISIX .50, sshpiper .51, Teleport .52, Traefik .53) - Traefik: hostPort 80/443 → LoadBalancer 192.168.9.53 - HAProxy 백엔드: 3노드 roundrobin → MetalLB IP 단일 엔드포인트 - k3s.inouter.com DNS: 3노드 A 레코드 → 192.168.9.53 단일 - sshpiper 설치 (SSH 리버스 프록시, Pipe CRD) - Teleport 설치 + relay4wd APISIX stream 포워딩 (443→8443→192.168.9.52:443) - ironclad/anvil 네임스페이스 삭제 (오사카에서 서빙) - api 네임스페이스 신설 (namecheap-api, vultr-api, *.api.inouter.com) - mcp 네임스페이스 신설 (bunnycdn-mcp, kaniko 빌드, bunny.mcp.inouter.com) - 신규 인증서: *.api.inouter.com, *.mcp.inouter.com ## 현재 네임스페이스 구조 | Namespace | 서비스 | 비고 | |-----------|--------|------| | kube-system | Traefik (LB .53) | 메인 라우팅 | | apisix | APISIX (LB .50) | SafeLine WAF 전용 | | sshpiper | sshpiper (LB .51) | SSH 리버스 프록시 | | teleport | Teleport (LB .52) | 접근 관리 | | metallb-system | MetalLB | L2 LB | | cert-manager | cert-manager | 인증서 (와일드카드 8개) | | argocd | ArgoCD | GitOps | | gitea | Gitea + PostgreSQL + Valkey | Git | | api | namecheap-api, vultr-api | API 서비스 | | mcp | bunnycdn-mcp | MCP 서버 | | tools | cfb-manager, nocodb | 도구 | | monitoring | VictoriaMetrics + Grafana | 모니터링 | | longhorn-system | Longhorn | 스토리지 | | safeline | SafeLine WAF | 보안 | | openmemory | OpenMemory MCP + Qdrant | 메모리 | | vault | Vault (ExternalName → jp1) | 시크릿 | | searxng | SearXNG | 검색 | | n8n | n8n | 자동화 | | kroki | Kroki | 다이어그램 | ## 관련 문서 - [[infra-hosts]] — 서버 목록 - [[metallb]] — MetalLB 설정 및 IP 할당 - [[teleport]] — Teleport 접근 관리 - [[sshpiper]] — SSH 리버스 프록시 - [[gateway-api]] — Traefik Gateway API - [[apisix]] — APISIX 설정 - [[backup]] — 백업 체계