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