클라우드 배우기
Kubernetes AutoScaling - Centos7 본문
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 업데이트
'kubernetes' 카테고리의 다른 글
Kubernetes(K8s) Helm + Prometheus stack(Prometheus + Grafana 설치 - Centos7 (0) | 2023.09.23 |
---|---|
Kubernetes Pod Networking - Centos7 (0) | 2023.09.22 |
Kubernetes(K8S) Ingress - Centos7 (0) | 2023.09.18 |
Kubernetes Storage : Persistent Volume & Claim - Centos7 (0) | 2023.09.17 |
Kubernetes(K8S) LoadBalance (metallb) - Centos7 (0) | 2023.09.17 |