[쿠버네티스] 네임스페이스

    728x90
    반응형

    출처

    Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스

    Certified Kubernetes Administrator (CKA) with Practice Tests(Udemy)

    namespace

    What is namespace?

    클러스터 내에서 리소스를 논리적으로 분리하는 방법이다.

     

    namespace의 특징

    1. 리소스 격리: 각 namespace안에서 리소스들이 격리되어 다른 namespace에서 같은 이름의 Pod나 Service가 동시에 존재할 수 있다.
    2. 리소스 할당 및 쿼터 관리: namespace단위로 리소스를 할당하고, 특정 namespace에 대해 ResourceQuota를 설정하여 사용량을 제한할 수 있다. (CPU, 메모리 등)
    3. 보안 및 접근 제어: RBAC과 결합하여 namespace단위로 사용자와 서비스의 권한을 제어할 수 있다.
    4. 자원 공유: 동일한 클러스터 내의 다른 namespace와 리소스를 공유할 수 있다.
    5. DNS: Service가 생성될 때, ServiceName.Namespace.Service.domain의 이름으로 접근할 수 있다.

     

    namespace의 활용

    1. 프로젝트 구분: 한 클러스터 내에서 서로 다른 프로젝트를 위한 namespace를 생성하여 리소스를 격리하고 관리할 수 있다.
    2. 환경 구분: dev, stag, prod와 같이 환경을 별도의 namespace로 나누어 환경에 따른 리소스를 분리할 수 있다.
    3. 다중 테넌시: 여러 팀이나 고객이 동일한 클러스터를 사용하지만 각자의 리소스를 독립적으로 관리하고 싶을 때 유용하다.

     

    기본 namespace

    1. default: 클러스터에서 namespace를 지정하지 않은 경우, 모든 리소스가 default에 생성된다.
    2. kube-system: 쿠버네티스 시스템 컴포넌트가 실행되는 namespace. 클러스터의 관리 및 운영에 필요한 시스템 리소스들이 배치된다. (kube-apiserver, kube-scheduler, kube-controller-manager 등)
    3. kube-public: 클러스터 내에서 모든 사용자가 접근할 수 있는 공개 리소스를 저장하는 namespace. 클러스터의 구성 정보나 public-data가 이곳에 저장된다.

     

    Namespace의 구성

    #namespace가 kube-system인 pod를 조회
    [root@]$ kubectl get pods --namespace=dev
    
    
    #다른 namespace들의 모든 pod를 조회
    [root@]$ kubectl get pods --all-namespaces

     

    #namespace=dev인 pod 생성
    [root@]$ kubectl create -f namespace-pod-definition.yml --namespace=dev
    
    pod/imfra-pod created

     

    #namespace yaml 구조
    [root@]$ vi namespace-dev.yaml
    
    apiVersion: v1
    kind: Namespace
    metadata: 
      name: dev

     

    #namespace 생성-yaml
    [root@]$ kubectl create -f namespace-dev.yml
    namespace/dev created
    
    
    #namespace 생성-cli
    [root@]$ kubectl create namespace dev
    namespace/dev created

     

    #특정 namespace를 기본설정으로 변경
    [root@]$ kubectl config set-context $(kubectl config current-context) --namespace=dev
    
    
    #수정 전 namespace=dev인 pod 조회
    [root@]$ kubectl get po --namespace=dev
    
    #수정 후 namespace=dev인 pod 조회
    [root@]$ kubectl get po

     

    #ResourceQuota yaml 구조
    [root@]$ vi resource-quota.yaml
    
    apiVersion: v1
    kind: ResourceQuota
    metadata: compute-quota
      namespace: dev
    spec: 
      hard: 
        pods: "10"
        requests.cpu: "4"
        requests.memory: 5Gi
        limits.cpu: "10"
        limits.memory: 10Gi

     

    #namespace=dev에 ResourceQuota 설정
    [root@]$ kubectl create -f resource-quota.yaml

     


     

    728x90
    반응형

    댓글