본문 바로가기
CICD

[Kubernetes] Namespace, ResourceQuota, LimitRange(기본 오브젝트)

by 장중앙 2022. 1. 5.

Namespace란

쿠버네티스는 동일한 물리 클러스터를 기반으로하는 여러 가상 클러스터를 지원. 이러한 가상 클러스터를 Kubernetes Namespace 라고 함

Namespace는 이름의 범위를 제공 - 어떠한 Pod나 Deployment 등의 이름은 NameSpace내에서는 유일해야함

즉, 같은 클러스터 내에서 운용되는 애플리케이션이지만 독립된 클러스터에서 운용되는 것처럼 지원함

    * PV, Node, NodePort와 같이 모든 Namespace에서 사용가능한 오브젝트 존재

    * Namespace를 삭제하면 내부의 오브젝트도 모두 삭제됨


Namespace  작성 예제

Namespace 활용 Pod 작성 예제


ResourceQuota란

Namespace마다 Pod 등의 오브젝트가 사용할 수 있는 자원의 제한을 걸어둘 수 있음

Namespace마다 총 리소스의 사용을 제한하는 제약조건의 역할을 함

  • ResourceQuota로 제한 가능한 설정
    • Computer Resource : CPU, Memory, Storage, ....
    • Object Count : Pod, Service, ConfigMap, PVC, ... (모든 오브젝트의 수를 제한하지는 못함)

 

 

ResourceQuota가 필요한 이유



Kubernetes에는 한정된 자원이 존재하며 하나의 Namespace 또는 Pod 내에서 과도한 리소스를 사용하면 다른 운용환경에 영향을 줌
이러한 상황을 방지하기 위해 분배된 리소스보다 많은 리소스를 사용하는 것을 방지가 필요

ResourceQuota Yaml 작성 예제

ResourceQuota활용 Pod Yaml 작성 예제


 

LimitRange란

Namespace에 ResourceQuota에 맞먹는 자원을 사용하는 오브젝트가 스케줄링된다면?

  -> 해당 Namespace에 있는 기존 Pod들이 자원을 사용 못하는 경우가 발생

 

이러한 문제점을 해결하기 위해 Namespace에 할당되는 Pod의 크기를 제한하는 Limit Range가 필요함


LimitRangeYaml 작성 예제

 


실습

 

1. Namespace 실습

Namespace yaml 작성 및 생성 확인

apiVersion: v1
kind: Namespace
metadata:
  name: nm-1

 

Namespace를 지정하여 Pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: nm-1
  labels:
    app: pod
spec:
  containers:
  - name: container
    image: kubetm/app
    ports:
    - containerPort: 8080

Pod와 연결한 Service생성

apiVersion: v1
kind: Service
metadata:
  name: svc-1
  namespace: nm-1
spec:
  selector:
    app: pod
  ports:
  - port: 9000
    targetPort: 8080

 

같은 이름의 Pod를 배포하면 error 발생(Namespace의 특징)

 

Namespace를 추가로 생성

apiVersion: v1
kind: Namespace
metadata:
  name: nm-2

 

추가된 Namespace에 Pod생성

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: nm-2
  labels:
    app: pod
spec:
  containers:
  - name: container
    image: kubetm/init
    ports:
    - containerPort: 8080

 

nm-2에서 nm-1의 Pod, Service  접근이 가능

 


2. ResourceQuota 실습

 

Namespace 생성

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

 

해당 Namespace에 ResourceQuota 생성 및 확인

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

 

 

 


3. LimitRange 실습

 

 

댓글