[DevOps] K8s Auto Scale-Out

illilili·2025년 6월 18일

DevOps

목록 보기
6/12
post-thumbnail

✅ Manual Scale-Out

🔹 주문서비스 배포 및 노출

kubectl create deploy order --image=jinyoung/monolith-order:v20210504
kubectl expose deploy order --port=8080

🔹 수동 확장

kubectl scale deploy order --replicas=3
kubectl scale deploy order --replicas=1


✅ Auto Scale-Out 준비

🔹 부하 테스트용 Pod 생성 (siege)

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: siege
spec:
  containers:
  - name: siege
    image: apexacme/siege-nginx
EOF

🔹 siege 내부에서 테스트 실행

kubectl exec -it siege -- /bin/bash
siege -c1 -t2S -v http://order:8080/orders
exit



✅ Metric Server 설치 확인 및 설치

🔹 확인

kubectl top pods

출력이 없고 Metrics API not available 에러가 나면 설치 필요

🔸 설치 명령어

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl get deployment metrics-server -n kube-system

✅ Auto Scale 설정 및 적용

🔹 Auto Scaler 생성

kubectl autoscale deployment order --cpu-percent=50 --min=1 --max=3

평균 CPU 사용량이 요청 대비 50%를 초과하면 Pod 수 증가

🔹 설정 확인

kubectl get hpa

🔹 CPU 요청 명시된 배포파일 작성 (order-deploy.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order
  labels:
    app: order
spec:
  replicas: 1
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
        - name: order
          image: jinyoung/monolith-order:v20210602
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: "200m"
          readinessProbe:
            httpGet:
              path: '/actuator/health'
              port: 8080
            initialDelaySeconds: 10
            timeoutSeconds: 2
            periodSeconds: 5
            failureThreshold: 10
          livenessProbe:
            httpGet:
              path: '/actuator/health'
              port: 8080
            initialDelaySeconds: 120
            timeoutSeconds: 2
            periodSeconds: 5
            failureThreshold: 5

🔹 기존 배포 삭제 및 적용

kubectl delete -f order-deploy.yaml
kubectl apply -f order-deploy.yaml

🔹 설정 확인

kubectl get deploy order -o yaml
kubectl get po


✅ Auto Scale-Out 동작

🔹 부하 발생시키기

kubectl exec -it siege -- /bin/bash
siege -c20 -t40S -v http://order:8080/orders
exit

🔹 실시간 Pod 생성 확인

🔹 HPA 상태 확인

kubectl get hpa

🔸 Azure Portal 모니터링

  • CPU 사용량 최대치: 34%까지 상승
  • 네트워크 출력량 증가: 410.5kB까지 증가

profile
코코딩딩

0개의 댓글