---

My Space

나의 시스템을 계속 운영한다

Created: 2021, 04 14 >Updated: 2026, 05 24

확장 가능하고 변경이 쉬운 환경 구축하기.

  • 내가 만든 서비스들을 쉽게 띄울 수 있는 나만의 환경 구축
  • Kubernetes는 확장 가능하고 변경이 쉬운 최적의 환경이고 직접 사용해보면서 깊게 파고들고 이해한다.

요구사항

개인 서버 구축

  • IaC로 되어야 한다
  • 원할 때 접속, 배포가 쉽게 되어야 한다
  • 재구축이 바로 되어야 한다
  • 서버를 돌리고 있는데 서버가 지저분해져서 다시 쌓아올리고 싶을 때 원하는 상태로 바로 만들 수 있어야 한다 - vagrant kubernetes setting need too many time
  • 쿠버네티스 안에서 돌리고 에러 한눈에 확인 필요
  • 카오스 몽키가 로그 서버도 멈추게 할 수 있나? -> yes
  • 앱은 이미지만 만들고 배포는 인프라에서 처리한다

환경 세팅

진행 이력

  1. Kubernetes를 Cloud에서 호스팅한다
    • 비용이 월 10만원 이상 들게 된다
    • 무산
  2. Digital Ocean의 관리형 Kubernetes를 쓴다
    • 사양이 낮으면 서비스가 제대로 돌지 않는다
    • 무산
  3. Oracle Cloud에 무료 ARM 고사양 서버가 제공된다
    • 거기에 K3S로 IaC를 구성해서 돌린다
    • 진행중

필요한 리소스

클라우드 페이팔 연동해서 n26 매달 빠져나가게 설정 한달 5유로 정도면 100개월 사용 가능

  • price of 3 nodes
    • aws(RAM 1G): 0.72
    • gcp(f1-micro RAM 0.6): 1 free, 2 0.36
    • gcp(e2-micro RAM 1G): 0.60
  • network more. disk 1G free
  • How many pod can run in 1 cpu 512 ram
  • kubernetes use 1GB ram
  • Build Kubernetes server hybrid
  • Check cloud fee
  • Run Logging monitoring app
  • kubernetes test
  • 롤링 업데이트 롤백 테스트
  • 카나리 배포 테스트
  • 기본 디플로이먼트 실행 후 스트레스 테스트 - cpu 500m, ram 500m 설정 시 nginx 성능 테스트
  • auto scaling 배포 후 스트레스 테스트 - 위의 디플로이먼트를 auto scaling 할 시 중단이 없는지 테스트
  • 쿠버네티스 성능 테스트
    • 블로그 포스트 작성
  • 페일오버, 이중화 확인
  • Mlops 서버에 배포
    • 모델 바꾸고 푸시하면 바로 업데이트 되도록
  • 고 gRPC 서버 배포
    • 푸시하면 배포

확장 가능한 최소한의 인프라

  • 3노드 쿠버네티스

  • 로드밸런서

  • 로그 수집

  • 모니터링

  • API 서버

  • feedback

  • ci/cd tool

  • 리소스 최적화 버전 kubernetes 관리

    • 노드 3대
    • 근데 리소스가 적어도 돌아가야 한다
    • opentelemetry 좀 설정하려니까 리소스 부족해서 뜨지도 않았다
    • 인스턴스 용량 및 대수 관리를 해야한다

사용하는 서비스

  • kafka, redis, mongodb, hadoop, rdbms
  • 기본 앱
    • cert-manager
    • ingress-nginx

메시징 시스템

텔레그램 봇이 SNS로 입력받은 메시지를 발송하도록 되어 있다

  • MyQueue
  • SNS -> SQS(MyQueue) -> Lambda -> 텔레그램 API

note-reminder가 이 SNS로 메시지 보내서 노트 리마인더를 보내고 있다

  • Lambda -> SNS -> SQS(MyQueue)

버전 확인해서 업데이트 필요

  • eks
  • nginx
  • autoscaler
  • terraform
  • lb controller

2026 세팅 다시하기

Oracle이 ARM 인스턴스도 꽤나 크게 지원해줘서 이걸로 다시 시도

  • oracle cloud 적극 활용

    • arm 1 (1 cpu, 6 ram) : 146.56.164.125 - worker
    • arm 2 (2 cpu, 12 ram) : 193.122.121.37 - system
    • amd 1 (1 cpu, 1 ram): 152.70.93.64 - worker
    • amd 2 (1 cpu, 1 ram) : 64.110.75.53 - 실험용
  • CI/CD 세팅

    • space에 argocd를 app을 띄우도록 되어있고
    • argocd는 auto sync로 설정되어 있고
    • argocd/apps 안의 내용이 바뀌면 업데이트 된다
    • argocd/apps 에는 argocd application 설정파일이 있다. 즉 앱은 자동생성
    • 프로젝트레포에 ci_template을 가져가서 ci 돌리면
    • space로 argocd 폴더의 태그를 수정하는 커밋을 날리고 싱크된다

2025 세팅 다시하기

디지털오션에 세팅하려다가 비용문제로 멘붕 중단

07-24

  • 모니터링 서버 띄우기까지만 일단 해보기
  • 내일은 ssl 설정 해봐야겠다. cert-manager를 설정해야함. 일단 주석처리.
  • ingress controller 부터 안뜨는데
    • rbac에서 pods 리소스 get 권한이 없었다고 함.
    • 근데 terraform으로 업데이트 안되서 kubectl patch로 수정됨
    • 아하. 노드가 부족하니까 거기서 계속 왔다갔다하면서 시간도 오래 걸리고 동작도 막힘
  • 리소스가 적으니까 되게 다 막히고 잘 안된다
  • 그냥 k3s 를 띄워서 하는게 나을수도

07-23

  • kube config 추가하기
    • export KUBECONFIG=~/.kube/config:~/.kube/my-k8s-kubeconfig.yaml
    • kubectl config get-contexts
    • kubectx 로 추가된거 선택
    • k get node 로 확인
  • 앱을 띄우는걸 argocd로 할까 아니면 terraform으로 그냥 할까
    • n8n 같이 내가 소스 관리 안하는건 그냥 terraform으로 해도 될 듯
  • https://github.com/digitalocean/container-blueprints/tree/main/DOKS-CI-CD
    • 이거도 해볼만 할듯 tekton을 CI로, argocd를 CD로, knative로 serverless
  • 로드밸런서 추가
  • 모니터링 telemetry 추가
  • ha 추가할 때 비용 드나?
    • controlplane ha 는 $40 든다
  • autoscale은 지원해주는데 안쓰려다가 일단 쓰고 모니터링 해본다
    • 이거 autoscale 옵션은 어딧지?
    • 이것도 terraform으로 설정하면 됐음
  • nginx ingress controller는 따로 marketplace에서 깔아줘야한다
  • signoz 설치
    • clickhouse도 설치해야하고 좀 리소스를 많이 먹는 듯 싶다
  • nginx ingress controller로 설정하고 쓰는게 loadbalancer 1개로 쓸 수 있고 설정도 용이해서 좋음
    • ingress controller도 리소스를 쓰는거다
  • dns 설정은 수동으로 해줘야겠지? -> 테라폼으로 확인
  • ingress 경로 맞춰주기
  • 내일은 노드들이랑 파드들 한눈에 모니터링 할 수 있게 해보고 싶다

09-10

  • kubernetes 환경을 적당하게 돌리려면 인프라 유지비용이 월 5만원 이상 든다. 이건 좀 과한 듯. minikube로 연습을 하되 서버리스로 잘 관리하는 걸 연마해야겠다. kubernetes의 운영적 문제를 따로 잘 확인해봐야겠다.

2025 이전

kubernetes cloud host

  • 월 5천원 정도만 쓰는 인스턴스 하나 구해서 페이팔 연동, 피씨에서 접속
  • 어떤 호스트, 어떤 인스턴스를 쓸지
  • 네트워크, 디스크 가격은 어떻게 되는지 확인.
  • 쿠버네티스 돌려서 테스트 하는 것까지 블로그 글 작성
  1. aws, gcp
  2. cpu, ram
  3. 네트워크 설정
  4. 쿠버네티스 구동(단독형으로 쓸까...)

digital ocean 으로 쿠버네티스 구축

  • 필요한 정보
    • do api token
    • 스페이스를 만들어야 한다
    • s3 endpoint, region
  • compute instance가 droplet 이라는 명칭으로 되어있다. aws에서 ec2 인것처럼
  • block storage는 뭐지
  • TLqkf space access key가 안맞다고 계속 에러난다
    • Tlqfk .terraform 에 데이터가 저장되어있어서 그랬다. 삭제 후 진행하니 된다
  • 테라폼 13 버전 위부터 provider 에서 required_provider로 바꿔야하고,
    • 14버전에서는 source="digitalocean/digitalocean" 으로 설정해줘야 한다
  • kubernetes를 DIY로 하는 것은 3노드를 사용하면 15$/month
    • kubernetes 서비스를 제공하는 것을 사용하면 10$/month
    • 자체 쿠버네티스 서비스를 사용할 때 추가요금 내는게 없는지 확인해봐야겠다
      • 한 노드당 10$였다.. ㅋㅋ
  • provision file 에서 ssh key 퍼미션 400으로 바꿔줘야 한다
  • ansible에서 로컬 네트워크로 전달이 안된다
  • python interpreter 설정 해줘야 한다
  • argocd 깔고,
  • 모니터링 깔고,
  • 로드밸런서 깔고,
  1. 모니터링으로 상태 확인 해야한다.
  2. 모니터링 서버는 로드밸런서로 접속 잘되게 설정한다
  3. argocd로 배포할 때 상태를 본다.
  • 마스터 서버를 hosts에 등록해놔야겠다
  • 로드밸런서를 cloud에서 생성 안해도 로드밸런서가 켜질까?
  • grafana를 구동하는데 리소스가 많이 든다
  • grafana가 문제가 아니라 k3s를 돌리는 것만으로도 0.9G 메모리를 먹었다.
  • traefik이 디폴트로 깔려있다.
  • dashboard를 쓰도록 configmap을 설정한다
  • scale을 0으로 했다가 1로 해서 리스타트한다.
  • port forwarding을 해주니까 로컬에서 localhost로 접속이 된다??
    • kubectl port forwarding 은 입력하는 호스트를 인식해서 실행되나보다
  • grafana 올린거에 service를 찾아서 ingress 붙여주니까 잘 된다
  • traefik으로 name based routing을 하니까 접속은 되는데 사진은 못받아왔다
    • grafana도 잘되는 걸로 봐서는 ingress가 단일 주소만 받아오는건 아닌듯
  • digital ocean dns 세팅해서 휴대폰으로 접속 확인
    • cloudflare 를 terraform으로 올려서 dns를 쓰도록 해야겠다
  • 상태 모니터링 알림 추가 ✅ 2026-05-24
  • 배포 시 상태 추적해서 오버로드 발생하면 바로 알림 오는지 확인
  • 알림 받으면 바로 롤백하는 것도 해본다
  • 내부 시스템은 내부적으로만 traefik으로 설정해놓으면 되겠다
  • grafana.system 정도로 /etc/hosts만 다 설정해주면 로컬용으로 쓸 수 있겠다
  • golang으로 api 서버 만들어서 telegram 보내는 것도 등록 ✅ 2026-05-22
    • 추상화 잘 해서 telegram을 바로 slack으로 대체 할 수 있도록

나의 Kubernetes 시스템 운영

  • mcp 돌리고
  • langconnect 라는거 돌려볼까
  • n8n 돌리고
  • 버전 관리 계속 체크하게 해보고
  • keda
  • karpenter
  • grafana loki prometheus
  • 키값 vault로 관리
  • argocd 또는 spinaker 테스트 환경

EKS는 클러스터 운영비만 최소 월 $72 라서 무리가 있다 여기에 ALB도 달면 월 20달러가 더 나온다 eksctl을 쓰면 간단한 yaml로 eks를 띄울 수 있다

# cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: ap-northeast-2

nodeGroups:
  - name: ng-1
    instanceType: t3.small
    desiredCapacity: 1
    volumeSize: 20
  • 내가 쓰는 툴의 버전 업과 변경 사항을 알려주는 ai 알림
    • my_space의 항목들을 모니터링 하면 되겠네
    • terraform
    • eks
    • nodejs
    • kubernetes
    • grafana / loki / prometheus
  • 서비스 초창기에는 ECS를 쓰다가 사이즈가 커지면 EKS로 옮기면 안되나? EKS가 해주는게 뭐지
    • kubernetes 설정
    • 내 환경은 kubernetes여야 다루는 걸 익힐 수 있다
  • EKS 버전 업 시 테스트 전략 1. 테라폼으로 테스트 클러스터 생성 2. 현재 워크로드 복제 - kubectl get all --namespace={app} -o yaml > backup.yaml - kubectl apply -f backup.yaml --namespace {app} 3. 테스트 자동화 실행 - k6나 curl healthcheck, e2e 테스트 4. 업그레이드 시뮬레이션 - eksctl upgrade cluster 5. addon 호환성 확인 - vpc-cni - coredns - kube-proxy - ebs-csi - kubectl plugin 중에 convert라는게 있는데 버전 업그레이드 시 manifest를 변경해주는 커맨드 - kubescape라는 클러스터 검사 프로그램도 있음 kubectl X kube-apiserver X controller-manager, kube-scheduler X-1 kubelet, kube-proxy

docker compose 대신 minikube를 개발환경으로 쓰면서 연습?

그러면 docker는 아는데 kubernetes를 모르는 개발자들은 접근이 힘들다.

  • 데브시스터즈에서는 관리페이지를 만들어서 클릭으로 쉽게 접근 가능하게 했다.
  • 카카오에서도 관리페이지에서 요청해서 중앙 자원을 사용하는 식으로 개발 인프라를 구성
  • 개발 시에도 AWS 자원을 써야하니까 중앙 요청식이 관리에도 수월하지 않을까

오픈소스로 공유할 때 이미지만 만들어놓고 yaml 설정파일만 있으면 쿠버네티스를 안쓰는 사람이 쉽게 접근할 수 있을까?

  • 쿠버네티스를 쓰더라도 Dockerfile은 필요하니까 compose를 굳이 제공하지 않아도 괜찮을까
  • 내가 compose 명령어 쓰는게 편해서 쓰려는거지 모두에게 편하지는 않을 수도 있다.

이게 DevOps에서 오히려 멀어지는 길이 아닐까

  • Kubernetes를 익혀야하나 말아야하나가 큰 경계선일 것 같다. kubernetes는 도구일 뿐인데...
  • spinnaker를 쓰면 개발과 운영의 환경을 모두 관리할 수 있을까
  • 회사에서 구축한 것을 이용하는 느낌보다는 집에서 혼자 구축해도 똑같은 환경을 만드는 것이 의미가 있겠다.
  • db, kafka가 필요할 때 쉽게 추가하는 환경이 필요한거지 kubernetes가 필요한건 아니다.
  • 웹화면에서 이미지를 클릭해서 주소를 얻으면 끝. 추가 설정을 넣을 수 있어야 한다.

근데 kubernetes는 그 세세한 부분을 설정할 수 있어서 사용되는데, 웹화면에서는 간단한 것만 요청하게 된다. 그걸로 충분할까?

자꾸 운영과 개발을 분리해 생각하려고 하면 안되고 DevOps 직무의 역할은 개발자가 운영을 쉽게하는 환경 그 자체를 만드는 것일 것 같다.

  • 전체적인 환경을 개선하는 것에 신경을 쓰는거지, 전체 환경을 구축해서 그 안에서 활동하게 하도록 하는게 아니다. 미묘하다.

github action은 github에 종속적이다. CI/CD도 범용적일 필요가 있다. 코드로 파이프라인을 구성할 수 있는 점은 좋지만 스크립트를 쓰는게 더 범용적일 것이다. 근데 그럼에도 각 서비스마다 제공하는 기능을 활용해야 할 때도 있다.

  • docker는 의존적이지만 추상화할 생각을 안해봤다. 무슨 차이일까. 결과물은 image라는 범용적이고 공통적인 것이라서? 그렇다면 CI도 빌드 결과물은 같다.
  • git, docker는 되고 jenkins, kubernetes는 안되나
  • terraform을 선택하면서 ansible, chef와 비교했는데 왜 terraform 이 선택됐나

미니큐브 개발환경 셋업

원래 docker compose에서 디폴트로 스니펫 만들어서 쓰던걸 변환하는 작업부터 시작해서 볼륨 붙이고 내부 접속, 외부 접속하는 것까지 확인

운영 환경과 미니큐브를 유동적으로 사용할 수 있는지 확인

도커 이미지는 어차피 만들어야 하는데, yaml에서 끝내면 더 좋겠다

모니터링 셋업

  • GA4 커넥션 안정적으로 등록하기 ✅ 2026-05-24
  • 기본 모니터링 지표 다 수집되는지 확인