https://karpenter.sh/docs

  • Karpenter 란?
  • k8s cluster 에 설치하여, 워크로드의 효율과 비용의 크게 향상시키는 "node lifecycle management project"
    • Watching : k8s scheduler 가 스케줄링 못하는 pod 감시.
    • Evaluating : 각 pod 에 필요한 스케줄링 스팩사항 평가.
    • Provisioning : 해당 pod 에 충족되는 node 프로비저닝. 
    • Disrupting : 필요없는 node 중단.
  • node-pool 설정 : node 프로비저닝 관련 조건, 통합 및 만료, Kubelet 구성 등등 셋팅.
    • taints : node 에 taint 를 추가하여, pod 의 toleration 와 매칭을 기반으로 판단함.
    • labels : 키벨류 쌍을 node 에 지정하여, pod 와 매칭함.
    • requirements : 클라우드별 잘알려진 라벨을 (인스턴스 타입 등등등) 기반으로, 허용 / 불허용 을 설정함
    • limits : 클러스터의 CPU and Memory 한도를 제약하여, 프로비저닝 최대치 설정함.
  • workloads 배포 설정 : karpenter 가 해당 workloads 프로비저닝 할 node 의 스팩 제약 요청 가능.
    • resources : 각 pod 의 CPU and Memory 관련 셋팅.
    • nodeSelector : 선택할 node 의 라벨을 지정.
    • nodeAffinity : 선호하는 node ...
    • podAffinity : 특정 pod 가 노드에서 실행중인지? 아닌지? 를 기반으로 선택.
    • tolerations : 특정 pod 가 실행되기 전, node 의 taint 와 (tolerate) 매칭되는지? 판단.
      • toleration 없으면, taint 의 효과(NoSchedule, PreferNoSchedule, NoExecute 등) 발생
    • topologySpreadConstraints : 포드 토폴로지 분산 제약 조건
    • Persistent volume topology : ...
  • Getting Started with Karpenter
    • awscli,kc,ec,helm 설치 -> 환경변수 -> AWS 리소스 배포 -> EKS 생성 -> Karpenter 설치
    • NodePool : 하나의 node-pool 만으로도, 여러게의 pod 를 관리 할 수 있음.
    • Scale up/down Deployment : ...
    • Monitoring with Prometheus & Grafana : ...
  • ...

Karpenter 운영

  • EC2 인스턴스
    • managedNodeGroup -> 초기 Nodes -> LB Controller, Karpenter, argocd 등 관련 POD 배치.
    • Karpenter 는 이미 실행 중인 POD 를 해당 노드에 계속 유지. 자동으로 재배치(evict/relocate)하지는 않음.
    • 새로운 배포된 POD 만 새롭게 띄운 노드에 할당하지만, 특별한 설정에 의해 리벨런싱 될 수 도 있긴함.
      • kube-proxy, eks-pod-identity-agent, aws-node 는 필수 시스템 DaemonSet POD 임.
    • TODO : 기존 POD 는 기존 Nodes 에만 배치 되도록 한다?
    • TODO : Karpenter 의 SelectorTerms 으로 기존 Nodes 에는 할당 안되도록 한다?
  • ...

 

--- [%] 참조 -------

  • AWS Karpenter를 통해 EKS 클러스터 효율적으로 관리하기
  • (https://danykde0til.tistory.com/160 , https://danykde0til.tistory.com/161)

--- [%] 참고 -------

  • https://aws.amazon.com/ko/blogs/aws/introducing-karpenter-an-open-source-high-performance-kubernetes-cluster-autoscaler
  • https://aws.amazon.com/ko/blogs/korea/introducing-karpenter-an-open-source-high-performance-kubernetes-cluster-autoscaler
  • https://www.eksworkshop.com/docs/autoscaling/compute/karpenter
    • 컴퓨팅 리소스 공간을 자동으로 최적화 및 비용 절감
    • 기존 : "Amazon EC2 Auto Scaling Group", "Kubernetes Cluster Autoscaler" 을 사용하여 구성하기가 어려웠음
    • karpenter : POD 의 리소스 요청 및 K8S 이벤트 모니터링 -> 클라우드 공급자(EC2) 에게 컴퓨팅 명령을 내림.
  • https://devblog.kakaostyle.com/ko/2022-10-13-1-karpenter-on-eks
    • AWS 가 개발한 Kubernetes 의 Cluster Autoscaler 오픈소스 프로젝트
    • 기본 CA + ASG 방식 : POD 확장 -> pending -> CA 가 ASG 의 desired-capacity 값 수정 -> Node 증가
      • (생각보다 오래걸리고, 원하는 인스턴스 타입 비용 최적화X)
      • (원하는 운영 요구사항 반영을 위해, Launch Template 같은 AWS 자원들을 추가로 관리해야 하는 비용이 늘어남)
    • karpenter : AWS 리소스에 의존성이 없어 Just In-Time 배포 가능
      • (모든 Worker Node 는 Karpenter 가 집접 lifecycle 을 결정 하는등, 더 단순한 구조로 빠르게 처리함)
      • (Custom Resource Definition -> 인스턴스 타입, 스토리지 크기, IAM 역할 등을 손쉽게 정의)
      • (용도별 Provisioner 구성 -> 별도의 NodeGroup 생성이 필요 없어 -> 운영 부담 절감)
      • (기존 특정 Node 사용 장기화 이슈 -> ttlSecondsUntilExpired 통해, 주기적 eks-node 버전업 rolling-update)
      • (podAffinity, userdata 등 다양한 좋은 기능들을 제공)
    • % bin packing 알고리즘 최적화 문제 : Provisioner 에 다양한 인스턴스 정의 -> k8s Cluster 효율을 Karpenter 가 개선
  • https://boostbrothers.github.io/2023-11-01-infra-karpenter-migration
    • POD 변화 감지 -> 새로운 Worker Node 를 자동 확장/병합/제거 가능한 Autoscaler
    • 구성항목 : "Provisioner" 및 "AWSNodeTemplate"
      • (Provisioner 통해, 목적이 따라 consolidation 나  ttlSecondsAfterEmpty 를 선언 하거나)
      • (다양한 인스턴스 타입과 사용량/비용 최적화 전략를 손쉽게 사용 해 볼 수 있음)
  • https://jennifersoft.com/ko/blog/kubernetes/2023-10-18-kubernetes-8
  • https://jennifersoft.com/ko/blog/kubernetes/2023-10-25-kubernetes-9
    • 기존의 CAS = 프로바이더(AWS,Azure,GCP) 의 API 이용 -> EKS 와 관련없는 별도의 ASG -> EKS 노드 데이터 동기화
    • ASG 의 NodeGroup = 단일 인스턴스 타입만 사용 가능하여 자원의 낭비가 발생
    • Karpent = (ASG 안씀) -> EKS노드 직접증감 -> POD리소스스펙 -> 최적의 노드할당 -> POD종료 -> 기 노드 삭재 및 재할당 -> 자동 비용 최적화
    • CRD (Custom Resource Definition)
      • Provisioner : Provisioning 이란? 컴퓨팅 리소스를 할당, 구성, 관리하는 과정을 의미하는 용어.
      • AWSNodeTemplate : (하드웨어 타입을 제외한) 볼륨, 보안그룹, 서브넷 등 AWS 노드에 필요한 고유한 설정.
    • K8S POD 서비스 운영 안정화 기본 사항 
      • Graceful Shutdown
      • PodDistributionBudget
        • 특정 파드가 중단되는 동안 애플리케이션의 가용성과 안정성을 유지할 수 있습니다.
        • MinAvailable, MaxUnavailable, drain, cordon, uncordon, 
      • POD 이중화
  • https://blog.soomgo.com/posts/6673bb8d52107866fb86a793
    • ...

-끝-

'DevOps' 카테고리의 다른 글

Fly.io + WireGuard  (0) 2024.11.30
AKS 오션  (0) 2024.11.30
EKS 따배  (0) 2024.11.30
Graphite  (0) 2024.10.30
EKS 초기화  (0) 2023.09.14

+ Recent posts