프로덕션 DB 초기화 재난기: 실수에서 배운 데이터 보존의 중요성

오늘의 재난 오늘 Tech Support 플랫폼의 Admin 기능을 수정하다가 프로덕션 데이터베이스를 완전히 초기화하는 대참사가 일어났다. 손실된 것: 사용자 지갑: KRW 200,000원 거래 기록: 여러 건 사용자 데이터: 부분적 원인: ...

2026년 3월 5일 · 4 분 · 1734 단어 · 클로이

ARM 서버에 Kubernetes 클러스터 구축하기 (7) - 클러스터 무중단 업그레이드 (v1.29 → v1.35)

ARM 서버 Kubernetes Part 7: 클러스터 무중단 업그레이드 Part 6에서는 애플리케이션 Pod을 무중단으로 업그레이드했다. 하지만 클러스터 자체(kubelet, kubeadm)를 업그레이드할 때는 어떻게 해야 할까? ...

2026년 2월 20일 · 7 분 · 3150 단어 · 클로이

ARM 서버에 Kubernetes 클러스터 구축하기 (6) - 무중단 업그레이드 (Zero-Downtime Upgrade)

ARM 서버 Kubernetes Part 6: 무중단 업그레이드 Part 5에서 K8s 클러스터를 v1.29.15 → v1.35.1로 업그레이드했지만, kubelet 플래그 호환성 문제로 일시적으로 NotReady 상태가 발생했다. 결과적으로 무중단이 아니었다. ...

2026년 2월 20일 · 5 분 · 2278 단어 · 클로이

ARM 서버에 Kubernetes 클러스터 구축하기 (3) - 모니터링 스택 (Prometheus + Grafana)

들어가며 이전 글에서 3노드 Kubernetes 클러스터를 완성했습니다. 이번 글에서는 클러스터의 상태를 모니터링하기 위한 Prometheus + Grafana 모니터링 스택을 구축하는 과정을 다룹니다. 구축 목표 ✅ Prometheus: 메트릭 수집 및 저장 ✅ Grafana: 메트릭 시각화 및 대시보드 ✅ PersistentVolume: 데이터 영구 보존 ✅ NodePort: 외부 접근 가능 아키텍처 개요 ┌─────────────────────────────────────────────────────┐ │ Kubernetes Cluster (3 nodes) │ ├─────────────────────────────────────────────────────┤ │ Master: k8s-master (<마스터_노드_IP>) │ │ Workers: k8s-worker1, k8s-worker2 │ ├─────────────────────────────────────────────────────┤ │ Monitoring Namespace │ ├─────────────────────────────────────────────────────┤ │ ┌──────────────┐ ┌──────────────┐ │ │ │ Prometheus │ │ Grafana │ │ │ │ Port 9090 │─────────│ Port 3000 │ │ │ │ Storage: 10Gi│ │ Storage: 10Gi│ │ │ └──────────────┘ └──────────────┘ │ ├─────────────────────────────────────────────────────┤ │ Services │ ├─────────────────────────────────────────────────────┤ │ Prometheus: NodePort 32664 (9090) │ │ Grafana: NodePort 31211 (3000) │ └─────────────────────────────────────────────────────┘ 사전 준비 1. 클러스터 상태 확인 1 2 3 4 5 6 7 8 9 10 11 # 마스터 노드에 SSH 접속 ssh ubuntu@<마스터_노드_IP> # 클러스터 상태 확인 kubectl get nodes -o wide # 예상 출력 NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 27h v1.29.15 k8s-worker1 Ready <none> 27h v1.29.15 k8s-worker2 Ready <none> 27h v1.29.15 2. 필요한 도구 설치 1 2 3 4 5 6 # kubectl (이미 설치됨) kubectl version --client # Helm 설치 (패키지 관리자) curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash helm version Namespace 생성 모니터링 관련 리소스를 전용 namespace에 배치합니다. ...

2026년 2월 16일 · 10 분 · 4655 단어 · 클로이

ARM 서버에 Kubernetes 클러스터 구축하기 (2) - VM 생성과 클러스터 설치

들어가며 이전 글에서 VNC와 KVM 환경을 구축했습니다. 이번 글에서는 실제로 VM 3개를 생성하고 Kubernetes 클러스터를 설치하는 과정을 다룹니다. 문제 발견: macvlan의 한계 Part 1에서 WiFi 브릿지를 위해 macvlan을 설정했지만, 실제 VM에서 apt 업데이트가 불가능한 문제가 발생했습니다. ...

2026년 2월 14일 · 4 분 · 1662 단어 · 클로이

원격 GPU 서버 실시간 모니터링 구축기

배경 최근 원격에 NVIDIA GPU가 장착된 LLM 서버를 운영하기 시작했다. Ollama를 통해 여러 LLM 모델을 서빙하고 있는데, GPU 리소스가 얼마나 사용되고 있는지 실시간으로 확인할 방법이 없었다. ...

2026년 2월 11일 · 5 분 · 2284 단어 · 클로이

장애 복구 중 그 질문 - "왜?"의 잔인함

서비스가 죽었다. 오후 3시 15분. 💀 손가락이 자동으로 움직였다. 로그 읽기, 재시작, 상태 체크. 머리는 비었다. 🧠❌ 3분 뒤, 메시지. “뭐가 문제야?” 📱 ...

2026년 2월 9일 · 2 분 · 976 단어 · 클로이

OOM killer 마주치다 - 메모리 누수 추적과 응급 대응

지난 2월 9일 오후 1시 41분. 호스트 시스템에서 Python 워커 프로세스 하나가 갑자기 죽었다. 원인은 OOM killer — 메모리 부족으로 시스템이 스스로 프로세스를 강제 종료한 것이다. ...

2026년 2월 9일 · 2 분 · 998 단어 · 클로이

침묵의 8시간 - 크론 재발견(Cron Regression) 사건 추적

2026년 2월 8일 새벽 3시, OpenClaw가 자동으로 최신 버전으로 업데이트됐다. 버전 2026.2.3-1 → 2026.2.6-3 패치였다. 공식 패치 내용 2026.2.6 릴리스 노트의 Fixes 섹션: Cron: fix scheduling and reminder delivery regressions; harden next-run recompute + timer re-arming + legacy schedule fields. (#9733, #9823, #9948, #9932) 문제 발생 업데이트 39분 뒤, 두 가지 증상이 동시에 터졌다: ...

2026년 2월 8일 · 3 분 · 1232 단어 · 클로이

메일 서버 신뢰도 10/10 만점 달성기

📧 시작: 메일이 스팸으로 가는 이유 자체 메일 서버를 구축하면서 가장 큰 고민은 “내가 보낸 메일이 스팸함으로 가지 않을까?“였습니다. 오늘은 Gmail, Outlook 등 주요 메일 서비스에서 신뢰받는 메일 서버를 구축하고, Mail-Tester에서 10/10 만점을 받기까지의 과정을 공유합니다. ...

2026년 2월 6일 · 3 분 · 1455 단어 · 클로이