해당 포스트 이후 아래 링크로 이어집니다
https://pushvalue.tistory.com/105
그라파나에서 스케일아웃된 파드를 내눈으로 직접 보기
https://pushvalue.tistory.com/104 도커,쿠버 클러스터 오토스케일링, 모니터링 구축 pushvalue.tistory.com에서 이어지는 내용 이 전글에서는 도커 클러스터구성, 부하테스트, 오토스케일링 모니터링을 시도
pushvalue.tistory.com
모시깽이한 기술들을 뭉탱이로 실습한다
하나하나 살펴본 기술을 사용해 내가 상상하는 이상적인 시스템 하나를 구축해 보았다
모호한 개념은 적극적으로 ai의 도움을 받았으며
그 모든 내역을 정제, 기록하여 회고하고 적제적소에 응용하는것이 목적이다
작업환경의 배경:
로컬에서 vm대신 가벼운 컨테이너를사용해
부하를주고 대응현상을 모니터링 한다
깨끗한 원도우11 위에
도커 컨테이너가 가동되며
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

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}}"
접속이 확인 된 기념으로 정리를 하자면

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개가 잘 보여 만족스럽다

ai로 부하를주는 코드를 받았다
원래 에디터에서 코드 짜고 그거 파일이동 시키거나 cat써야 하는데
ai로 한방에 같은 과정을 진행할 수 있는건 진짜 대박이 맞다
그런데 진행해야 할 일이 많으니 코드를 안보게 되는것도 맞다
일단 부하가 잘 안걸린다면
nginx 컨테이너라서 그런걸 수 도 있고 부하 코드를 살펴봐야 할 수도 있겠다




차트를보면 부하는 잘 걸리는것 같다
뭔가 늘어나는것도 같다
하지만 분석을 못하겠다
뭐가 뭐때문에 어떻게 동작하고있고 그걸 뭘보고 판단해야 하는건지 감을 잡기 힘들다
아래 링크로 이어집니다
https://pushvalue.tistory.com/105
그라파나에서 스케일아웃된 파드를 내눈으로 직접 보기
https://pushvalue.tistory.com/104 도커,쿠버 클러스터 오토스케일링, 모니터링 구축 pushvalue.tistory.com에서 이어지는 내용 이 전글에서는 도커 클러스터구성, 부하테스트, 오토스케일링 모니터링을 시도
pushvalue.tistory.com
'정보보안' 카테고리의 다른 글
| 버프스위트 CSRF 취약점 탐색,대응 기록 (0) | 2026.03.17 |
|---|---|
| 버프 스위트를 사용한 인증, 인가 우회 취약점 점검 (0) | 2026.03.17 |
| 버프스위트를 사용한 취약점 탐색 (BOLA) (0) | 2026.03.15 |
| 버프 스위트 취약점 대응, 기록 (0) | 2026.03.15 |
| 드림핵 문제 쿠키 (0) | 2025.12.28 |
댓글