시나리오1
rq.yaml 명세서 작성
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq
namespace: space1
spec:
hard:
requests.memory: 1Gi
requests.cpu: "1000m" #1000밀리 코어 = 1코어
limits.memory: 1Gi
limits.cpu: "1500m"
namespace 생성/namespace 기반의 ResourceQuota 생성
root@ip-172-31-4-27:~/resource# kubectl create ns space1
namespace/space1 created
#@ namespace에 ResourceQuota를 적용한다.
root@ip-172-31-4-27:~/resource# kubectl create -n space1 -f rq.yaml
resourcequota/rq created
#@ResourceQuota 적용 확인
root@ip-172-31-4-27:~/resource# kubectl describe resourcequotas --namespace=space1
Name: rq
Namespace: space1
Resource Used Hard
-------- ---- ----
limits.cpu 0 1500m
limits.memory 0 1Gi
requests.cpu 0 1
requests.memory 0 1Gi
#@alias로 간편하게 설정
$ alias ksp1="kubectl -n space1 "
#@ namespace가 space1의 ResourceQuota 정보 확인
root@ip-172-31-4-27:~/resource# ksp1 get resourcequotas
NAME AGE REQUEST LIMIT
rq 2m7s requests.cpu: 0/1, requests.memory: 0/1Gi limits.cpu: 0/1500m, limits.memory: 0/1Gi
pod.yaml 명세서 작성
apiVersion: v1 #request limit 을 적용하지 않은 경우
kind: Pod
metadata:
name: pod-rq
spec:
containers:
- name: nasamjang02
image: nginx
pod 생성시 reject 되는지 확인한다.
#@ reject 사유 : must specify limits.cpu,limits.memory,requests.cpu,requests.memory
root@ip-172-31-4-27:~/resource# ksp1 create -f pod.yaml
Error from server (Forbidden): error when creating "pod.yaml": pods "pod-rq" is forbidden: failed quota: rq: must specify limits.cpu,limits.memory,requests.cpu,requests.memory
pod-rq1.yaml 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-rq
spec:
containers:
- name: nasamjang02
image: nginx
resources: #<--------메모리 관련 설정 이하 추가
requests:
memory: 0.1Gi
limits:
memory: 0.1Gi
pod 생성시 forbidden 이유를 확인한다.
#@ 쿼터에 CPU 값도 설정을 했기 떄문에 또 reject이 발생한다.
root@ip-172-31-4-27:~/resource# ksp1 create -f pod-rq1.yaml
Error from server (Forbidden): error when creating "pod-rq1.yaml": pods "pod-rq" is forbidden: failed quota: rq: must specify limits.cpu,requests.cpu
pod-rq2.yaml 명세서 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-rq
spec:
containers:
- name: nasamjang02
image: nginx
resources:
requests:
memory: 0.1Gi
cpu: "100m" #<--------CPU까지 추가
limits:
memory: 0.1Gi
cpu: "100m" #<--------추가
ResourceQuota에 모두 만족하므로 생성 가능
root@ip-172-31-4-27:~/resource# ksp1 create -f pod-rq2.yaml
pod/pod-rq created
rq.yaml 명세서 생성
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq
namespace: space1
spec:
hard:
requests.memory: 1Gi
limits.memory: 1Gi
pods: 2 #<------추가
pod: 2를 추가 하여 ResourceQuota 수정/적용
root@ip-172-31-4-27:~/resource# ksp1 apply -f rq.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
resourcequota/rq configured
pods : 2를 정상 적용된 것을 확인한다.
root@ip-172-31-4-27:~/resource# ksp1 describe resourcequotas
Name: rq
Namespace: space1
Resource Used Hard
-------- ---- ----
limits.cpu 100m 1500m
limits.memory 107374182400m 1Gi
pods 1 2
requests.cpu 100m 1
requests.memory 107374182400m 1Gi
pod-rq2.yaml 명세서에서 pod name을 변경
pod-rq2 생성 완료 확인
root@ip-172-31-4-27:~/resource# ksp1 create -f pod-rq2.yaml
pod/pod-rq2 created
pod-rq2.yaml 명세서에서 pod name을 변경
rq-3에 대해서 forbidden 사유 : pod 갯수가 2개로 제한되어 있기때문에 3은 forbidden 된것을 확인
root@ip-172-31-4-27:~/resource# ksp1 create -f pod-rq2.yaml
Error from server (Forbidden): error when creating "pod-rq2.yaml": pods "pod-rq3" is forbidden: exceeded quota: rq, requested: pods=1, used: pods=2, limited: pods=2
시나리오2 (이미 pod가 배포된 상태, ResourceQuota를 변경하면 어떻게 되는지 확인하는 시나리오)
신규 space2 namespace 생성
root@ip-172-31-4-27:~/resource# kubectl create ns space2
namespace/space2 created
pod-rq1.yaml 명세서 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-rq1
spec:
containers:
- name: nasamjang02
image: nginx
resources:
requests:
memory: 1Gi
limits:
memory: 1Gi
$alias ksp2='kubectl -n space2 '
root@ip-172-31-4-27:~/resource# ksp2 create -f pod-rq1.yaml
pod/pod-rq1 created
namespace : space2 에는 아직 ResourceQuota를 설정해 주지 않았다.
root@ip-172-31-4-27:~/resource# ksp2 describe resourcequotas
No resources found in space2 namespace.
namespace : space2 에 ResourceQuota 적용
root@ip-172-31-4-27:~/resource# ksp2 create -f rq.yaml
resourcequota/rq created
namespace : space2 에 적용된 ResourceQuota 확인
root@ip-172-31-4-27:~/resource# ksp2 describe resourcequotas
Name: rq
Namespace: space2
Resource Used Hard
-------- ---- ----
limits.memory 1Gi 1Gi
pods 1 2
requests.memory 1Gi 1Gi
pod-rq1.yaml 명세서 작성 (이름 변경해서 적용을 했을때 어떻게 되는가?)
이미 설정값을 만족했기 때문에 forbidden이 발생한다.
root@ip-172-31-4-27:~/resource# ksp2 create -f pod-rq1.yaml
Error from server (Forbidden): error when creating "pod-rq1.yaml": pods "pod-rq2" is forbidden: exceeded quota: rq, requested: limits.memory=1Gi,requests.memory=1Gi, used: limits.memory=1Gi,requests.memory=1Gi, limited: limits.memory=1Gi,requests.memory=1Gi
어떤 오류메시지인지 확인필요
root@ip-172-31-4-27:~/resource# ksp2 create -f pod.yaml
Error from server (Forbidden): error when creating "pod.yaml": pods "pod-rq" is forbidden: failed quota: rq: must specify limits.memory,requests.memory
object-counts.yaml 명세서 작성
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
secrets: "10"
services: "10"
services.loadbalancers: "2"
root@ip-172-31-4-27:~/resource# kubectl create -f object-counts.yaml --namespace=space2
resourcequota/object-counts created
root@ip-172-31-4-27:~/resource# ksp2 describe resourcequotas
Name: object-counts
Namespace: space2
Resource Used Hard
-------- ---- ----
configmaps 0 10
persistentvolumeclaims 0 4
secrets 1 10
services 0 10
services.loadbalancers 0 2
Name: rq
Namespace: space2
Resource Used Hard
-------- ---- ----
limits.memory 1Gi 1Gi
pods 1 2
requests.memory 1Gi 1Gi
시나리오3 : resource Limit test
limit.yaml 명세서 작성
apiVersion: v1
kind: LimitRange # LimitRange를 설정한다.
metadata:
name: lr-base
spec:
limits:
- type: Pod #Pod 레벨의 limit 설정
min:
cpu: 50m
memory: 5Mi
max:
cpu: 1
memory: 1Gi
- type: Container
defaultRequest: # 컨테이너의 기본값 설정
cpu: 100m
memory: 10Mi
default:
cpu: 200m
memory: 100Mi
min:
cpu: 50m
memory: 5Mi
max:
cpu: 1
memory: 1Gi
maxLimitRequestRatio:
cpu: 4
memory: 10
root@ip-172-31-4-27:~/resource# kubectl create -f limit.yaml --namespace=space2
limitrange/lr-base created
#@ 리소스를 확인한다.
root@ip-172-31-4-27:~/resource# kubectl get -f limit.yaml --namespace=space2
NAME CREATED AT
lr-base 2020-12-04T01:28:06Z
#@ 파드레벨, 컨테이너레벨의 정보 조회 확인
root@ip-172-31-4-27:~/resource# kubectl describe -f limit.yaml --namespace=space2
Name: lr-base
Namespace: space2
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod cpu 50m 1 - - -
Pod memory 5Mi 1Gi - - -
Container cpu 50m 1 100m 200m 4
Container memory 5Mi 1Gi 10Mi 100Mi 10
#@ 제한된 리소스 초과(메모리, CPU)로 인해 forbidden 발생 확인
root@ip-172-31-4-27:~/resource# kubectl create -f pod.yaml --namespace=space2
Error from server (Forbidden): error when creating "pod.yaml": pods "pod-rq" is forbidden: exceeded quota: rq, requested: limits.memory=100Mi,requests.memory=10Mi, used: limits.memory=1Gi,requests.memory=1Gi, limited: limits.memory=1Gi,requests.memory=1Gi
#@ namespace=space2로 생성된 모든 po를 삭제
root@ip-172-31-4-27:~/resource# kubectl delete po --all --namespace=space2
pod "pod-rq1" deleted
#@ 제한된 리소스를 초과하지 않으므로 pod 생성 완료
root@ip-172-31-4-27:~/resource# kubectl create -f pod.yaml --namespace=space2
pod/pod-rq created
#@ pod.yaml은 limit 을 설정하지 않았었다. 기본 limit_range에 의해서 적용되어 있는지 확인한다.
root@ip-172-31-4-27:~/resource# kubectl get -f pod.yaml --namespace=space2 -o yaml
생략
:
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nasamjang02
resources:
limits:
cpu: 200m
memory: 100Mi
requests:
cpu: 100m
memory: 10Mi
root@ip-172-31-4-27:~/resource# ksp2 describe resourcequotas
Name: object-counts
Namespace: space2
Resource Used Hard
-------- ---- ----
configmaps 0 10
persistentvolumeclaims 0 4
secrets 1 10
services 0 10
services.loadbalancers 0 2
Name: rq
Namespace: space2
Resource Used Hard
-------- ---- ----
limits.memory 100Mi 1Gi
pods 1 2
requests.memory 10Mi 1Gi
root@ip-172-31-4-27:~/resource# ksp2 describe limitranges
Name: lr-base
Namespace: space2
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod cpu 50m 1 - - -
Pod memory 5Mi 1Gi - - -
Container cpu 50m 1 100m 200m 4
Container memory 5Mi 1Gi 10Mi 100Mi 10
pod-rq2.yaml 명세서 작성 및 실행/확인
apiVersion: v1
kind: Pod
metadata:
name: pod-rq-3
spec:
containers:
- name: nasamjang02
image: nginx
resources:
requests:
memory: 2Mi #<--------- min 5Mi 이하 test. limit_range 테스트
cpu: "100m"
# limits:
# memory: 0.1Gi
# cpu: "100m"
#@ ratio에 의해서 forbidden
root@ip-172-31-4-27:~/resource# kubectl create -f pod-rq2.yaml --namespace=space2
Error from server (Forbidden): error when creating "pod-rq2.yaml": pods "pod-rq-3" is forbidden: [minimum memory usage per Pod is 5Mi, but request is 2097152, minimum memory usage per Container is 5Mi, but request is 2Mi, memory max limit to request ratio per Container is 10, but provided ratio is 50.000000]
$ vi pod-rq2.yaml <------- memory: 5Mi 로 수정 (ratio 위배)
root@ip-172-31-4-27:~/resource# kubectl create -f pod-rq2.yaml --namespace=space2
Error from server (Forbidden): error when creating "pod-rq2.yaml": pods "pod-rq-3" is forbidden: memory max limit to request ratio per Container is 10, but provided ratio is 20.000000
$ vi pod-rq2.yaml <------- memory: 10Mi (ratio 10)
root@ip-172-31-4-27:~/resource# kubectl create -f pod-rq2.yaml --namespace=space2
pod/pod-rq-3 created
root@ip-172-31-4-27:~/resource# kubectl get -f pod-rq2.yaml --namespace=space2
NAME READY STATUS RESTARTS AGE
pod-rq-3 1/1 Running 0 16s
$
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nasamjang02
resources:
limits:
cpu: 200m
memory: 100Mi
requests:
cpu: 100m
memory: 10Mi
root@ip-172-31-4-27:~/resource# ksp2 describe resourcequotas
Name: object-counts
Namespace: space2
Resource Used Hard
-------- ---- ----
configmaps 0 10
persistentvolumeclaims 0 4
secrets 1 10
services 0 10
services.loadbalancers 0 2
Name: rq
Namespace: space2
Resource Used Hard
-------- ---- ----
limits.memory 200Mi 1Gi
pods 2 2
requests.memory 20Mi 1Gi
root@ip-172-31-4-27:~/resource# ksp2 describe limitranges
Name: lr-base
Namespace: space2
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod cpu 50m 1 - - -
Pod memory 5Mi 1Gi - - -
Container memory 5Mi 1Gi 10Mi 100Mi 10
Container cpu 50m 1 100m 200m 4
'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글
Helm 설치/Helm을 이용한 mysql 설치 (0) | 2020.12.06 |
---|---|
Helm (0) | 2020.12.06 |
Pod의 Resource 관리 (0) | 2020.12.03 |
Ingress Controller (0) | 2020.12.03 |
Service Controller (0) | 2020.12.03 |