obsidian: 정본 문서에서 히스토리/인시던트 분리 완료

15개 정본 문서에서 날짜별 변경이력, 인시던트 기록, 폐기된 구현 상세를
history/ 디렉토리로 분리. 정본은 현재 상태만 기술하는 백서 형태로 정리.
각 정본에 history 위키링크 추가.

분리된 history 파일 12건:
- apisix git push 500, k3s postgresql migration, apisix→traefik 전환
- netbis DDoS 공격, gitea 이전/분리, usb 2.5g hang + NFS hard mount
- supabase→patroni, apisix etcd 통합/분리, anomaly-detect 재설계
- patroni failover incident, zlambda nixos migration, ops-agents setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kappa
2026-04-10 12:09:21 +09:00
parent 72750cfc9d
commit 2356b86d36
27 changed files with 554 additions and 514 deletions

View File

@@ -24,7 +24,7 @@ tags: [infra, network, kr-zone, openwrt]
## 서울 K3s 클러스터
서울존 3대(kr1, kr2, hp2)를 K3s v1.34.5+k3s1 클러스터로 구성. **kr1/kr2는 control-plane, hp2는 worker(k3s-agent)** — 2026-04-05 hp2가 control-plane에서 worker로 전환됨.
서울존 3대(kr1, kr2, hp2)를 K3s v1.34.5+k3s1 클러스터로 구성. **kr1/kr2는 control-plane, hp2는 worker(k3s-agent)**.
| 노드 | LAN IP | OS |
|------|--------|----|
@@ -34,14 +34,14 @@ tags: [infra, network, kr-zone, openwrt]
주요 네임스페이스 (2026-04-09 라이브): api, apisix, argocd, cert-manager, db, democratic-csi, gitea, juiceshop, kroki, kube-system, logging, longhorn-system, mail, mcp, metallb-system, monitoring, mq, n8n, nfs-provisioner, openmemory, outline, rabbitmq-system, safeline, searxng, sftpgo, sshpiper, teleport, test, tools, vault(빈 ns, 서비스만 잔존)
> anvil/ironclad ns는 삭제됨. system-upgrade ns도 현재 없음. vault ns는 빈 상태로 ClusterIP 서비스(`vault-external`)만 잔존 — 실제 Vault 서버는 jp1 incus 컨테이너로 이전됨 (아래 "서비스 위치" 참조).
> vault ns는 빈 상태로 ClusterIP 서비스(`vault-external`)만 잔존 — 실제 Vault 서버는 jp1 incus 컨테이너 (아래 "서비스 위치" 참조).
게이트웨이: 두 독립 LoadBalancer 병렬 운영 — Traefik (MetalLB VIP 192.168.9.53, 메인 라우팅 14 HTTPRoute + 5 legacy IngressRoute) + APISIX (MetalLB VIP 192.168.9.50, 2026-03-25 축소 이후 `juiceshop.keepanker.cv` 1 route · chaitin-waf SafeLine 통합)
- Traefik DaemonSet, MetalLB LoadBalancer 192.168.9.53 + Gateway API
- APISIX Deployment **replica 2**, MetalLB LoadBalancer 192.168.9.50, SafeLine WAF chaitin-waf 플러그인 연동, Admin API 수동 관리
- APISIX etcd: 통합 etcd 클러스터 사용 (K3s 내 StatefulSet 삭제, 2026-04-06). prefix `/apisix-seoul`
- APISIX etcd: K3s 내부 apisix-etcd StatefulSet 3 replicas, prefix `/apisix`
- CoreDNS hairpin rewrite: traefik.kube-system.svc.cluster.local
- K3s 데이터스토어: kine → HAProxy(192.168.9.1:5432) → Patroni PostgreSQL Leader 자동 감지 (Supabase에서 로컬 이전, 2026-04-05)
- K3s 데이터스토어: kine → HAProxy(192.168.9.1:5432) → Patroni PostgreSQL Leader 자동 감지
트래픽 흐름:
- 일반: 외부 → OpenWrt HAProxy(:80/:443) → MetalLB Traefik(192.168.9.53:80/443) → K3s 서비스
@@ -72,9 +72,9 @@ tags: [infra, network, kr-zone, openwrt]
| vlogs | logging | victoria-logs-single-0.11.31 | v1.49.0 |
| vm-stack | monitoring | victoria-metrics-k8s-stack-0.72.6 | v1.139.0 |
> **주의**: `nfs-provisioner` Helm 릴리스 status=`failed` (revision 2, 2026-04-05). 실제 파드는 정상 Running이라 동작은 영향 없음. `helm history` 확인 후 정리 필요.
> **주의**: `nfs-provisioner` Helm 릴리스 status=`failed` (revision 2). 실제 파드는 정상 Running. `helm history` 확인 후 정리 필요.
>
> Vault Helm 릴리스 제거됨. RabbitMQ Operator는 `rabbitmq-system` ns에서 kubectl apply 직배포 (Helm 미사용).
> RabbitMQ Operator는 `rabbitmq-system` ns에서 kubectl apply 직배포 (Helm 미사용).
### ArgoCD Applications (2026-04-09 라이브)
@@ -86,7 +86,6 @@ tags: [infra, network, kr-zone, openwrt]
| smtp-relay | mail | gitea.inouter.com/kaffa/smtp-relay (path: k8s) |
| vultr-api | api | gitea.inouter.com/kaffa/vultr-api (path: k8s) |
> 이전 등록되어 있던 anvil, ironclad, n8n, nocodb, pgcat, cloud-api-emulator는 모두 ArgoCD에서 제거됨. anvil/ironclad/cloud-api-emulator는 ns 자체가 삭제, n8n은 Helm 릴리스로 전환, nocodb/pgcat은 kubectl 직접 관리로 전환.
### kubectl 직접 관리 (Helm/ArgoCD 미적용)
@@ -172,9 +171,6 @@ db (proxysql, pgcat), kroki, mq (RabbitmqCluster CR), openmemory (mcp/ui/qdrant)
- RUNNING VM: gitea-runner (10.253.103.203, +docker0), juice-shop (10.253.100.202, +docker0), k8s (10.253.103.124, +flannel/cni0)
- STOPPED: baserow (CONTAINER APP, 2026/01/05 마지막 시작), iac-route (CONTAINER, 2026/03/04)
> **vaultwarden 컨테이너 제거됨** (이전 정본에는 있었음). 별도 확인 필요.
>
> 신규 추가된 `vault`, `socks5-proxy`, `netbis-cf-bouncer`, `etcd`(default proj)는 Obsidian의 별도 운영 문서가 아직 없을 수 있음 — 필요 시 `infra/` 하위에 추가.
**monitoring 프로젝트** (2): grafana (10.253.103.199), prometheus (10.253.100.193)
@@ -182,26 +178,18 @@ db (proxysql, pgcat), kroki, mq (RabbitmqCluster CR), openmemory (mcp/ui/qdrant)
**default 프로젝트** (3): brokkr (10.100.3.54), mariadb-2 (10.100.3.64), **postgres-2** (10.100.3.185)
**ops 프로젝트** (1): **heimdall** (10.100.3.108, 2026-04-09 tofu 재생성 — 신규 프로젝트, 구 `default/heimdall (10.100.3.92)` 대체)
> 이전 정본의 `etcd (10.100.3.7)`는 라이브에 존재하지 않음. K3s kine이 Patroni로 이전된 시점(2026-04-05) 전후에 정리된 것으로 추정. **postgres-2**가 새로 추가됨 (Patroni HA 멤버 추정).
>
> 2026-04-09: heimdall을 `kaffa/ops-agents-tofu/heimdall` 모듈로 재생성. 유저 root→kaffa, 프로젝트 default→ops, 메모리/CPU limit 설정 (8GiB/4core). `syn` 과 동일 패턴. IP 변경 (10.100.3.92 → 10.100.3.108).
**ops 프로젝트** (1): **heimdall** (10.100.3.108, tofu 관리 `kaffa/ops-agents-tofu/heimdall`)
### kr2 컨테이너
**default 프로젝트** (2): mariadb-3 (10.100.1.162), **postgres-3** (10.100.1.83)
> 이전 정본의 `etcd (10.100.1.198)`, `cloudflared (10.100.1.95)`는 default에 없음. cloudflared는 **inbest 프로젝트로 이동**(아래). etcd는 제거됨. safeline VM 언급도 더 이상 유효하지 않음 (이미 삭제됨).
**inbest 프로젝트** (7): **cloudflared** (10.100.1.95), mariadb10 (10.100.1.148), nginx (10.100.1.121), php5 (10.100.1.174), php8 (10.100.1.3), phpmyadmin (10.100.1.60), sftp (10.100.1.158)
### hp2 컨테이너
**default 프로젝트** (5): **anomaly-detect** (10.100.2.164, 2026-04-08 신규), jarvis (10.100.2.162), mariadb-1 (10.100.2.234), postgres-1 (10.100.2.5), trader (10.100.2.9)
> 이전 정본의 `etcd (10.100.2.11)`는 라이브에 없음. APISIX etcd가 K3s StatefulSet으로 통합된 시점(2026-04-06) 전후에 정리된 것으로 추정. **anomaly-detect**가 새로 추가됨.
**inbest 프로젝트** (0): 프로젝트만 존재, 인스턴스 없음 (default profile만 사용 중). kr2 inbest와 페어 구성을 고려해 만들어둔 빈 프로젝트로 보임.
## GPU
@@ -264,7 +252,7 @@ Docker: `--runtime=nvidia` 또는 `--gpus all`로 GPU 사용. Podman: CDI 방식
- **K3s datastore**: Incus etcd 3노드 클러스터 (192.168.9.214, 192.168.9.135, 192.168.9.134)
- `/registry/` — K3s 클러스터 백엔드 스토어
- `/patroni/nocodb-cluster` — NocoDB PostgreSQL HA
- **APISIX etcd** (K3s 내부): apisix-etcd StatefulSet **3 replicas** (ClusterIP 10.43.20.100:2379, prefix `/apisix`, 2026-04-04 HA 업그레이드)
- **APISIX etcd** (K3s 내부): apisix-etcd StatefulSet **3 replicas** (ClusterIP 10.43.20.100:2379, prefix `/apisix`)
- **OVN 네트워크**: ovn1 (10.165.246.0/24) — hp2↔kr2 간 오버레이
- **CDN IP 필터**: BunnyCDN + Cloudflare IP만 80/443 허용, 그 외 WAN 차단
- 스크립트: `/etc/cdn-filter-update.sh`
@@ -292,14 +280,9 @@ Docker: `--runtime=nvidia` 또는 `--gpus all`로 GPU 사용. Podman: CDI 방식
- kr2: `/etc/systemd/network/30-usb-2g5.network`
- hp2: `/etc/systemd/network/30-ens2.network`
2026-04-08 hp2 NIC 추가(Realtek RTL8125 PCIe) 및 2.5G LAN 4노드 완성. kr2의 IP는 .201에서 .135로 변경(1G LAN과 옥텟 통일).
USB autosuspend/NFS hang 인시던트 이력: [[../history/2026-04-04-usb-25g-hang|2026-04-04 USB 2.5G hang]]
#### USB 2.5G 안정성 이슈 (2026-04-04 해결)
USB 2.5GbE 어댑터(r8152/cdc_ncm)가 Linux USB autosuspend에 의해 절전 모드 진입 후 드라이버 hang 발생. kr2에서 NFS hard mount가 죽은 2.5G IP로 D-state 누적되어 로드 2000+ 장애.
**해결:**
- USB unbind/bind로 즉시 복구
안정성 대책:
- kr2: GRUB `usbcore.autosuspend=-1`, udev rule `99-usb-ethernet.rules` (scatter-gather off)
- NAS: `/usr/local/etc/rc.d/usb-no-suspend.sh` 스타트업 스크립트
@@ -345,6 +328,8 @@ Xray VLESS+XHTTP 스텔스 구성
| safeline-osaka | 100.100.212.6 | Linode VPS (오사카) | offline 49d (~2026-02-19) | SafeLine WAF 단독 호스트였으나 K3s `safeline` ns로 이전 후 미사용. 토큰/시크릿 미등록 (vault.md 참조). 재기동 또는 폐기 결정 필요 |
| china-ali | 100.67.31.11 | Aliyun VPS (중국) | offline 43d (~2026-02-25) | 용도 불명 — 과거 중국 리전 테스트용 추정. kappa 확인 후 폐기 또는 정식 등록 결정 필요 |
과거 마이그레이션 / 인시던트 이력은 `history/` 참조.
## 개인 워크스테이션
서버가 아닌 kaffa 개인 디바이스(Mac mini / MacBook / iPhone)는 [[workstations]] (`dev/workstations.md`) 참조. 인프라 정본이 아닌 개발 환경 맥락이라 `dev/` 하위에 분리.