5단계 : 워크로드 배포
AWS Karpenter로 최적화된 Kubernetes 클러스터에 애플리케이션 워크로드를 배포하려면 리소스를 효율적으로 활용할 수 있도록 세심한 계획이 필요합니다. 이 섹션에서는 Karpenter의 동적 프로비저닝 기능을 최대한 활용하기 위한 워크로드 배포 전략에 대해 설명합니다.
워크로드 요구사항 이해하기
애플리케이션을 배포하기 전에 리소스 요구사항을 평가하십시오. 이를 통해 Karpenter가 리소스를 보다 효과적으로 프로비저닝할 수 있습니다.
- CPU / Memory Request: Deployment yaml 파일에 적절한 CPU / Memory Request(요청 값)을 정의하여 Karpenter가 아래와 같은 요구사항을 충족할 수 있는 Node로 Provisioning할 수 있도록 합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-app
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: example/image
resources:
requests:
cpu: "250m"
memory: "512Mi"
위의 yaml 파일은 각 Pod가 250 milli cpu와 512Mi의 Memory를 요청하는 Deployment입니다.
애플리케이션 배포하기
kubectl apply -f example-app-deployment.yaml
Karpenter는 이러한 배포 요청을 관찰하고 기존 리소스가 충분하지 않을 경우 적절한 노드를 프로비저닝합니다.
6단계 Karpenter에 최적화하기
1. Pod Disruption Budgets: Pod Disruption Budgets을 구현하여 스케일링 다운 활동 중 중단을 최소화합니다. 이는 동적 Scaling 작업 중 높은 가용성을 보장할 수 있습니다.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: example-app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: example
이 PDB는 최소한 두 개의 애플리케이션 replicas가 항상 사용 가능한 상태를 설정해줍니다.
2. Affinity 및 Anti-Affinity: Affinity 및 Anti-Affinity 규칙을 사용하여 Karpenter가 포드를 스케줄링하는 방식을 조정하십시오. 이는 포드를 다른 노드 또는 가용성 영역에 분산시켜 고가용성과 내결함성을 보장합니다.
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- example
topologyKey: "kubernetes.io/hostname"
위 내용은 동일한 애플리케이션의 Pod를 동일한 Node에 배치하지 않도록 권장하여 내결함성을 강화할 수 있습니다.
3. 명확한 Resource 요구사항 정의
Pod Yaml 파일에 명확한 CPU 및 Memory Request(요청값)를 포함하세요. Karpenter가 가장 적합한 인스턴스를 프로비저닝하는 데 필요한 정보를 제공하여 리소스 활용과 비용을 최적화할 수 있습니다.
resources:
requests:
cpu: "1"
memory: "2Gi"
4. 클러스터 Auto Scaling 최적화
ttlSecondsAfterEmpty 매개변수를 구성하여 Karpenter가 효율적으로 스케일 다운할 수 있도록 하십시오. 이 설정은 노드가 비어 있는 상태로 클러스터에 남아 있어야 하는 시간을 결정하여 필요 없는 리소스를 종료함으로써 비용을 절감할 수 있습니다.
spec:
ttlSecondsAfterEmpty: 300 # 5분
5. 리소스 관리를 위한 태그 활용
provionor 내에서 태그를 활용하여 리소스 추적 및 관리를 간소화하십시오. 태그는 비용 할당과 같은 자동화 전략에 도움이 됩니다.
spec:
provider:
tags:
Environment: Production
Application: MyApp
6단계 : Karpenter Monitoring
AWS CloudWatch를 활용하여 Scaling Event와 Resource의 사용량을 모니터링할 수 있습니다. Karpenter의 동작을 관찰함으로써 프로비저닝 전략을 개선하고 비용 효율적이고 효율적인 Scaling 을 보장할 수 있습니다. 아래 명령어는 Karpenter와 관련된 Metric을 리스트로 확인할 수 있습니다. 경우에 따라 중요한 Metric을 지속적으로 모니터링하기 위해 알람이나 대시보드를 설정할 수 있습니다.
aws cloudwatch list-metrics --namespace "AWS/Karpenter"
마무리
AWS Karpenter는 Kubernetes Auto Scaling 으로 워크로드 비용 최적화 전략에 맞춘 동적 프로비저닝 기능을 제공합니다. AWS 기반 Kubernetes 클러스터에서 Karpenter의 기능을 사용하여 리소스를 효율적으로 사용하고 비용을 절감할 수 있습니다.
'DevOps > k8s' 카테고리의 다른 글
[CKS] 이론편 : Kubernete Security 기본 개념 (3) | 2024.06.19 |
---|---|
[K8s] 쿠버네티스에서의 헬스체크 LivenessProbe, ReadnessProbe (2) | 2024.06.18 |
[K8s] AWS Karpenter를 통해 EKS 클러스터 효율적으로 관리하기 1편_기본 구성 (2) | 2024.06.14 |
[k8s] 명령어 8개로 가장 빠르게 클러스터 생성하고 쿠버네티스 모니터링까지 (5) | 2024.02.16 |
Kubernetes 환경에 Prometheus와 Grafana를 설치하고 통합하기 (0) | 2024.01.24 |