다음은 쿠버네티스 스터디 자료를 참고해 정리한 내용입니다.
name space에 들어갈수 있는 pod의 용량의 제한 한다.
너무 큰 Pod는 못 들어가게 설정한다.
<1> 최대 용량 제한 limit
<2> 삭제
<3> 하한선 보장 Request
<4> 삭제
<5> 다음 과정
<1> 최대 용량 제한 limit
1
cat << EOF > limit-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: limit-pod
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["tail"]
args: ["-f", "/dev/null"]
resources:
limits:
memory: "256Mi"
cpu: "250m"
EOF
memory: "256Mi" → 파드의 컨테이너에 최대 메모리 사용량은 256Mi 으로 제한
cpu: "250m" → 250m(밀리코어) 는 0.25 CPU 의미로 해당 파드의 컨테이너는 최대 1CPU의 1/4 만큼의 사이클 사용 가능
2
kubectl apply -f limit-pod.yaml
3
확인
kubectl describe pod limit-pod | grep Limits -A 5
Limits:
cpu: 250m
memory: 256Mi
Requests:
cpu: 250m
memory: 256Mi
4
노드 확인
Limits 제한 설정 시, 자동으로 Request 설정됨
kubectl describe nodes <파드가 생성된 노드>
alias k=kubectl
complete -F __start_kubectl k
k get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
limit-pod 1/1 Running 0 80s 100.112.62.133 ip-172-20-39-212.ap-southeast-1.compute.internal <none> <none>
5
clear
상세 확인
kubectl describe nodes ip-172-20-39-212.ap-southeast-1.compute.internal
Name: ip-172-20-39-212.ap-southeast-1.compute.internal
Roles: node
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=t3.medium
:
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 570m (28%) 250m (12%)
memory 336Mi (8%) 426Mi (11%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
attachable-volumes-aws-ebs 0 0
Events: <none>
<2> 오브젝트 삭제
kubectl delete -f limit-pod.yaml
<3> 하한선 보장 Request
최소 사용량(하한선) 보장
1
cat << EOF > request-limit-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: request-limit-pod
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["tail"]
args: ["-f", "/dev/null"]
resources:
limits:
memory: "256Mi"
cpu: "250m"
requests:
memory: "128Mi"
cpu: "125m"
EOF
상한치 제한 값
limits:
memory: "256Mi"
cpu: "250m"
최소 사용량(하한선) 보장 값
requests:
memory: "128Mi"
cpu: "125m"
중요한 Pod는 최소 이정도 사양은 보장해야 한다고 설정 하는것이다.
2
kubectl apply -f request-limit-pod.yaml
3
확인
kubectl describe pod request-limit-pod | grep Limits -A 5
Limits:
cpu: 250m
memory: 256Mi
Requests:
cpu: 125m
memory: 128Mi
최대 Limit 설정 되어 있음. 최소 보장 설정 되어 있음
4
노드 확인
k get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
request-limit-pod 1/1 Running 0 52s 100.112.62.134 ip-172-20-39-212.ap-southeast-1.compute.internal <none> <none>
k describe nodes ip-172-20-39-212.ap-southeast-1.compute.internal
kubectl describe nodes <파드가 생성된 노드>
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
default request-limit-pod 125m (6%) 250m (12%) 128Mi (3%) 256Mi (6%) 2m14s
5
CPU 와 달리 메모리는 압축 불가능 자원
메모리는 경합 시 우선 순위 낮은 프로세스(포드)는 강제 종료
<4> 삭제
kubectl delete -f request-limit-pod.yaml
<5> 다음 과정
https://brunch.co.kr/@topasvga/1726
감사합니다.