kubernetes
20210907 (화) request resource, limitrange
gusalstm
2021. 9. 7. 11:55
반응형
Pod의 리소스 관리
### metrics-server 설치 및 kubectl top nodes 명령어 실행 ### 깃허브 : kubernetes-sigs / metrics-server /releases/latest/download/components.yaml components.yaml 파일에서 137줄에 아래 내용 삽입 (tls 인증을 생략하는 arguments) 137 - --kubelet-insecure-tls kubectl create -f components.ytaml kubectl get pod -n kube-system kubectl top nodes vagrant@kube-control1:~/work/20210907/metrics-server$ kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% kube-control1 359m 17% 1591Mi 41% kube-node1 414m 20% 1722Mi 59% kube-node2 351m 17% 1233Mi 42% kube-node3 620m 31% 1376Mi 47% |
### 요청 리소스 정의
spec:
containers:
- resources:
requests:
cpu: 200m # m (millicore)
memory: 10Mi # Mi (megabytes)
### 리소스 정의
vagrant@kube-control1:~/work/20210907$ cat myapp-pod-req.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod-req
spec:
containers:
- name: myapp
image: devops2341/go-myweb:alpine
resources:
requests:
cpu: 200m
# 200 millicore = 0.2 core
memory: 10Mi
### 리소스 제한
spec:
containers:
- name: myapp
image: devops2341/go-myweb:alpine
resources:
limits:
cpu: 0.5
#500 millicore = 0.5 core
memory: 20Mi
#20 megabytes
반응형
리밋 레인지 (LimitRange)
Kubernetes namespace에서 리소스 할당을 제한하는 정책을 정의하는 object
limitrange가 정의되어있으면, 추후 pods생성시, 범위를 초과하는 manifests 는 실행이 안됨.
namespace 단위로 격리된 limitrange를 정의할 수 있음.
### limitrange 설정 및 결과 보기
vagrant@kube-control1:~/work/20210907$ cat myapp-limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: myapp-limitrange
spec:
limits:
- type: Pod
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
- type: PersistentVolumeClaim
min:
storage: 10Mi
max:
storage: 1Gi
vagrant@kube-control1:~/work/20210907$ kubectl get limitranges
NAME CREATED AT
myapp-limitrange 2021-09-07T02:26:48Z
vagrant@kube-control1:~/work/20210907$ kubectl describe limitrage myapp-limitrange
error: the server doesn't have a resource type "limitrage"
vagrant@kube-control1:~/work/20210907$ kubectl describe limitrange myapp-limitrange
Name: myapp-limitrange
Namespace: default
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod memory 5Mi 1Gi - - -
Pod cpu 50m 1 - - -
Container cpu 50m 1 100m 200m 4
Container memory 5Mi 1Gi 10Mi 100Mi 10
PersistentVolumeClaim storage 10Mi 1Gi - - -
vagrant@kube-control1:~/work/20210907$
### limitrange 초과하는 manifests 실행 시
vagrant@kube-control1:~/work/20210907$ kubectl create -f myapp-pod-huge-req.yaml
The Pod "myapp-pod-huge-req" is invalid:
* spec.containers[0].resources.requests: Invalid value: "4": must be less than or equal to cpu limit
* spec.containers[0].resources.requests: Invalid value: "4Gi": must be less than or equal to memory limit
728x90