💻
DevOps Cookbook
  • Home
    • Meiko DevOps Cookbook
  • Gitlab
    • Tips
      • 사전 정의된 CI/CD 변수의 기본 세트
    • 딥다이브 Gitlab CI/CD
      • GitLab CI/CD 시작하기
        • .gitlab-ci.yml 파일
        • Runner
        • 파이프라인
        • CI/CD 변수
        • CI/CD 컴포넌트
      • CI/CD YAML 구문 참조
    • CI/CD Notifications
      • CI/CD slack notifiaction 구축작업 결과
  • Kubernetes
    • Persistence Volume
      • play-cluster
    • Ingress
      • Ingress란
      • 수동으로 ingress 배포하기
    • Security
    • HPA
      • hpa troubleshooting history
        • 1. HELM_UPGRADE_VALUES_FILE로 hpa가 추가되지 않는 원인
        • 2. targetCPUUtilizationPercentage 계산은 어떻게 되는가
        • 3. helm values에 cpu resource 단위를 1로 했을 때 실제 파드에 1m( 0.001 ) 코어가 부여된 것
        • 4. pod cpu resources가 할당받은 것을 나타내는 것인 지 현재 사용량을 나타내는 것인지 검증
        • 5. 설정한 hpa를 기반으로 pod auto scaling이 동작하는 지 검증
      • HorizontalPodAutoscaler의 behavior 필드 중 stabilizationWindowSeconds 값이 Kubernetes 코드에서 어떻게 사용되는지 분석
  • prometheus
    • prometheus 리소스 alert 세팅
      • 슬랙 채널 구성
      • alert 환경 구성 가이드
  • Loki
    • loki-grafana alert 세팅
      • 1차 검증 결과
      • Alert 환경 구성 가이드
  • load test
    • nGrinder
      • nGrinder Test Configuration 값들
      • 질문리스트
        • groovy는 JUnit 스타일에 포함되지 않는건가 ? + GTest가 뭔지 좀 헷갈린다
      • Script
        • Groovy Script Structure
          • reference
          • Groovy script deep dive
          • Groovy Script 실행 구조 분석
      • Test
        • [nGrinder] single endpoint load test 하기
          • [nGrinder] single endpoint load test script 기반 cpu 사용량 테스트
          • [nGrinder] single endpoint load test script 기반 pod autoscaling 테스트
        • [nGrinder] multi endpoint load test 하기
          • [nGrinder] multi endpoint load test script에 정의한 test들이 실행 순서를 보장 받는가?
  • AWS
    • aws-cli
      • eks cluster vpc 스펙보기
    • aws-vpc
  • EKS
    • youtube links
    • EKS best practice
    • 질문 정리
  • Istio
    • Istio Basic
      • Istio 컴포넌트 별 역할
      • Kubernetes Ingress와 Istio VirtualService의 관계
    • Gateway
      • Gateway 주요 특징
      • Istio Gateway와 Kubernetes Ingress의 주요 차이점
  • IAC
    • Terraform
      • 테라폼 설치
      • 테라폼 문서
      • 테라폼 개념
        • 언어 구조
        • 사용 순서
        • 상태파일 (tfstate)
        • 변수 정의 방법
      • Terraform - AWS VPC
    • Ansible
      • Ansible 초기 학습 내용
      • Ansible Playbook
      • Ansible Study
        • Inventory
        • Playbook
          • Module
        • Variable
  • etc
    • Toss SLASH24
    • Elastic Load Balancing
    • 낙서장
      • IRSA
    • deep dive
      • Istio 공식문서 번역
        • Overview
          • What is Istio?
          • Why choose Istio?
          • Sidecar or ambient?
        • Concepts
          • Traffic Management
        • Page
      • eks 에서 control plane < - > data plane 통신 원리
Powered by GitBook
On this page
  • 🚨 문제
  • 🧨 원인
  • 🔨 해결
  • 🌠 결과
Edit on GitHub
  1. Kubernetes
  2. HPA
  3. hpa troubleshooting history

1. HELM_UPGRADE_VALUES_FILE로 hpa가 추가되지 않는 원인

🚨 문제

  • HELM_UPGRADE_VALUES_FILE: .gitlab/auto-deploy-values.yaml 이렇게 프로젝트별로 values를 설정하는 파일에 hpa 관련 된 값들을 정의하고 배포한다

  • 배포된 이후에 k get hpa -n {namespace} 를 했을 때 hpa 리소스가 나와야하는데 나오지 않는 문제


🧨 원인

  1. helm values에 hpa만 명시되어있고 Values.resources.requests 관련 값이 정의되어 있지 않았다

  • resources가 명시된 helm values

resources:
  requests:
    cpu: 1
    memory: 512Mi
  • resources가 명시된 ns에 배포되어있는 deployment의 상세

    k get deployments production -o yaml
    apiVersion: apps/v1
    kind: Deployment
    
            resources:
              requests:
                cpu: "1"
                memory: 512Mi
  • resources가 명시되지 않은 ns에 배포되어있는 deployment 의 상세

k get deployments staging -o yaml
                                                 
apiVersion: apps/v1
kind: Deployment

  resources: {}
 

  1. Values.resources.requests 란

    1. 파드가 요청하는 최소 리소스의 양을 나타낸다

    2. 일반적으로 CPU와 메모리의 requests 및 limits로 구성

    3. HPA는 CPU 사용률 또는 메모리 사용률을 기준으로 자동으로 스케일링하므로, requests 값이 있어야 HPA가 올바르게 작동할 수 있다

    4. Kubernetes 공식 문서에서도 HPA가 작동하기 위해서는 CPU 또는 메모리의 requests 설정이 필요함을 강조한다

  2. 리소스 요청 추가 후 정상 작동한 이유:

    1. HPA는 targetCPUUtilizationPercentage와 같은 목표를 설정할 때 requests의 값을 기반으로 목표를 계산한다.

    2. resources.requests가 정의되어 있지 않으면 HPA는 CPU나 메모리 사용량을 계산할 기준이 없으므로 작동하지 않는다.

    3. requests에 CPU 요청 값을 추가하면 HPA가 정상적으로 CPU 사용량을 기준으로 스케일링을 수행할 수 있게 된다.


🔨 해결

  1. auto-deploy-app/templates/db-migrate-hook.yaml

    1. 위에서 했던 것 처럼 custom auto deploy 에 resource를 생성하는 yaml이 있을거라고 판단

  2. auto-deploy-app/templates/hpa.yaml

    1. {{- if and .Values.hpa.enabled .Values.resources.requests -}} 이 조건을 충족시켜야 함


🌠 결과

  • hpa 뿐만 아니라 resource.requests.cpu가 명시 되어 있어야 hpa 리소스가 배포된다

이 문제가 해결되고 나니 왜 필요한 지 알아야 했다

Previoushpa troubleshooting historyNext2. targetCPUUtilizationPercentage 계산은 어떻게 되는가

Last updated 1 year ago

(HPA)는 워크로드 리소스(예: 또는 )를 자동으로 업데이트하며, 워크로드의 크기를 수요에 맞게 자동으로 스케일링하는 것을 목표로 한다.

수평 스케일링은 부하 증가에 대해 를 더 배치

HorizontalPodAutoscaler
디플로이먼트
스테이트풀셋
파드