티스토리 뷰

에디.Container

AEWS 5주차. EKS Autoscaling - 실습

에디.이이 2023. 5. 26. 11:53

1단계. HPA 구성

  1) CPU 50% 초과시 pod를 1개에서 10개까지 HPA를 이용하여 Scaling이 조절되도록 설정

  2) 반복 연산을 통한 CPU 부하를 통해 사용량 증가시 pod 수량 증가 확인

 

2단계. KEDA 구성

  1) 설치 후 기본 구성 확인

  2) Cron을 통해 ScaleObject 정책을 설정하고 모니터링

    - 현재 Active가 False인 이유는 KEDA 정책에 시간대별로 정책 적용 시간이 다르기 때문

    - MINPODS 1개에서 MAZPODS 2개까지 설정

    - 시간이 지난후 신규 php-apache 가 자동으로 추가됨을 확인

 

3단계. VPA 구성

  1) VPA 구성확인

  2) 초기 pod 상태 : 2개 pod가 100m CPU와 50Mi 메모리를 보유

  3) 신규 pod가 추가되며 기존 pod를 대체하기 시작함을 확인

  4) 기존 pod는 최종적으로 삭제되었으며, Requests의 CPU가 500m 코어 이상임을 확인

  5) 관련된 Log 확인

 

4단계. Cluster Autoscaler 설정

  1) EKS에 포함된 Node용 EC2의 정보 확인

    - EC2의 Tag 정보 확인 : Autosacler 관련 tag 보

    - Autosacling 관련 설정 확인 : 최대 6개

  2) 배포된 nginx pod수를 15개로 확장

    - 기존 배포된 Node에 배포되지 못하고 pending 상태인 pod를 확인

    - CPU 사용량이 100%에 육박하는 node별 정보 확인

  3) AutoScaling되어 Node가 5개로 확장되었으며, pod도 정상 배포 되었음을 확인

    - Node의 수량 및 사용량 확인

    - Node별 pod 배치 확인

    - Auto Scaling Group에서 수량 변경 확인

  4) 프로젝트 삭제 후 약 10분후 node용 EC2 삭제 확인

 

5단계. Cluster Proportional Autoscaler 설정

  1) CPA의 규칙을 설정

    - Node 수량과 동일하게 pod 수량을 구성

  2) Node 수량 및 Pod 수량 확인

    - Node 3대, ngingx pod 3개

  3) Node의 수량을 5개로 증가

    - pod도 Node 배포 즉시 동일한 수량으로 증가함을 확인

 

6단계. Karpenter 설정

  1) EKS  배포 확인

  2) k8s 배포 확인

  3) Karpenter 배포 확인

  4) Provisioner 통한 정책 적용

    - spec : spot 인스턴스로 배포

    - ttlSeconedAfterEmpty : 30초 이상 node에 별다른 Pod가 없으면 삭제

cat <<EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: default
spec:
  requirements:
    - key: karpenter.sh/capacity-type
      operator: In
      values: ["spot"]
  limits:
    resources:
      cpu: 1000
  providerRef:
    name: default
  ttlSecondsAfterEmpty: 30
---
apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
  name: default
spec:
  subnetSelector:
    karpenter.sh/discovery: ${CLUSTER_NAME}
  securityGroupSelector:
    karpenter.sh/discovery: ${CLUSTER_NAME}
EOF

  5) Grafana 대시보드 적용 확인

  6) Pause 컨테이너 배포 통한 Scale-out

    - Pause 컨테이너 : 작은이미지, Pod 생성시 무조건 함께 생성

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 0
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      terminationGracePeriodSeconds: 0
      containers:
        - name: inflate
          image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
          resources:
            requests:
              cpu: 1
EOF

  7) 신규 spot 인스턴스 배포 확인

    - 관련 로그 확인

    - EC2 인스턴스 스팟요청 확인

  8) 컨테이너 삭제 통한 Scale-in

    - 워크로드 pod 없을시 30초 대기 후 인스턴스 삭제

  9) Consolidation 구성 통한 동작 확인

    - pod 추가를 통한 Scale-out 확인 : 12개 pod 배포

- pod 축소를 통한 Scale-in 확인 : 1개로 축소

 

-----------------------------------------------------------------------------------------------

이 내용은 AEWS(AWS EKS Workshop Study) 1기의 과제로써 작성되었습니다.

AEWS는 '가시다'님이 속한 CloudNet@에서 진행하는 AWS EKS workshop에 대한 스터디입니다.

매주 일요일마다 소중한 정보를 퍼주시는 '가시다'님께 무한 감사 드립니다.

https://gasidaseo.notion.site/23-AWS-EKS-Workshop-07165aec800042b9ac9357aee18fdf17

'에디.Container' 카테고리의 다른 글

AEWS 6주차. EKS security - 실습  (0) 2023.06.03
AEWS 6주차. EKS Security  (0) 2023.06.03
AEWS 5주차. EKS Autoscaling  (0) 2023.05.26
AEWS 4주차. EKS Observability  (0) 2023.05.20
AEWS 4주차. EKS Observability - 실습  (0) 2023.05.20
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크