namespace
•
동일 물리 클러스터를 기반으로 하는 복수의 가상 클러스터를 지원하는 개념
•
클러스터를 논리적으로 나누고 액세스를 제한하여 리소스를 생성, 관리
•
논리적으로 구분이 되지만 격리가 되는 것은 아님. (격리를 위해서는 network policy와 같은 다른 오브젝트를 추가로 사용해야함)
기본 namespace
•
default : pod, deployment가 생성될 때 기본적으로 생성되는 namespace
•
kube-system : DNS, kube-proxy, k8s 대시보드 처럼 시스템 제어 리소스가 사용하는 namespace
•
kube-public : 전체 클러스터 리소스에 대한 가시성을 제공 하는 경우 사용 (일반적으로 사용되지 않음)
custom namespace
•
prometheus, argo, istio 등등의 시스템 관련 솔루션들은 독자 namespace를 할당
•
microservice별로 namespace를 할당하여 논리적으로 분리
•
namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: skills
YAML
복사
# namespace 생성 및 확인
kubectl create ns my-app
kubectl get ns --show-labels
kubectl delete ns my-app
# 특정 namespace에 있는 자원 확인
kubectl get pod -n kube-system
kubectl get all -n kube-system
# 모든 namespace에 있는 자원 확인
kubectl get all -A
# 네임스페이스가 있는 리소스 확인
kubectl api-resources --namespaced=true
# 네임스페이스가 없는 리소스 확인
kubectl api-resources --namespaced=false
Shell
복사
# EKS namespace Terminating에서 안넘어갈때
for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}')
do
kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -
done
for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}')
do
kubectl get ns $ns -ojson | jq '.metadata.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -
done
Shell
복사