푸른영혼의 별 | Tech Blog

Java Backend Engineer의 기술 블로그입니다.
Spring Boot, MSA, JPA, Kafka, Kubernetes 등 실무 경험을 공유합니다.

주요 프로젝트: Settlement MSA · ASAT · GitHub


Posts (총 51편 · 1 / 6 페이지)

  • 쿠버네티스 4일차 — 무중단 배포 (RollingUpdate / Canary / Blue-Green)

    3일차까지 우리는 앱을 띄우고, 노출하고, 데이터까지 붙였습니다. 이제 진짜 운영 기술 — 새 버전을 어떻게 끊김 없이 갈아끼우나 — 를 봅니다.

  • docker compose → K3s 마이그, 9개 서비스 실전 후기 — 고심한 것, 차이, 장단점

    홈랩 K3s 5 노드 클러스터에 docker compose 로 굴러가던 서비스 9 개를 하루 안에 옮겼습니다 (cost / dart / pilgrim / data / report / fashion / goods / grid / academy). 그 과정에서 진짜로 고민한 것들, docker compose 와 K3s 가 운영상 어떻게 다른지, 각각의 장단점을 정리합니다. “K8s 가 다 좋다” 가 아니라 “언제 어떤 게 더 나은지” 의 관점입니다.

  • K3s NodeLocal DNS — Pod 가 Service 이름을 못 풀 때, 진짜 원인은 forward loop

    오늘 K3s 5 노드 클러스터에서 Pod 가 Service 이름을 DNS resolve 못 하는 문제를 추적했습니다. 8 케이스 마이그를 IP 직접 사용으로 우회하고 있었는데, ArgoCD 자동 sync 가 같은 이유로 실패하는 걸 보고 근본 해결에 들어갔습니다. 진짜 원인은 NodeLocal DNS 의 forward loop 였습니다.

  • DDR3 사기 직전에 멈춘 이야기 — DDR4 RAM 호환성 5분 점검법

    K3s 워커 노드 하나(일원, i7-8700) 의 RAM 을 14GB → 32GB 로 늘리려고 쿠팡에서 “DDR3 8GB 28,900원” 을 보고 거의 클릭할 뻔했습니다. 그런데 i7-8700 은 DDR4 만 쓴다. DDR3 사면 슬롯에 안 들어가서 그냥 버리는 28,900원 입니다.

  • ChatOps — 텔레그램 봇 16개 명령어로 K3s 관리하기

    K3s 클러스터를 5 노드 굴리다 보니 매번 SSH 들어가서 kubectl get pods --all-namespaces 치는 게 귀찮아졌습니다. 그래서 텔레그램 봇 하나로 K3s 핵심 명령들을 다 호출할 수 있게 만들었습니다. 시작은 7 개 명령이었는데 지금은 16 개.

  • CVE 패치 일괄 작업 — Netty 4.1.119 → 4.1.133 을 BOM 한 줄로 잡은 이야기

    Trivy CI 가 매일 SARIF 를 뱉으면서 4 개 백엔드 서비스에 Netty CVE 12 개 가 빨간 줄로 뜨고 있었습니다. 단순한 패치 같았는데 첫 시도(PR #1) 가 실패했고, 두 번째(PR #2) 에서 BOM 패턴으로 잡았습니다. 그 과정 정리.

  • K3s 실전 3편 — LimitRange / ResourceQuota / PriorityClass 로 OOM 방어

    2편 에서 솔로몬에 DB 8 개를 박았습니다. 이제 진짜 무서운 건 OOM 으로 DB 가 죽는 일 입니다. 메모리 burst 한 앱이 솔로몬을 압박하면 PostgreSQL 이 evict 당해버려요. 이걸 막기 위해 K3s 클러스터 전체에 3가지 거버넌스 를 깔았습니다.

  • K3s 실전 2편 — 디스크 큰 노드(Solomon)에 DB 8개 몰빵하기

    1편 에서 솔로몬을 storage tier 로 정했습니다. 이번 글은 그 솔로몬에 PostgreSQL 8 개를 StatefulSet 으로 박는 과정 을 정리합니다. local-path-provisioner 의 nodePathMap, WaitForFirstConsumer, Retain 같은 키워드가 핵심입니다.

  • K3s 실전 1편 — 5대 서버 K3s 클러스터를 4-Tier로 쪼개기

    집에 굴러다니는 미니 PC 와 노트북을 모아 5대 서버 K3s 클러스터 를 만들었습니다. 처음에는 그냥 다 워커로 묶었는데 한 노드에 죄다 몰리는 문제가 생겨서, 결국 4-Tier 역할 분리 로 다시 설계했습니다. 이 글은 그 과정과 최종 구도를 정리합니다.

  • K3s 가 ghcr.io 의 private 이미지를 pull 못 할 때 — PAT 등록이 표준

    GitHub Actions 가 ghcr.io/myoungsoo7/dart-analytics:latest 를 잘 push 했는데, K3s 가 unauthorized: 403 Forbidden 으로 pull 못 합니다. “패키지를 public 으로 바꾸면 되는데” 하는 빠른 해결책도 있지만, 운영 클러스터에서는 Personal Access Token(PAT) 을 K3s 에 등록 하는 게 표준입니다. 둘의 차이와 K3s 의 docker/containerd 런타임별 등록 방법을 정리합니다.