Kubernetes - Namespace, ResourceQuota, LimitRange (2)

Sungjin·2022년 3월 15일
1

Kubernetes

목록 보기
8/11
post-thumbnail

Namespace, ResourceQuota, LimitRange - Kubernetes


이 글은 김태민님의 대세는 쿠버네티스 강의를 참고하여 정리하였습니다!

출처 : https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88/dashboard


🔍 테스트해 볼 내용

  1. Namespace 구성

  2. ResourceQuota 구성

  3. LimitRange 구성

    도커 이미지는 김태민님께서 만들어두신 이미지를 사용합니다.


🚀 ResourceQuota

NamespacePod들이 사용하는 공유 자원에 대한 자원 한계를 달아 놓는 것입니다.

사용 방법은 Pod를 만들 때, Memoryrequestslimits를 정해 놓으면 됩니다.

이제 실습한번 해봅시다!

ns3.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ns-3

rq.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: rq-1
  namespace: ns-3
spec:
  hard:
    requests.memory: 1Gi
    limits.memory: 1Gi

ResourceQuota가 잘 만들어 졌는지 확인해봅시다!

kubectl describe resourcequotas --namespace=ns-3

이제 Pod를 생성해보도록 합시다!
pod3.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
  namespace: ns-3
spec:
  containers:
  - name: container
    image: kubetm/app

오류가 뜨게 됩니다.

이렇게 오류가 뜨는 이유는 namespace상에 resourcequota가 정의 되어 있는데 limits와 requests가 명시되어 있지 않기 때문입니다.

pod3의 내용을 수정하도록 합시다

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
  namespace: ns-3
spec:
  containers:
  - name: container
    image: kubetm/app
    resources:
      requests:
        memory: 0.5Gi
      limits:
        memory: 0.5Gi

Pod가 잘 생성된 것을 확인 하였으며, 메모리 사용량 또한 올라간 것을 확인할 수 있습니다!

그럼, 이제 memory의 사용량이 현재 ResourceQuota를 넘는 Pod를 만들어 봅시다!

pod4.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-4
  namespace: ns-3
spec:
  containers:
  - name: container
    image: kubetm/app
    resources:
      requests:
        memory: 0.8Gi
      limits:
        memory: 0.8Gi

한계 사용량을 뛰어넘어 pod가 생성되지 않는 것을 확인하였습니다!

👍 ResourceQuota는 Pod의 수도 제한 할 수 있습니다

rq2.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: rq-2
  namespace: ns-3
spec:
  hard:
    pods: 1

이제 pod를 하나 더 만들어 보도록 합시다!

pod5.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-5
  namespace: ns-3
spec:
  containers:
  - name: container
    image: kubetm/app
    resources:
      requests:
        memory: 0.1Gi
      limits:
        memory: 0.1Gi

잘 만들어지지 않는 것을 확인할 수 있습니다!


🚀 LimitRange

각각의 Pod마다 Namespace에 들어올 수 있는지 자원을 체크하여, Pod마다 세세한 조건을 둘 수 있습니다.

이제 실습을 해보도록 합시다!

ns4.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ns-4

lr.yaml

apiVersion: v1
kind: LimitRange
metadata:
  name: lr-1
  namespace: ns-4
spec:
  limits:
  - type: Container
    min:
      memory: 0.1Gi
    max:
      memory: 0.4Gi
    maxLimitRequestRatio:
      memory: 3
    defaultRequest:
      memory: 0.1Gi
    default:
      memory: 0.2Gi

kubectl describe limitranges --namespace=ns-4

잘 만들어 졌습니다

이제 옵션들에 대해서 설명해 봅시다.
1. min : Pod에서 설정되는 Memory의 Limit 값이 이 min을 넘어야 한다는 것을 뜻합니다.
2. max : Pod에서 설정되는 Memory의 Limit 값이 이 max를 넘어서는 안됩니다.
3. maxLimitRequestRatio : request값과 limit값의 비율의 최대 값을 뜻합니다.
4. defaultRequest : Pod에 아무런 값을 설정 하지 않았을 때 자동으로 설정되는 request값 입니다.
5. default : Pod에 아무런 값을 설정 하지 않았을 때 자동으로 설정 되는 Limit 값 입니다.

이제, 2개의 Pod를 만들어 실습해 보도록 하겠습니다.
1. request와 limit을 설정하지 않은 Pod
2. maxLimitRequestRatio의 비율을 넘어선 Pod

pod6.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: pod-6
  namespace: ns-4
spec:
  containers:
  - name: container
    image: kubetm/app

만들어진 pod의 yaml에 들어가 봅시다!

kubectl edit pod pod-6 -o yaml

자동으로 request, limit이 설정된 것을 확인 하였습니다.

pod7.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: pod-7
  namespace: ns-4
spec:
  containers:
  - name: container
    image: kubetm/app
    resources:
      requests:
        memory: 0.1Gi
      limits:
        memory: 0.4Gi

request와 limit의 비율이 4배인 pod를 생성해보도록 합시다.

Pod가 생성되지 못한 모습을 볼 수 있습니다!

실습을 마치도록 하겠습니다.


이상으로 마치겠습니다. 🙋🏻‍♂️

profile
WEB STUDY & etc.. HELLO!

0개의 댓글