91 lines
3.5 KiB
Markdown
91 lines
3.5 KiB
Markdown
---
|
|
title: K3s PostgreSQL 백엔드 이전
|
|
updated: 2026-03-25
|
|
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 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 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 삭제 완료
|
|
|
|
## 관련 문서
|
|
|
|
- [[infra-hosts]] — 서버 목록
|
|
- [[backup]] — 백업 체계 (etcd → PostgreSQL 전환 후 변경 필요)
|