Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

클라우드 엔지니어 꿈나무

Kubernetes AutoScaling - Centos7 본문

kubernetes

Kubernetes AutoScaling - Centos7

새싹싹이 2023. 9. 22. 13:07

 

AutoScaling을 사용하기 위해 자원 측정이 필수이기 때문에 HPA 설치 예정

(HPA의 필수 요소인 Metrics Server도 설치)

 

HPA (Horizontal Pod Autoscaling)

워크로드 Resource를 자동으로 업데이트하며 워크로드 크기를 수요에 맞게 자동으로 스케일링

부하량이 줄어든 후, 파드의 수가 최소 설정값 이상일 때 HorizontalPodAutoscaler는 워크로드 Resource 에게 Scale 다운 지시

크기 조절이 불가능한 Object에는 적용 불가

쿠버네티스 API Resource 또는 Controller  형태로 구현

HPA API 자원은 Controller의 행동을 결정

쿠버네티스 Control Plane 내 실행되는 HPA 컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률, 또는 다른 커스텀 메트릭 등의 관측된 메트릭을 목표에 맞추기 위해 Deployemt 등의 목표물 적정 크기를 주기적으로 조정

Metrics Server

Metric Resource를 수집하여 Metrics API* 를 통해 K8S apiserver에 노출하고 Horizontal Pod Autoscaler 및 Vertical Pod Autoscaler 에서 사용 가능하게 함

<참고>

*API 란 :  Application Programming Interface, 프로그램이 서로 상호 작용할 수 있도록 설계된 인터페이스나 규칙

 

Metrics Server 설치 및 설정

wget https://github.com/kubernetes-sigs//metrics-server/releases/latest/download/components.yaml  

vi components.yaml

하기 140번 열에 기재된 내용 추가

kubectl apply -f components.yaml

deploy가 실행된 것을 확인할 수 있다.

<참고>

kubectl edit deploy -n kube-system metrics-server : 이 명령어로도 수정 가능, 45번째 줄

kubectl top node : node 상태 확인

 

vi scaledep.yml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: scaledep-apache
spec:
  selector:
    matchLabels:
      tem: apache
  replicas: 1
  template:
    metadata:
      labels:
        tem: apache
    spec:
      containers:
      - name: a1
        image: registry.k8s.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 300m
          requests:
            cpu: 200m

---
apiVersion: v1
kind: Service
metadata:
  name: svc-apache
  labels:
    run: svc-apache
spec:
  ports:
  - port: 80
  selector:
    tem: apache

scaledep.yml 이 잘 실행된 것을 확인할 수 있다.

kubectl autoscale deploy scaledep-apache --cpu-percent=70 --min=1 --max=7 : cpu가 70%를 넘어가면 최소 1개에서 최대 7개까지 복사

 

Master 1

kubectl run -i --tty load-generator1 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.001; do wget -q -O- http://svc-apache/; done" : 주기적으로 HTTP 요청을 보내는 작업을 수행, 0.01초마다 "http://svc-apache/" 주소로 HTTP GET 요청을 보내고, 응답을 표준 출력
kubectl run -i --tty load-generator1 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.001; do wget -q -O- http://svc-apache/; done"

kubectl run -i --tty load-generator1 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.0001; do wget -q -O- http://svc-apache/; done"

Master 2

watch -n 2 kubectl get hpa : 2초마다 hpa 업데이트

Master 3

watch -n 2 kubectl get pods : 2초마다 pod 업데이트