ㅁ Resource Management 기능 정의
Kubernetes Request
Pod에 사용 가능한 정의된 리소스가 충분히 있는지 확인하는데 사용된다. Pod가 지정된 것보다 더 많이 사용할 수 있다. 이것은 Soft Limit으로 간주된다.
Kubernetes Limit
Pod가 지정된 범위 이상으로 사용하지 않도록 하는데 사용된다. 이것은 Hard Limit으로 간주된다.
Kubernetes Quotas
Namespace당 리소스 사용량을 제한하는데 사용된다.
Kubernetes Pod Priority and Preemption
Pod별 우선 순위를 적용하는데 사용된다. Pod를 Node에 배치할 수 없는 경우 우선 순위가 낮은 Pod를 선점하거나 제거할 수 있다.
ㅁ POD CPU 및 MEMORY 기본 관리
먼저 4개의 Pod를 생성한다.
- request deployment : Request cpu = 0.5, memory = 1G
- limit-cpu deployment: Limit cpu = 0.5, memory =1G
- limit-memory deployment: Limit cpu = 1, memory = 1G
- restricted deployment: Request cpu =1, memory = 1G | Limit cpu = 1.8, memory = 2G
먼저 metric server를 deploy 한다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
설치 이후 정상 상태 확인을 위하여 다음과 같이 검증한다.
kubectl get apiservice v1beta1.metrics.k8s.io -o json | jq '.status'
{
"conditions": [
{
"lastTransitionTime": "2021-03-18T08:50:27Z",
"message": "endpoints for service/metrics-server in \"kube-system\" have no addresses with port name \"https\"",
"reason": "MissingEndpoints",
"status": "False",
"type": "Available"
}
]
}
설치된 metrics-server의 deployment 수를 확인한다.
kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 3m13s
ㅁ Deploy Pods
CPU와 Memory Load를 Generate 하기 위하여 다음 Tag를 사용하여 stress-ng를 실행한다.
- vm-keep: 일관된 메모리 사용 유지
- vm-bytes: 각 worker에 bytes 제공
- vm: spawn할 worker 수, 예. vm = 1은 1000m CPU 사용, vm = 2는 2000m CPU 사용
- oomable: OOM killer로 kill 이후 다시 respawn 되지 않음
- verbose: 모든 정보 출력 표시
- timeout: 테스트 기간
# Deploy Limits pod with hard limit on cpu at 500m but wants 1000m
kubectl run --limits=memory=1G,cpu=0.5 --image hande007/stress-ng basic-limit-cpu-pod --restart=Never -- --vm-keep --vm-bytes 512m --timeout 600s --vm 1 --oomable --verbose
# Deploy Request pod with soft limit on memory
kubectl run --requests=memory=1G,cpu=0.5 --image hande007/stress-ng basic-request-pod --restart=Never -- --vm-keep --vm-bytes 2g --timeout 600s --vm 1 --oomable --verbose
# Deploy restricted pod with limits and requests wants cpu 2 and memory at 1G
kubectl run --requests=cpu=1,memory=1G --limits=cpu=1.8,memory=2G --image hande007/stress-ng basic-restricted-pod --restart=Never -- --vm-keep --vm-bytes 1g --timeout 600s --vm 2 --oomable --verbose
# Deploy Limits pod with hard limit on memory at 1G but wants 2G
kubectl run --limits=memory=1G,cpu=1 --image hande007/stress-ng basic-limit-memory-pod --restart=Never -- --vm-keep --vm-bytes 2g --timeout 600s --vm 1 --oomable --verbose
basic-limit-memory-pod는 Limit 1G가 할당되어 생성시 정의한 -vm-bytes의 용량 2G의 설정으로 생성이 안될 것으로 보임
eksuser:~/environment $ kubectl get pod
NAME READY STATUS RESTARTS AGE
basic-limit-cpu-pod 1/1 Running 0 8m58s
basic-limit-memory-pod 0/1 OOMKilled 0 5m29s
basic-request-pod 1/1 Running 0 6s
basic-restricted-pod 1/1 Running 0 5m37s
kubernetes Request와 limit은 Deployment 생성시 yaml을 통해 정의 가능하다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: stress-deployment
name: stress-deployment
spec:
replicas: 1
selector:
matchLabels:
app: stress-deployment
template:
metadata:
labels:
app: stress-deployment
spec:
containers:
- args:
- --vm-keep
- --vm-bytes
- 1500m
- --timeout
- 600s
- --vm
- "3"
- --oomable
- --verbose
image: hande007/stress-ng
name: stress-deployment
resources:
limits:
cpu: 2200m
memory: 2G
requests:
cpu: "1"
memory: 1G
Cleanup
kubectl delete pod basic-request-pod
kubectl delete pod basic-limit-memory-pod
kubectl delete pod basic-limit-cpu-pod
kubectl delete pod basic-restricted-pod
'AWS EKS 실습 > EKS Intermediate' 카테고리의 다른 글
Deploying Jenkins for Kubernetes (0) | 2021.03.19 |
---|---|
Advanced POD CPU and Memory management (0) | 2021.03.18 |
Pod Priority And Preemption (0) | 2021.03.18 |
Resource Quotas (0) | 2021.03.18 |
OPA Policy - Example 1: 승인된 Container Registry 만 사용하도록 정책 정의 (0) | 2021.03.18 |