마이크로서비스를 쿠버네티스에 올려 본다 — 무엇을 쪼개고, 왜 git 으로 배포하나
링크 미리보기 카드를 만드는 작은 서비스를 마이크로서비스로 쪼개 쿠버네티스에 올린다. 배포는 kubectl 이 아니라 git 커밋으로 한다. 아홉 편에 걸쳐 RabbitMQ·Fluentd·OpenSearch 까지 붙여 볼 연재의 첫 글.
링크 미리보기 카드를 만드는 작은 서비스를 마이크로서비스로 쪼개 쿠버네티스에 올린다. 배포는 kubectl 이 아니라 git 커밋으로 한다. 아홉 편에 걸쳐 RabbitMQ·Fluentd·OpenSearch 까지 붙여 볼 연재의 첫 글.
대화가 끝나면 리셋되는 어시스턴트와 달리 Hermes 는 기억을 네 곳에 나눠 쌓고, 대화에서 배운 절차를 스킬로 남긴다. 무엇이 어디에 쌓이는지, 잘못 배운 것을 어떻게 막고 되돌리는지, 관리자가 확인할 명령어까지.
git 에 YAML 을 올려 두면 ArgoCD 가 클러스터를 거기에 맞춘다. 맥에서는 argocd.localhost 가 해석되지 않아 UI 를 경로로 열어야 하고, immutable 필드를 커밋하면 동기화가 무한 재시도에 빠진다. 둘 다 직접 겪은 대로 정리했다.
StatefulSet 을 5개에서 3개로 줄이면 4번·3번이 사라진다. 이 방향을 뒤집는 설정은 없다. podManagementPolicy 는 immutable 이고 pod-deletion-cost 도 안 먹는다. 대신 ordinals.start 로 번호 범위를 옮기면 낮은 번호를 없앨 수 있다.
쿠버네티스 파드는 재시작하면 안에 쓴 파일이 전부 사라진다. PVC 로 저장소를 빌리고 StatefulSet 으로 파드에 고정된 이름을 주면 남는다. PVC 가 Pending 에서 안 넘어가는 이유(waiting for first consumer)도 함께 짚는다.
kind 실습 클러스터의 네트워크 플러그인을 Calico 로 교체한다. Calico 문서가 알려 주는 기본 IP 풀 192.168.0.0/16 을 그대로 쓰면 가정용 공유기 대역과 겹친다. 요즘 kindnet 은 NetworkPolicy 를 실제로 막는다는 것도 함께 확인한다.
맥북에 kind 로 3노드 쿠버네티스를 올린다. ingress-nginx 의 kind 용 매니페스트는 hostPort 로 80 을 여는데, 컨트롤러가 워커 노드에 뜨면 localhost 로 아무것도 안 잡힌다. kubectl 버전 스큐도 함께 정리한다.
config.yaml 의 mcp_servers 블록에 서버 두 개를 붙인다. 사내 Confluence 는 Atlassian 공식 원격 MCP 로 안 되고(Cloud 전용), Server/DC 는 CONFLUENCE_PERSONAL_TOKEN 을 쓰는 커뮤니티 서버로 붙인다. READ_ONLY_MODE 를 빼면 쓰기 도구 15개가 그대로 열린다.
Jenkins도 Ansible도 클라우드 서버도 전부 SSH 로 붙는다. 키 한 쌍이 어떻게 비밀번호를 대신하는지, 키를 만들어 서버에 등록하는 순서, 그리고 안 붙을 때 어디를 보는지까지.
맥에서 개발 환경을 잡을 때 반복해서 만나는 두 가지 — Java 를 어떻게 깔지, 그리고 OS 업데이트 후 git·gcc 가 갑자기 안 되는 xcrun 오류. 원인과 해결을 짧게 정리한다.