CKA

(TIL) Kubernetes namespace

심플코더 2025. 3. 22. 16:31

Intro

지금까지 다뤘던 Pod, Deployment, Service 등은 모두 특정한 Namespace에 속해 동작한다.
NameSpace를 별도로 지정하지 않으면 기본 네임스페이스인 default에서 동작하게된다.

 

Kubernetes의 기본 Namespace

default

가장 기본적으로 사용되는 네임스페이스이다.

kube-system

Kubernetes의 내부 컴포넌트들이 위치하는 곳으로 DNS, 네트워킹등이 이에 해당한다.

kube-public

모든 사용자에게 공개적으로 공유 가능한 리소스들이다.

 

왜 Namespace를 사용하는가?

Namespace를 사용함으로써 dev-prod 환경을 하나의 클러스터에서 분리해서 사용할 수 있으며, 리소스 사용량 제한을 걸거나 RBAC를 Namespace 단위로 설정할 수 있다.

 

Namespace 간 통신

같은 네임스페이스 안에서는 service의 이름으로 바로 접근이 가능하다.
예를 들어 web-service라는 이름으로 배포된 service에 web-service라는 명링으로 바로 접근이 가능하다.

다만 다른 namepsace의 서비스에 접근하려면 전체 도메인명을 사용해야하며 예시는 아래와 같다.

webservice.dev.svc.cluster.local

 

Namespace를 포함한 kubectl 명령어

kubectl get pods --namespace kube-system

kube-system namespace에 있는 pods를 조회한다.

kubectl apply -f pod.yaml --namespace dev

dev 네임스페이스에 pod.yaml 파일을 이용하여 객체를 생성한다

meatadata:
    name: web-app
    namespace: dev

yaml파일에 namespace를 명시할 수 있다.

Namespace 생성은 아래와 같이 수행할 수 있다.

apiVersion: v1
kind: Namespace
metadata:
    name: dev

혹은

kubectl create namespace dev

kubectl에서 현재 작업중인 namespace의 위치는 다음과 같이 바꿀 수 있다.

kubectl config set-context --current --namespace=dev

 

Namespace에 리소스제한 설정하기

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