Kubernetes

[k8s] NameSpace 개념

코딩 못하는 감자 2025. 1. 31. 18:15

네임스페이스란?

새로운 이름을 지정하여 리소스의 공간을 분리하는 것

쿠버네티스의 3가지 네임스페이스

kube-system

쿠버네티스가 네트워킹 솔루션, DNS서비스에 사용되는 포드와 서비스 셋을만드는 곳

사용자가 실수로 건들지 않게 네임스페이스로 분리

default-namespace

우리가 포드를 생성하고 서비스를 생성하는 네임스페이스

kube-publice

쿠버네티스의 모든 사용자가 사용할 리소스

 

네임스페이스별 조회

리소스 조회를 할 때 네임스페이스를 지정하지 않으면 default로 지정된다.

kubectl get pods 

kubectl get pods --namespace=kube-system

아래 사진과 같이 default로 조회할 때는 리소스가 존재하지 않았지만,

kube-system namespace로 조회할 시 쿠버네티스가 기본적으로 생성한 리소스들을 확인할 수 있다.

 

리소스 생성시 네임스페이스 분리

생성할 때 namespace 지정

kubectl create -f pod-defination.yml --namespace=dev 

파일로 초기에 지정하는 법

아래와 같이 metadata에 namespace를 지정할 수 있다.

apiVersion: v1
kind: Pod 

metadata:
	name: myapp-pod 
	namespace: dev
	labels:
		app: my-app
		type: frontend-app
	
spec:
	containers:
		- name: nginx-container
			image: nginx
	

NameSpace 생성 방법

namespace-dev.yaml 파일 작성

apiVersion: v1
kind: Namespace
metadata:
	name: dev

네임스페이스 생성

kubectl create -f namespace-dev.yaml

기본 네임스페이스 변경 방법

하나의 namespace환경에만 계속 접근을 하는 경우 매번 namespace를 명시하기 번거롭다.

아래와 같이 기본 namespace를 변경할 수 있다.

kubectl config current-context를 통해 여러 클러스터 환경 중 현재 환경을 가져온다.

kubectl config set-contexts ${kubectl config current-context} --namespace=dev

모든 네임스페이스 리소스 보기

kubectl get pods --all-namespaces

Resource Quota

각 네임스페이스의 리소스를 제한하기 위해 compute-quota.yaml 생성

apiVersion: v1
kind: ResourceQuota
metadata:
	name: compute-quota
	namespace: dev
	
spec:
	pods: "10"
	requests.cpu: "4"
	requests.memory: "5Gi"
	limits.cpu: "10"
	limits.memory: "10Gi"

Resource Quota 생성

kubectl create -f compute-quota.yaml