
쿠버네티스에서 지원하는 namespace와 이를 활용하여 자원을 격리하는 ResourceQuota와 LimitRange 기능에 대해서 알아보자.
클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용하게 해주는 기능
default: 기본 namespacekube-system: 쿠버네티스 시스템 컴포넌트 실행kube-public: 공개 접근 가능한 리소스 저장kube-node-lease: node heartbeats 저장kubectl get namespaces: namespace 조회kubectl create namespace [ns_name]: namespace를 생성create 할 때, get 할 때, -n을 통해 namespace를 지정한다.kubectl config view: 현재 쿠버네티스 config 파일 (context, cluster, user 등) 전체를 조회kubectl config set-context blue@kubernetes --cluster=kubernetes --user=kubernetes-admin --namespace=blue: context를 새로 만들어 클러스터와 사용자 지정kubectl config use-context blue@kubernetes: 현재 사용 중인 context를 변경해서 작업기본적으로 컨테이너는 쿠버네티스 클러스터에서 무제한 컴퓨팅 리소스로 실행되기에 ResourceQuota를 사용하면 클러스터 관리자는 namespace로 리소스 사용과 생성을 제한할 수 있다.
Namespace 단위로 CPU, 메모리, 스토리지 같은 리소스 사용량을 제한하는 기능
kubectl describe quota: 현재 적용된 리소스쿼터 확인 가능apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: blue
spec:
hard:
requests.cpu: "1" # 전체 요청 CPU 1코어 제한
requests.memory: 1Gi # 전체 요청 메모리 1GiB 제한
limits.cpu: "2" # 전체 최대 CPU 2코어 제한
limits.memory: 2Gi # 전체 최대 메모리 2GiB 제한
Storage는 CPU/메모리처럼 limits 값을 설정할 수는 없지만,
resources.requests.storage로 요청량을 명시할 수 있으며, 이를 생략해도 LimitRange를 통해 기본 요청량을 자동 설정할 수 있다. Namespace 단위의 전체 사용량은 여전히 ResourceQuota를 통해 제한된다.
개별 Pod 또는 Container 수준의 최소/최대 자원 사용량을 강제하는 기능
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
namespace: blue
spec:
limits:
- default:
memory: 512Mi # 요청이 없을 경우 기본 메모리 512Mi
defaultRequest:
memory: 256Mi # 요청 없을 경우 기본 요청 메모리 256Mi
type: Container