becool

20210907 (화) request resource, limitrange 본문

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
Comments