# 도커 컨테이너와 pod의 차이점
- 도커 : 도커 컨테이너는 일단 동작하면 부하에 따라 호스트의 CPU나 메모리를 사용할 수 있는 만큼 사용한다.
- k8s 의 pod : 쿠버네티스 에서는 파드가 사용할 CPU/메모리의 양을 설정하고 호스트에 최소한의 부하를 주도록 설정하는 구조가 있다. (pod별 리소스 사용량을 지정 가능)
1. 예제 소스 코드를 활용한 requests와 limits 설명
- 예제코드 전체
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-app
labels:
app: backend-app
spec:
replicas: 2
selector:
matchLabels:
app: backend-app
template:
metadata:
labels:
app: backend-app
spec:
containers:
- name: backend-app
image: ${ECR_HOST}/k8sbook/backend-app:1.0.0
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: DB_URL
valueFrom:
secretKeyRef:
key: db-url
name: db-config
- name: DB_USERNAME
valueFrom:
secretKeyRef:
key: db-username
name: db-config
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
key: db-password
name: db-config
readinessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 15
periodSeconds: 30
livenessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 30
periodSeconds: 30
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
cpu: 250m
memory: 768Mi
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 2"]
- 리소스 사용량 설정 부분
- limits에는 pod가 사용할 수 있는 리소스 상한을 설정, requests는 pod 실행을 위한 최소한의 리소스 설정
- 이 조건들을 충족하지 않는 호스트에는 pod가 배치되지 않는다.
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
cpu: 250m
memory: 768Mi
- 만약 모든 호스트에 requests로 설정된 리소스양의 여유가 없을경우 Pending 상태가 되어 정상적으로 pod를 동작 시키지 않는다.
2. 파드가 요청 가능한 리소스 사용량을 관리하는 리밋 레인지
- 리밋 레인지란?
- 파드를 배포할때 requests와 limits을 정확이 설정하여 배포한다면 아무런 문제가 발생하지 않는다. 하지만 requests와 limits 설정 하는 부분을 누락하거나 잘 모르는 엔지니어 및 개발자가 배포한다면 리소스 활용을 효율적으로 운영하지 못하게 된다.
- 이러한 문제점을 사전에 방지하기 위해 쿠버네티스에는 리밋 레인지라는 기능이 존재한다.
- 리밋레인지는 네임스페이스 기반으로, pod의 리소스 사용량의 기본값을 설정해 놓은것이다.
예를들어 k8s라는 네임스페이스의 리소스 기본 사용량을 requests = 2048m, limits = 2048m 으로 설정할 경우 k8s의 네임스페이스의 기본값으로 세팅된다. 반면에 jenkins이라는 네임스페이스는 requests=512m, limits=512m 으로 설정할 경우 jenkins 네임스페이스의 리소스 사용량은 512m로 제한된다.
3. 리소스의 총 요구량을 관리하는 리소스 쿼터
- 리소스 쿼터는 네임스페이스 기반으로 pod의 수를 제한하는 역할을 한다.
- 예제 코드
ResourceQuota:
pod: 5
- 끝 -
'⭐ Kubernetes & EKS > EKS' 카테고리의 다른 글
GKE vs EKS vs AKS 비교 (0) | 2022.02.25 |
---|---|
Horizontal Pod Autoscaler를 이용한 파드 오토스케일링 (0) | 2022.01.03 |
pod의 헬스체크 (Readiness Probe와 Liveness Probe) (0) | 2022.01.03 |
컨테이너를 외부로 공개하기 위한 리소스 (0) | 2022.01.03 |
실수로 keypair 파일을 삭제 했을 경우 (0) | 2021.10.10 |