brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 19. 2021

쿠버1탄-27. 쿠버네티스 -limit, Request

다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


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



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari