본문 바로가기

네트워크/k8s

[k8s] 40. Autoscaler - 실습

Autoscaler 실습

image

1. Metrics Server 설치

  • 마스터 노드에서 작업

1. 설치

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2. Metrics Deployment 수정

kubectl edit deployment metrics-server -n kube-system

------------------------
spec:
   containers:
   - args:
     - --cert-dir=/tmp
     - --secure-port=4443
     - --kubelet-insecure-tls
     - --kubelet-preferred-address-types=InternalIP
     image: k8s.gcr.io/metrics-server-amd64:v0.3.6
     imagePullPolicy: IfNotPresent
     name: metrics-server
     ------------------------
  • kubelet-insecure-tlskubelet-preferred-address-types=InternalIP 추가

3. 설치 확인

kubectl get apiservices | grep metrics

4. Metric 값 확인 (1~2분 후에)

kubectl top node

image

2. HPA 실습 - CPU

image

  • Deployment를 통해서 CPU의 requests가 10m인 파드를 만듦
  • 서비스를 달아 HPA를 만듦
  • HPA의 타겟은 Deployment
  • CPU를 트리거로 Utilization을 50으로 할 예정
  • 즉, 두 CPU의 사용량의 평균이 5m을 넘으면 파드를 더 생성함

Target Deployment (CPU) / Service

apiVersion: apps/v1
kind: Deployment
metadata:
 name: stateless-cpu1
spec:
 selector:
   matchLabels:
      resource: cpu
 replicas: 2
 template:
   metadata:
     labels:
       resource: cpu
   spec:
     containers:
     - name: container
       image: tmkube/app:v1
       resources:
         requests:
           cpu: 10m
         limits:
           cpu: 20m
---
apiVersion: v1
kind: Service
metadata:
 name: stateless-svc1
spec:
 selector:
    resource: cpu
 ports:
   - port: 8080
     targetPort: 8080
     nodePort: 30001
 type: NodePort
  • 최초 replicas는 2
  • 파드의 CPU 자원에 대한 request, limits 설정
  • 파드에 연결된 서비스 생성
  • 서비스의 nodePort는 30001

HPA - Resource (Utilization)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-resource-cpu
spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: stateless-cpu1
  metrics:
  - type: Resource 
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  • max, min Replicas 존재
  • 해당 타겟이 되는 컨트롤러로 Deployment 지정
  • 트리거로 cpu 지정

실습 과정

  1. Target Deployment, Service 생성
  2. HPA 생성
  3. 마스터 노드에 다음 명령어로 HPA 수치변화 조회
    kubectl get hpa -w
    image
    현재 성능정보/타겟으로 지정한 수치, minimum, maximum 파드 개수, replicas 등이 나옴
  4. 마스터 노드 쉘창을 하나 더 켜서 다음 명령어로 부하 주기
    while true;do curl 192.168.35.30:30001/hostname; sleep 0.01; done
  5. HPA가 변하는지 확인
    image
  6. 무한 명령문 끄고 HPA가 변하는지 확인
    image

3. HPA 실습 - 메모리

image

Target Deployment (Memory) / Service

apiVersion: apps/v1
kind: Deployment
metadata:
 name: stateless-memory1
spec:
 selector:
   matchLabels:
      resource: memory
 replicas: 2
 template:
   metadata:
     labels:
       resource: memory
   spec:
     containers:
     - name: container
       image: tmkube/app:v1
       resources:
         requests:
           memory: 10Mi
         limits:
           memory: 20Mi
---
apiVersion: v1
kind: Service
metadata:
 name: stateless-svc2
spec:
 selector:
    resource: memory
 ports:
   - port: 8080
     targetPort: 8080
     nodePort: 30002
 type: NodePort
  • 파드의 requests에 memory를 줌
  • 서비스의 노드포트는 30002

HPA - Resource (AverageValue)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-resource-memory
spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: stateless-memory1
  metrics:
  - type: Resource 
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 5Mi
  • resource의 name은 memory
  • type과 averageValue가 cpu와 다름
    • CPU의 type은 Utilization

실습 과정

  1. 기존에 걸었던 HPA 중지
  2. 마스터 노드에서 다음 명령어로 기존 HPA 삭제
    kubectl delete horizontalpodautoscalers.autoscaling hpa-resource-cpu
  3. Target Deployment, Service 생성
  4. HPA - Resource 생성
  5. 마스터 노드에서 다음 명령어로 HPA 모니터링
    kubectl get hpa -w
    image
    현재 수치에 단위가 없는데 그냥 앞자리 비교하면 됨
  6. 다른 마스터 노드 쉘 켜서 다음 명령어로 부하 주기
    while true;do curl 192.168.35.30:30002/hostname; sleep 0.01; done
  7. HPA 변하는지 확인
    image
  8. 무한 명령문 끄면 언젠가 HPA가 변하겠지...

출처

인프런 - 대세는 쿠버네티스

'네트워크 > k8s' 카테고리의 다른 글

[k8s] 42. Networking  (0) 2021.02.26
[k8s] 41. Component  (0) 2021.02.26
[k8s] 39. Autoscaler - HPA  (0) 2021.02.25
[k8s] 38. Ingress - 실습  (0) 2021.02.25
[k8s] 37. Ingress - Nginx  (0) 2021.02.25