Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 공매
- command
- 산지연금
- 세금계산서
- route53
- 신탁공매
- 성능개선
- AWS
- kubectl
- 매입불공제
- 금융소득
- python
- 경매
- serverless
- 농지연금
- OpenSearch
- node
- 임업후계자
- Resolver
- Kubernetes
- 외국납부세액공제
- pod
- 정책자금
- 양도소득세
- boto3
- Filter
- lambda
- S3
- 인덱싱
- 리소스
Archives
- Today
- Total
진지한 개발자
Kubernetes 운영 시 자원할당 (Node, Pod, CPU, Memory) 본문
728x90
1. Node와 Pod의 관계
- Node: 실제 또는 가상 머신. Kubernetes 클러스터의 워커 유닛.
- Pod: 하나 이상의 컨테이너를 포함하는 최소 배포 단위. Node 위에 스케줄됨.
- 스케줄링: Kubernetes는 Pod의 리소스 요청을 기반으로 적절한 Node에 Pod를 배치함.
2. CPU와 Memory 자원 요청 및 제한
resources.requests
- Pod가 최소한으로 필요한 자원을 명시
- 스케줄러가 이 값을 기준으로 Node에 배치
- 예: requests.cpu: "500m" → 최소 0.5 CPU core 필요
resources.limits
- Pod가 사용할 수 있는 최대 자원을 제한
- 초과 시 CPU는 throttling, Memory는 OOM(Out of Memory)으로 종료
resources:
requests:
cpu: "500m"
memory: "256Mi"
limits:
cpu: "1"
memory: "512Mi"
3. Node의 자원 관리
- Node는 kubelet을 통해 각 Pod의 리소스를 모니터링
- Node의 전체 자원 중 일부는 시스템 데몬(kubelet, kube-proxy 등)을 위해 예약됨
- Allocatable 자원: Pod에 할당 가능한 실제 자원
kubectl describe node <node-name>
4. Pod 스케줄링 관련 고려사항
- Pod는 requests 기준으로 스케줄됨
- limits는 스케줄링에 영향을 주지 않음
- Node에 충분한 Allocatable 자원이 없으면 Pending 상태로 남음
5. 리소스 모니터링 및 최적화
- Metrics Server: Pod/Node의 실시간 리소스 사용량 수집
- Vertical Pod Autoscaler (VPA): Pod의 리소스 요청/제한 자동 조정
- Horizontal Pod Autoscaler (HPA): CPU 사용률 기반으로 Pod 수 자동 조정
kubectl top pod
kubectl top node
6. Best Practices
- 리소스 요청 설정 : 모든 Pod에 requests를 설정하여 안정적인 스케줄링 보장
- 리소스 제한 설정 : limits를 설정하여 과도한 자원 사용 방지
- 모니터링 도구 : Prometheus + Grafana, Metrics Server 등 활용
- 오토스케일링 : HPA/VPA를 통해 동적 자원 조절
- Node 자원 예약 : system-reserved, kube-reserved 설정으로 안정성 확보
7. Pod 리소스 요청/제한에 따른 배치 예시
예시 1: Pod당 cpu: 500m, memory: 1Gi 요청
8core 64GB 노드:
CPU 기준: 8 / 0.5 = 최대 16개
Memory 기준: 64 / 1 = 최대 64개 → CPU 기준으로 최대 16개 Pod 배치 가능
4core 32GB 노드:
CPU 기준: 4 / 0.5 = 최대 8개
Memory 기준: 32 / 1 = 최대 32개 → CPU 기준으로 최대 8개 Pod 배치 가능
예시 2: 다양한 Pod 리소스 조합 예시
Pod 리소스 요청 | 8core 64GB 노드 | 4core 32GB 노드 |
---|---|---|
cpu: 1, memory: 2Gi | 최대 8개 | 최대 4개 |
cpu: 250m, memory: 512Mi | 최대 32개 | 최대 16개 |
cpu: 2, memory: 8Gi | 최대 4개 | 최대 2개 |
실제로는 kubelet, system daemon 등이 사용하는 리소스를 고려해 약간 줄어듬
5. Pod 배치 최적화 팁
- 리소스 요청(requests)와 제한(limits)을 명확히 설정
- HPA/VPA를 통해 자동 조절
- Node Affinity / Taints & Tolerations로 특정 노드에만 배치
- Pod Overhead 고려 (특히 CNI, CSI 등)
6. 실전 운영 팁
- kubectl describe node
로 실제 allocatable 자원 확인 - kubectl top node / kubectl top pod로 실시간 사용량 모니터링
- Prometheus + Grafana로 리소스 시각화
- 리소스 부족 시 Pending 상태 확인 → 스케줄링 실패 원인 분석
728x90