ResourceQuota
하나의 기능임! 리소스 쿼터를 사용하여 각 네임스페이스마다, 즉 가상 쿠버네티스 클러스터마다 사용 가능한 리소스를 제한할 수 있다. 리소스 쿼터는 생성이나 변경으로 그 시점에 제한이 걸린 상태가 되어도 이미 생성된 리소스에는 영향을 주지 않기 때문에 주의해야 한다. 리소스 쿼터는 크게 '생성 가능한 리소스 제한'과 '리소스 사용량 제한'으로 나눌 수 있다. |
총량이 CPU가 4G, RAM 2G라고 정해둔다면
아무리 파드를 만들어도 이 정해진 범위를 넘어서 생성되지 않는다.
실습해보자.
kubectl create namespace jyoonchu
먼저 네임스페이스를 하나 만들어줌.
# vi sample-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: sample-resourcequota
namespace: jyoonchu
spec:
hard:
count/pods: 5
# kubectl apply -f sample-resourcequota.yaml
파드의 갯수는 5개로 지정함
제한된 용량을 초과하면 파드가 지워지거나 파드가 멈추기도 한다.
k describe resourcequotas sample-resourcequota -n jyoonchu
방금 만든 내용을 확인함.
5개가 만들어졌고, 현재 사용 중이지는 않음.
kubectl run new-nginx1 --image=34.22.96.240:5000/nginx:latest -n jyoonchu
GCP 도커인스턴스의 외부 IP
1개가 생성됨!!
5개를 만들어보았더니 모두 생성됨.
그 후 6개번째 생성하려고 했더니 파드 갯수의 제한으로 인해 Error가 뜨고 만들어지지 않음!
k delete pod -n jyoonchu --all
실습 후 모든 자원 삭제 완료~~
# vi sample-resourcequota-usable.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: sample-resourcequota-usable
namespace: jyoonchu
spec:
hard:
# 네임스페이스의 모든 파드에 대해, 각 컨테이너에는 메모리 요청량(request), 메모리 상한(limit), CPU 요청량 및 CPU 상한이 있어야 한다.
requests.cpu: "1" # 네임스페이스의 모든 파드에 대한 총 CPU 요청량은 1 cpu를 초과해서는 안된다.
requests.memory: 1Gi # 네임스페이스의 모든 파드에 대한 총 메모리 요청량은 1GiB를 초과하지 않아야 한다.
requests.storage: 5Gi
requests.ephemeral-storage: 5Gi
requests.nvidia.com/gpu: 2
limits.cpu: 4 # 네임스페이스의 모든 파드에 대한 총 CPU 상한은 4 cpu를 초과해서는 안된다.
limits.memory: 2Gi # 네임스페이스의 모든 파드에 대한 총 메모리 상한은 2GiB를 초과하지 않아야 한다.
# limits.storage: 10Gi
limits.ephemeral-storage: 10Gi
limits.nvidia.com/gpu: 4
sample-storageclass.storageclass.storage.k8s.io/requests.storage: 5Gi
# k apply -f sample-resourcequota-usable.yaml
현재 네임스페이스에 리소스가 없는데도 만들어지지 않는다?
Error from server (Forbidden): pods "new-nginx1" is forbidden: failed quota: sample-resourcequota-usable: must specify limits.cpu,limits.memory,requests.cpu,requests.memory
이 에러의 의미:
리소스를 쿼터를 지정하지 않았기 때문에 만들어지지 않는다.
# vi sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: jyoonchu
spec:
containers:
- name: nginx-container
image: 34.22.96.240:5000/nginx:latest
# kubectl apply -f sample-pod.yaml
이렇게 해도 만들어지지 않는다!!
# vi sample-resource.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-resource
namespace: jyoonchu
spec:
replicas: 1
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: 34.22.96.240:5000/nginx:latest
resources:
requests: # 최소
memory: "1Gi"
cpu: "2"
limits: # 최대
memory: "2Gi"
cpu: "4"
# k apply -f sample-resource.yaml
용량을 넣었더니 일단 들어는 감!
deploy에는 있는데 pod가 없네?!
결국 생성되지 않은것임..
이유를 확인해보자구
k describe deployments.apps sample-resource -n jyoonchu
cpu 1개를 초과하지 말라고 했는데 yaml 파일을 보면 2개로 지정되어 있음..
request가 오버되어 pod가 생성되지 않은 것이다.
k describe resourcequotas -n jyoonchu sample-resourcequota-usable
보면 파드가 아예 생성 자체가 되지 않은 것을 확인할 수 있다.
아까 정의했던 sample-resource.yaml 내용을 변경해보기!!
# vi sample-resource.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-resource
namespace: jyoonchu
spec:
replicas: 1
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: 34.22.96.240:5000/nginx:latest
resources:
requests: # 최소
memory: "250Mi"
cpu: "250m"
limits: # 최대
memory: "500Mi"
cpu: "1"
# k apply -f sample-resource.yaml
바로 1개가 생김!!
그렇다면~
k edit deployments.apps -n jyoonchu sample-resource
edit에서 replicas 갯수를 4개로 변경해 보았음!
파드가 4개로 바로 변경된 것을 확인할 수 있었음....!
어렵다 ㅠㅠ
만약 scale out으로 갯수를 5개로 만들어본다면?
k edit deployments.apps -n jyoonchu sample-resource
CPU가 250으로 설정되기에 초과했어도 파드가 생기지 않는다.
실습자원 삭제하기!
k delete -f sample-resource.yaml
'Kubernetes' 카테고리의 다른 글
Kubernetes - 모니터링 (0) | 2024.02.20 |
---|---|
Kubernetes - Lemit Range ?? (0) | 2024.02.20 |
쿠버네티스-namespace (0) | 2024.02.19 |
쿠버네티스-ConfigMap (0) | 2024.02.19 |
쿠버네티스 - GCP에서 이미지를 띄워서 쿠버네티스 해보기 (pv정적프로비저닝) (0) | 2024.02.19 |