Namespace
- Namespace 는 쿠버네티스 내 존재하는 가상의 공간
- 클러스터 내에서 오브젝트들과 리소스 그룹을 “논리적"으로 분리함. (물리적 분리가 아님)
- 작은 규모의 클러스터에서는 그냥 default에서 작업하면 되지만, 엔터프라이즈나 프로덕션 환경에서는 Namespace를 사용하는 것이 좋음
적용 예시
- 사용자에 따라 Namespace 접근 권한을 다르게 부여할 수 있음.
- Namespace마다 다른 정책을 부여할 수 있음.
- Namespace 별로 리소스 할당량(resource quota)을 지정/정의할 수 있음
Namespace의 유형
Default Namespace
- Cluster가 처음 생성될 때 K8s가 default로 생성함
- 프로덕션 클러스터의 경우 Default Namespace를 사용하지 않고, 다른 Namespace를 만드는 것이 권장됨.
kube-system
- 쿠버네티스가 네트워킹 DNS서비스 등 내부적인 용도로 생성함
- 사용자가 사용, 편집, 삭제 등을 하지 못 하도록 격리함
kube-public
- 유저에게 제공되는 리소스들이 위치한 Namespace
사용 예시
다른 Namespace에 위치한 Pod 접근하기
- 다른 Namespace 의 자원에 접근하려고 하면, 해당 Namespace를 명시해야 함
- ex)
msql.connect("db-service")
- 동일 Namespace 내msql.connect("db-service.dev.svc.cluster.local")
- 다른 Namespace에 위치한 자원
- DNS 형식
{SERVICE}.{NAMESPACE}.{sub domain of SERVICE}.{default domain for CLUSTER}
- ex)
Namespace 내 Pod 조회하기
# Namespace 이름으로 필터링
kubectl get pods --namespace=kube-system
특정 Namespace 내부에 Pod 생성하기
kubectl create -f pod-definition.yml --namespace=dev
# 또는 yaml file 내부에 metadata 아래 namespace 를 명시해도 됨
Namespace 생성하기
apiVersion: v1
kind: Namespace
metadata:
name: dev
kubectl create -f namespace-dev.yaml
OR
kubectl create namespace dev
특정 Namespace를 기본으로 설정하기
kubectl config set-context $(kubectl config current-context) --namespace=dev
리소스 할당 정의하기
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 5Gi
limits.cpu: "10"
limits.memory: 10Gi
kubectl create -f compute-quota.yaml