반응형
Jen'_'
Jen's Space
Email
GitHub
전체 방문자
오늘
어제
  • 분류 전체보기 (98)
    • Ansible (4)
      • 우아한앤서블 (4)
    • Cloud (19)
      • AWS (17)
      • GCP (2)
    • DevOps (40)
      • Docker (6)
      • Kubernetes (26)
      • CICD (6)
      • Terraform (2)
    • Language (13)
      • Python (12)
      • Node.js (1)
    • Linux (10)
    • etc. (7)
    • 개인기록 (1)
    • AEWS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 피드백 환영합니다 :)

인기 글

태그

  • gitops
  • ALB
  • Kubernetes
  • terraform
  • 자격증
  • k8s
  • karpenter
  • autoscaling
  • 우아하게앤서블
  • 쿠버네티스
  • jenkins
  • vagrant
  • argocd
  • INGRESS
  • AWS
  • CICD
  • ansible
  • ubuntu
  • EKS
  • Docker

최근 댓글

Jen'_'
DevOps/Kubernetes

[k8s] Resource + Autoscaler (CA, HPA) 개념 정리

[k8s] Resource  + Autoscaler (CA, HPA) 개념 정리
DevOps/Kubernetes

[k8s] Resource + Autoscaler (CA, HPA) 개념 정리

2022. 7. 18. 19:24
반응형

Resource

파드를 지정할 때, 컨테이너에 필요한 각 리소스의 양을 선택적으로 지정한다.

지정할 가장 일반적인 리소스는 CPU와 Memory가 있다.

 

Requests and Limits

Requests

  • 스케줄러에서 Pod를 어떤 노드에 위치시킬 판단 근거가 된다.
  • Pod가 Request량을 초과 하여 사용해도 Limit량을 넘지 않으면 문제는 없다. 다만 Node의 자원이 부족할 경우에는 Request량을 초과 한 Pod는 퇴거(Eviction)의 대상이 된다.
  • CA, HPA에서 Pod를 확장 또는 축소시킬 기준 값이 된다.

 

Limits

  • Pod는 limit이상의 자원을 사용할 수 없다.
  • 컨테이너의 프로세스가 허용된 양보다 많은 메모리를 사용하려고 하면, 시스템 커널은 메모리 부족(out of memory, OOM) 오류와 함께 할당을 시도한 프로세스를 종료한다.

 

설정 예제

---
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

 

 


 

설명

k8s의 Autoscaling은 2가지 형태로 제공된다.

  1. HPA(Horizontal Pod Autoscaler): Deployment 또는 ReplicaSet에서 Pod를 확장한다. K8S API resource와 controller로 구현되고 Conteroller manager는 각각의 HPA 정의에 지정된 메트릭에 대해 리소스 사용률을 쿼리 한다.
  2. CA(Cluster Autoscaler): 클러스터의 사용 가능한 자원과 Pod가 요청(request)하는 자원량을 비교하여 Node를 증가시키거나 감소시킨다.

 

HPA  and CA  Architecture

 

HPA(Horizontal Pod Autoscaler)

Deployment 또는 ReplicaSet에서 Pod를 확장한다. K8S API Resource와 Controller로 구현되고 Conteroller manager는 각각의 HPA 정의에 지정된 메트릭에 대해 리소스 사용률을 쿼리 한다.

 

설정 방법

1. metrics-server 설치

https://github.com/kubernetes-sigs/metrics-server

 

2. hpa 설정

- deployment 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
            memory: 128Mi
          requests:
            cpu: 200m
            memory: 64Mi

- hpa 생성

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 50

php-apache 레플리카의 개수를 1부터 10 사이로 autoscale 하고, 이에 대한 기준은 평균 CPU 사용량 50%, Memory 사용량 50%으로 유지하는 것이다.

 

 

CA(Cluster Autoscaler)

클러스터의 사용 가능한 자원과 Pod가 요청(request)하는 자원량을 비교하여 Node를 증가시키거나 감소시킨다.

 

자동 조절 방식

  • 사용자가 요청한 Pod의 자원량보다 현재 Cluster의 자원이 부족한 경우 노드 증가
  • 일정 시간 동안 특정 노드의 사용률이 저조한 경우 해당 노드 감소
  • Cluster Autoscaler는 현재 사용 중인 자원 기반으로 동작하지 않음. 따라서 Pod의 부하가 아무리 높더라도 Request가 정의되어 있지 않으면 Node가 증가하지 않음.

 

설정 방법(EKS)

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/autoscaling.html

 

 

 

참고

https://itchain.wordpress.com/2018/05/16/kubernetes-resource-request-limit/

https://medium.com/tensult/cluster-autoscaler-ca-and-horizontal-pod-autoscaler-hpa-on-kubernetes-f25ba7fd00b9

 

 

 

 

 

 

반응형
저작자표시 (새창열림)

'DevOps > Kubernetes' 카테고리의 다른 글

Secret Manager를 사용해서 K8S Secret 관리하기  (0) 2022.09.15
[EKS] Kubernetes Ingress 설치 및 옵션 정리  (2) 2022.08.19
[k8s] Graceful Shutdown을 위한 preStop, terminationGracePeriodSeconds 설정  (0) 2022.06.29
Kubernetes Component  (0) 2022.06.22
[EKS] ingress-nginx helm chart 에 AWS ACM 등록  (0) 2022.06.01
  • Resource
  • Requests and Limits
  •  
  • 설명
  •  
  • HPA  and CA  Architecture
  • HPA(Horizontal Pod Autoscaler)
  • CA(Cluster Autoscaler)
'DevOps/Kubernetes' 카테고리의 다른 글
  • Secret Manager를 사용해서 K8S Secret 관리하기
  • [EKS] Kubernetes Ingress 설치 및 옵션 정리
  • [k8s] Graceful Shutdown을 위한 preStop, terminationGracePeriodSeconds 설정
  • Kubernetes Component
Jen'_'
Jen'_'
DevOps 엔지니어 Jen의 기술 블로그 / 이메일: jenakim47@gmail.com

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.