kubernetes
20210907 (화) auto scaling
gusalstm
2021. 9. 7. 13:07
반응형
Auto Scaling
수동 스케일링 명령어 : $ kubectl scale CONTROLLER --replicas N
HPA (Horizontal Pod Autoscaler)
관리되는 모든 pod의 metric (CPU, MEMORY) 정보를 측정해서 가져옴
목표값에 부합하도록 pod의 갯수를 결정
pod의 갯수를 유지
ReplicationController, ReplicaSet, Deployment, StatefulSet 등의 컨트롤러를 스케일링할 수 있다.
### 명령어로 autoscaling ###
vagrant@kube-control1:~$ kubectl autoscale CONTROLLER_TYPE CONTROLLER --min N --max N --cpu-percent N
vagrant@kube-control1:~$ kubectl autoscale deployment myapp-deploy-hpa --min 2 --max 10 --cpu-percent 70
horizontalpodautoscaler.autoscaling/myapp-deploy-hpa autoscaled
※ 목표 복제본의 갯수 = ceil [ 현재 복제본 갯수 * (현재 metric / 목표 metric 값)]
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
### HPA 리소스 정의
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: HPA_NAME
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: CONTROLLER_NAME
minReplicas: N
maxReplicas: N
targetCPUUtilizationPercentage: N
# CPU 평균 사용량 목표값
반응형
### manifests 로 autoscaling ###
### deploy 생성
vagrant@kube-control1:~/work/20210907$ cat myapp-deploy-hpa.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy-hpa
spec:
replicas: 3
selector:
matchLabels:
app: myapp-deploy-hpa
template:
metadata:
labels:
app: myapp-deploy-hpa
spec:
containers:
- name: myapp
image: devops2341/go-myweb:alpine
resources:
requests:
cpu: 50m
memory: 5Mi
limits:
cpu: 100m
memory: 20Mi
ports:
- containerPort: 8080
protocol: TCP
### hpa 생성
vagrant@kube-control1:~/work/20210907$ cat myapp-hpa-cpu.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa-cpu
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deploy-hpa
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
# replicaset의 갯수는 2~10개이며, cpu 점유율 70% 이상시, autoscaling
### 부하 명령 : kubectl exec PODNAME -- sha256sum /dev/zero ###
### 3개의 pod 중 2곳에 부하를 주고 다시 체크 ###
vagrant@kube-control1:~$ kubectl top pods
NAME CPU(cores) MEMORY(bytes)
myapp-deploy-hpa-b584d6847-7gqvs 102m 1Mi
myapp-deploy-hpa-b584d6847-7htg8 73m 1Mi
myapp-deploy-hpa-b584d6847-bklvj 0m 1Mi
vagrant@kube-control1:~$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myapp-hpa-cpu Deployment/myapp-deploy-hpa 116%/70% 2 10 3 4m10s
vagrant@kube-control1:~$ kubectl get replicas
error: the server doesn't have a resource type "replicas"'
vagrant@kube-control1:~$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/myapp-deploy-hpa-b584d6847-7gqvs 1/1 Running 0 9m53s
pod/myapp-deploy-hpa-b584d6847-7htg8 1/1 Running 0 9m53s
pod/myapp-deploy-hpa-b584d6847-bklvj 1/1 Running 0 9m53s
pod/myapp-deploy-hpa-b584d6847-m6cch 1/1 Running 0 18s
pod/myapp-deploy-hpa-b584d6847-nwvb2 1/1 Running 0 32s
pod/myapp-deploy-hpa-b584d6847-t79dn 1/1 Running 0 33s
### 부하작업 종료 후 ###
vagrant@kube-control1:~$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myapp-hpa-cpu Deployment/myapp-deploy-hpa 1%/70% 2 10 6 13m
vagrant@kube-control1:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-deploy-hpa-b584d6847-7gqvs 1/1 Running 0 18m
myapp-deploy-hpa-b584d6847-7htg8 1/1 Running 0 18m
myapp-deploy-hpa-b584d6847-bklvj 1/1 Running 0 18m
myapp-deploy-hpa-b584d6847-t79dn 0/1 Terminating 0 9m8s
vagrant@kube-control1:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-deploy-hpa-b584d6847-7gqvs 1/1 Running 0 29m
myapp-deploy-hpa-b584d6847-bklvj 1/1 Running 0 29m
### 2라는 값 : min ###
728x90