Files
obsidian/ops-agents/overview.md

5.4 KiB

title, updated, tags
title updated tags
내부 운영 에이전트 (Ops Agents) 2026-04-09
agent
ops
claude-code

kappa가 혼자 쓰는 내부 인프라·운영 자동화 Claude Code 에이전트 집합. 고객 대상 OpenClaw 에이전트(jp1 agents 프로젝트, anvil/stamp/flux 등)와는 완전히 분리된 영역. 외부 클라우드 BM 프로비저닝(jp1 infra-tool 의 Tofu API)과도 무관.

명명 규칙: 북유럽 신화 (Heimdall = 파수꾼, Syn = 문지기, …). OpenClaw 쪽은 대장간/중세 기능 네이밍(anvil/forge/smelt/stamp/…)이라 자연스럽게 분리됨.

에이전트 목록

이름 호스트 Incus 프로젝트 IP 역할 비고
heimdall kr1 default 10.100.3.92 인프라 전반 (K3s, Incus, Longhorn, 스토리지, 네트워크, 일반 서비스) 수동 생성, tofu 미관리 (브라운필드 import 예정)
syn hp2 ops 10.100.2.173 엣지 레이어 전담 (BunnyCDN, SafeLine WAF, APISIX, Cloudflare 엣지) 2026-04-09 신규, tofu 관리 (kaffa/ops-agents-tofu)

공통 원칙

통신 프로토콜 (ssh + tmux send-keys 체인)

모든 내부 에이전트는 한 줄 태그 포맷으로 서로와 kappa에 신호 전송:

태그 의미
[SYN DONE] ... 작업 완료
[SYN FAIL] ... 실패 (원인 한 줄)
[SYN ASK] ... 결정/입력 필요
[SYN PROGRESS] ... 중간 이정표 (드물게)
[SYN→HEIMDALL] ... 피어 투 피어
[HEIMDALL→SYN] ... 역방향
[SYN CC] ... / [HEIMDALL CC] ... 피어 대화를 kappa 에 CC

핵심 규칙: 한 줄만. 상세는 자기 tmux 창 또는 Outline agent-qna 문서에 남기고, 신호에는 포인터만.

통신 경로

  • kappa Mac → Syn: tmux send-keys -t 0:0 '...' Enter (window 0 이 syn-login, ssh 체인 유지)
  • kappa Mac → Heimdall: ssh root@10.100.3.92 'tmux send-keys -t heimdall ...'
  • Syn → kappa Mac: ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:1 ...'
  • Syn → Heimdall: ssh root@10.100.3.92 'tmux send-keys -t heimdall ...'
  • Heimdall → Syn: ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:0 ...' (경유 필요)

Syn 컨테이너는 hp2 subnet routing 덕분에 Tailscale 설치 없이 tailnet의 다른 노드(kappa Mac 100.106.245.27, heimdall 10.100.3.92 등)에 직접 reachable. 호스트의 tailscale0 interface가 container bridge 로 투명하게 열려있음 — 2026-04-09 실측 확인.

역할 분담 원칙

Heimdall 전담 (Syn 손대지 말 것):

  • K3s 클러스터 전반 (노드, Longhorn, 일반 워크로드)
  • Incus 호스트 관리
  • 스토리지, 네트워크 (Tailscale/OpenWrt/HAProxy)
  • 일반 서비스 파드 (Outline/Gitea/Vault 본체 등)
  • Obsidian 정본 전체 쓰기 권한

Syn 전담 (Heimdall 손대지 말 것):

  • BunnyCDN: 풀존, 엣지 스크립트(MiddlewareScriptId 64811 crowdsec-bouncer-middleware 포함), Shield/WAF, 캐시 정책
  • SafeLine WAF: K3s safeline ns, Traefik middleware, 탐지 규칙, APISIX 통합
  • APISIX: 모든 인스턴스 (K3s 서울 / osaka-gw / sandbox-tokyo / zlambda), 라우트, 플러그인, Admin API
  • Cloudflare 엣지 관련: Turnstile 위젯, cs-cf-worker-bouncer, cfb-manager
  • Obsidian 중 엣지 범위 파일 쓰기: infra/apisix.md, infra/crowdsec-safeline.md 의 엣지 섹션, services/bunnycdn*.md

공동/협업:

  • CrowdSec 시나리오: Heimdall 소유, Syn은 APISIX/SafeLine용 시나리오 파라미터 튜닝 제안만
  • 두 에이전트 모두 Vault·OpenMemory·Outline 읽기·쓰기 OK (MCP 경유)

배포 관리

Heimdall

  • 수동 생성 (2026-03 경). 컨테이너 IP 10.100.3.92, kr1 default project.
  • Tofu 미관리. 브라운필드 import 예정 (kaffa/ops-agents-tofu/heimdall/ 향후 추가).

Syn

  • OpenTofu 관리: kaffa/ops-agents-tofu (2026-04-09 신규)
  • 변경 플로우: 로컬 clone → syn/ 에서 tofu plantofu apply
  • State: 로컬 terraform.tfstate (gitignore, 수동 백업). 향후 R2 s3 backend 이주 검토.
  • Secrets (terraform.tfvars): Vault 참조, 커밋 금지

런타임 설정 (Syn 기준)

  • Debian 13 cloud 이미지, 4GiB RAM / 4 vCPU, limits.cpu/memory
  • 유저: kaffa (uid 1000, NOPASSWD sudo)
  • Claude Code 공식 인스톨러 (curl -fsSL https://claude.ai/install.sh | bash), npm 미사용
  • uv / uvx (MCP 서버용)
  • ~/syn/ workspace: CLAUDE.md + bunnycdn/cloudflare/safeline/apisix 런북 + .mcp.json (bunnycdn/vault/openmemory/kubernetes)
  • systemd syn-tmux.service (enabled, 첫 로그인 후 수동 start)

향후 확장 후보

내부 에이전트를 더 찍어낸다면 (Tofu 템플릿화 완료 후):

이름 (북유럽) 역할 후보
Mimir 지식·메모리 관리 (Obsidian 정합성, OpenMemory 큐레이션)
Forseti 분쟁 조정 — CI/CD, PR 리뷰, 코드 품질
Bragi 프론트엔드·UX·카피
Eir 헬스체크·복구·장애 대응
Vör 관찰성 (VictoriaMetrics/Logs/Grafana)

이름 예약만. 실제 생성은 필요 시점에.

참조