본문 바로가기
정보보안

도커,쿠버 클러스터 오토스케일링, 모니터링 구축

by puy0 2026. 2. 1.

해당 포스트 이후 아래 링크로 이어집니다
https://pushvalue.tistory.com/105

 

그라파나에서 스케일아웃된 파드를 내눈으로 직접 보기

https://pushvalue.tistory.com/104 도커,쿠버 클러스터 오토스케일링, 모니터링 구축 pushvalue.tistory.com에서 이어지는 내용 이 전글에서는 도커 클러스터구성, 부하테스트, 오토스케일링 모니터링을 시도

pushvalue.tistory.com

 

 

모시깽이한 기술들을 뭉탱이로 실습한다
하나하나 살펴본 기술을 사용해 내가 상상하는 이상적인 시스템 하나를 구축해 보았다
모호한 개념은 적극적으로 ai의 도움을 받았으며
그 모든 내역을 정제, 기록하여 회고하고 적제적소에 응용하는것이 목적이다

 

작업환경의 배경:

로컬에서 vm대신 가벼운 컨테이너를사용해

부하를주고 대응현상을 모니터링 한다

 

깨끗한 원도우11 위에

도커 컨테이너가 가동되며

WSL 우분투에서 제어한다

 

개요정리 끝.

 

도커 데스크탑에서 wsl 도커앤진을 사용할 수 있도록 설정이 필요하다

wsl 검색

 

wsl 베이스엔진 사용 체크

파워쉘에서 wsl 접속 후

$ docker ps

 

컨테이너 목록이 나오면 성공

처음엔 당연히 빈 목록이다

 

wsl 에서 설치 리스트:
kubectl 설치 - 쿠버 cli 툴
Helm 설치 - 쿠버 패키지관리자
k3d 설치 - 쿠버(k3s)가 도커기반으로 클러스터링 동작 할 수 있도록 해주는 툴
k6 설치 - 부하테스트 툴

 

sudo mv /usr/local/bin/kubectl /usr/local/bin/kubectl.bak || true
KVER="$(curl -L -s https://dl.k8s.io/release/stable-1.31.txt)"
curl -LO "https://dl.k8s.io/release/${KVER}/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client=true

 

k3d cluster create lab \
  --servers 1 --agents 2 \
  -p "8080:80@loadbalancer" -p "8443:443@loadbalancer" \
  --wait

 

후 노드와 파드 확인

kubectl get nodes -o wide
kubectl get pods -A

 

thispc@thisPC:/mnt/c/Users/this_PC$ kubectl get nodes -o wide
kubectl get pods -A
NAME               STATUS   ROLES                  AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION                     CONTAINER-RUNTIME
k3d-lab-agent-0    Ready    <none>                 31s   v1.31.5+k3s1   172.18.0.5    <none>        K3s v1.31.5+k3s1   6.6.87.2-microsoft-standard-WSL2   containerd://1.7.23-k3s2
k3d-lab-agent-1    Ready    <none>                 31s   v1.31.5+k3s1   172.18.0.4    <none>        K3s v1.31.5+k3s1   6.6.87.2-microsoft-standard-WSL2   containerd://1.7.23-k3s2
k3d-lab-server-0   Ready    control-plane,master   35s   v1.31.5+k3s1   172.18.0.3    <none>        K3s v1.31.5+k3s1   6.6.87.2-microsoft-standard-WSL2   containerd://1.7.23-k3s2
NAMESPACE     NAME                                      READY   STATUS              RESTARTS   AGE
kube-system   coredns-ccb96694c-cnxjs                   0/1     ContainerCreating   0          29s
kube-system   helm-install-traefik-crd-chvbl            0/1     ContainerCreating   0          29s
kube-system   helm-install-traefik-ql77b                0/1     ContainerCreating   0          29s
kube-system   local-path-provisioner-5cf85fd84d-dskgv   0/1     ContainerCreating   0          29s
kube-system   metrics-server-5985cbc9d7-66qv6           0/1     ContainerCreating   0          29s
thispc@thisPC:/mnt/c/Users/this_PC$

 

두가지를 볼 수 있는데

k3d-lab-agent-0    Ready

k3d-lab-agent-1    Ready

라는 워커노드 2개가 ready 상태다

k3d-lab-server-0   Ready 도 있는데

서버로 들어온 요청이 agent 로 LB 할 예정이다

 

지금 상태는 ContainerCreating중이니 조금 기다린다

 

Traefik 확인

kubectl get ingressclass
kubectl -n kube-system get svc traefik
kubectl top nodes || true

traefik ingress 체크

Helm: Prometheus, Grafana 설치

helm은 쿠버에서 사용하는 패키지매니저다 (yum, apt의 쿠버버전)

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

kubectl create ns monitoring || true
helm upgrade --install mon prometheus-community/kube-prometheus-stack -n monitoring

kubectl -n monitoring get pods -w

Prometheus로 데이터 올리면 Grafana로 시각화 한다

 

Grafana 80으로 활성화( 해당 터미널 유지해야 웹 접속 가능 )

kubectl -n monitoring port-forward svc/mon-grafana 3000:80

 

그라피나 접속시 필요한 PW (id: admin)

kubectl -n monitoring get secret mon-grafana -o jsonpath="{.data.admin-password}" | base64 -d; echo

 

 

nginx + 배포 yaml을 cat으로 생성함

kubectl create ns app || true

cat <<'YAML' | kubectl apply -n app -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
  selector:
    matchLabels: {app: web}
  template:
    metadata:
      labels: {app: web}
    spec:
      containers:
      - name: nginx
        image: nginx:stable-alpine
        ports: [{containerPort: 80}]
        resources:
          requests: {cpu: "10m", memory: "32Mi"}
          limits:   {cpu: "200m", memory: "128Mi"}
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector: {app: web}
  ports: [{port: 80, targetPort: 80}]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
spec:
  ingressClassName: traefik
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port: {number: 80}
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
YAML

 

 

접속 체크 해본다

curl -i http://localhost:8080/ | head

 

 

페이지 확인이 안되면 올라가고 있을 수도 있다

기다려도 안되면 클러스터링 상태 확인

k3d cluster list
docker ps --format "table {{.Names}}\t{{.Ports}}"

 

접속이 확인 된 기념으로 정리를 하자면

index는 언제나 반갑다 서비스중이 아니라면 말이다

 

 

AI 가 이렇다고 한다:

정확한 흐름은 이렇다(현재 출력 기준).

  • 클라이언트(브라우저/WSL) → localhost:8080
  • Docker 포트 매핑: k3d-lab-serverlb 컨테이너의 80 포트로 전달(8080→80)
  • k3d-lab-serverlb(k3d proxy/LB) → 클러스터 내부의 Traefik Service
  • Traefik(파드) → app 네임스페이스의 Service/web(ClusterIP)
  • Service/web → Pod web-8648758785-8bmx7 (NODE: k3d-lab-agent-0)
  • 그 Pod 안의 nginx 컨테이너가 응답

뭘 자꾸 길게 설명하는데

요약하면 다음과 같다

브라우저에서 localhost:8080요청

> 8080 > 80포트(LB) 로 포워딩

> Traefik 이 워커노드로 전달

> 해당 노드 파드의 nginx가 처리

> 응답은 요청의 역순

> 브라우저에서 응답 확인

 

 

 

 

 

각 오브젝트의 이해가 어느정도 되었으니 부하를 주기전 모니터링 준비를 한다

80으로 터미널을 유지하고 프로매테우스로 대시보드를 연다

 

 

연동된 대시보드의 모습  컨트롤  + K 로 "nodes" 를 검색해 추가 했다

뭔가 엄청나게 잘 만들어진 대시보드도 많다고 한다 더 찾아봐야 할 것 같다

3,4,5 노드 3개가 잘 보여 만족스럽다

nodes dasd

 

ai로 부하를주는 코드를 받았다

원래 에디터에서 코드 짜고 그거 파일이동 시키거나 cat써야 하는데

ai로 한방에 같은 과정을 진행할 수 있는건 진짜 대박이 맞다

그런데 진행해야 할 일이 많으니 코드를 안보게 되는것도 맞다

일단 부하가 잘 안걸린다면

nginx 컨테이너라서 그런걸 수 도 있고 부하 코드를 살펴봐야 할 수도 있겠다

 

 

 

 

 

 

 

 

 

 

차트를보면 부하는 잘 걸리는것 같다

뭔가 늘어나는것도 같다

하지만 분석을 못하겠다

뭐가 뭐때문에 어떻게 동작하고있고 그걸 뭘보고 판단해야 하는건지 감을 잡기 힘들다

 

아래 링크로 이어집니다
https://pushvalue.tistory.com/105

 

그라파나에서 스케일아웃된 파드를 내눈으로 직접 보기

https://pushvalue.tistory.com/104 도커,쿠버 클러스터 오토스케일링, 모니터링 구축 pushvalue.tistory.com에서 이어지는 내용 이 전글에서는 도커 클러스터구성, 부하테스트, 오토스케일링 모니터링을 시도

pushvalue.tistory.com

 

댓글