Namespace

Yu Sang Min·2025년 5월 23일

CKA

목록 보기
15/110
post-thumbnail

📌 Namespace

  • 클러스터에 pod, service, deployment 같은 개체를 생성할 수 있었다.

  • K8S에 논리적인 클러스터 구성하는것이 Namespace

  • 쿠버네티스가 자동으로 생성하는 Namespace :

    • kube-system : 네트워킹 솔루션, DNS 서비스에 관한 네임스페이스
    • Default : 기본 네임스페이스
    • kube-public : 모든 사용자가 사용할 수 있어야 할 리소스사 생성되는 곳
  • 사용자가 실수로 서비스에 필요한 개체들을 삭제하는것을 방지하기 위해 클러스터 시작 때 kube-system이란 이름의 다른 네임스페이스로 생성함

❓어디서 어떻게 사용하는가?

  • 엔터프라이즈급, 프로덕션 환경에서 클러스터 사용시 Namespace 사용 고려
  • Dev, Prod의 리소스를 분리하기 위해 Namespace로 다른 공간 생성 가능
  • 개발 환경에서 작업하는 동안 프로덕션의 리소스를 실수로 수정할 일이 없다는 의미!(안정성)

✅ 특징

  • Namespace는 각각의 고유한 정책 모음을 가질 수 있다. (누가 뭘 할지 정의 가능)
  • Namespace 각각에 리소스 할당량을 할당

👉 접근하기

$ mysql.connect(“db-service”)
$ mysql.connect(“db-service.dev.svc.cluster.local”) // 다른 네임스페이스의 db 서비스에 접근할때 
  • 이게 가능한 이유는 서비스가 생성될때 DNS 항목이 자동으로 이 포맷에 추가 되기 때문
  • mysql.connect(“db-service.dev.svc.cluster.local”) DNS의 마지막 부분을 보면 cluster.local 즉, 기본 도메인 이름이다.
  • svc는 서비스를 위한 하위 도메인 dev는 네임스페이스 이름
  • db-service는 service 이름

⌨️ Command

1). $ kubectl get pods --namespace=kube-system
2). $ kubectl create -f pod-definition.yaml --namespace=dev
3). $ kubectl get pod --all-namespaces

1).

  • yaml 파일을 정의해서 create 할 경우 기본 네임 스페이스에 생성된다.
  • Pod가 항상 dev 네임스페이스에서 생성되도록 하는 명령어이다.
# pod-definition.yaml

apiVersion: v1
kind: pod
metadata:
  name: myapp-pod
  namespace: dev
  labels:
    app: myapp
    type: front-end
spec:
  containers:
  - name: nginx-container
    image: nginx  
  • 위 예시에서 metadata 아래 namespace 를 선언하여 생성될 namespace를 지정한다
# namespace-dev.yml

apiVersion: v1
kind: Namespace
metadata:
  name: dev

$ kubectl create -f namespace-dev.yaml
$ kubectl create namespaces dev

💡 Switch

  • 기본 Namespace는 default
  • kubectl get pods --namespace=dev : dev 네임스페이스에 존재하는 pod 조회

📲 영구적으로 기본 Namespace를 변경하는 법

$ kubectl config set-context $(kubectl config current-context) --namespace=dev
$ kubectl get pod

📛 Context

  • 컨텍스트는 같은 관리 시스템에서 여러 클러스터와 여러 환경을 관리하기 위해서 사용됨

📊 Resource Quota

# compute-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: dev

spec:
  hard:
    pods: “10”
    request.cpu: “4”
    request.memory: 5Gi
    limits.cpu: “10”
    limits.memory: 10Gi

$ kubectl create -f compute-quota.yaml
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글