Cloud/k8s-CKA

[CKA] 5. namespace

jinkwon.kim 2023. 1. 24. 23:47
728x90
반응형

개요

k8s에서 namespace의 용도를 알아보겠습니다. 

namespace

k8s에서 namespace는 single cluster 내에서 리소스를 그룹화하여 분리하는 메커니즘을 제공합니다.

k8s에서는 최소 설치 시 2개의 namespace가 존재하게 됩니다. 

1. kube-system

    k8s system 관리를 외한 pod들이 존재하는 namespace

2. default

    사용자가 pod를 배포 시 기본적으로 소속되는 namespace

namespace 제약 사항

1. 동일 namespace에서의 resource name은 유일해야 합니다. namespace가 다르면 같아도 괜찮습니다. 

2. namespace의 적용 법위는 namespace에 기반한 object에 한정됩니다.  (예: deployment, service 등등) 

3. cluster 범위의 object (예: StorageClass, Nodes, PersistentVolumes 등) 에는 적용 불가능하다.

4. 각 k8s의 resources는 하나의 namespace에만 존재할 수 있습니다.

 

namespace 사용 이유

1. namespace는 여러 개의 팀이나, 프로젝트에  많은 사용자가 있는 환경에서 사용하도록 만들어졌습니다. 
    사용자가 거의 없거나, 수 십 명 정도가 되는 경우에는 namespace를 전혀 고려할 필요가 없습니다.

2. resource를 제한할 때 사용 할 수 있습니다. (https://kubernetes.io/docs/concepts/policy/resource-quotas/

namespace 생성

1. 예제 yaml 파일

apiVersion: v1
kind: Namespace
metadata:
  name: dev

2. 생성

#kubectl create -f create-namespace.yaml

3. 확인

#kubelet get namespace

pod를 특정 namespace에 배포

1. 예제 yaml 파일

apiVersion: apps/v1
kind: Deployment
metadata:
  name: namespace-dep
  namespace: dev #namespace를 설정 합니다.
  labels:
    app: namespace-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: namespace-nginx
  template:
    metadata:
      labels:
        app: namespace-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

2. 배포 확인

#kubectl get pod -A

namesapce dev에 배포 된것을 확인할 수 있습니다. 

namespace별 resource 접근 방법

service명은 같은데 namespace가 다를 경우 접근 방법은 dns를 통해서 접근이 가능합니다. 

default에 db-service가 있고 dev에 db-service가 있을때

dns명을 좀 더 상세하게 적어주면 됩니다. 

기본 namespace를 변경하기

아래 빨간색 부분이 object를 배포 시 기본으로 배포되는 namespace 경로입니다.

1. 변경

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

2. 확인

#kubectl config get-contexts 

namespace에 resource limit 걸기 

k8s에는 특정 namespace별로 resource에 대한 limit를 적용하여 관리할 수 있습니다.

resource-quotas 상세 페이지 : https://kubernetes.io/docs/concepts/policy/resource-quotas/

1. 예제 yaml 파일

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

2. 도식

정리 

k8s에서 namespace는 최종 목표는 resource를 분리하고 여러 사람과의 작업 시 충돌을 없애는데 목적을 두고 있다고 보면 됩니다. 

Next Post

[CKA] 6. Object를 관리하는 방법 3가지

728x90
반응형

'Cloud > k8s-CKA' 카테고리의 다른 글

[CKA] 7. schedule (manual-schedule, labels, taint, toleration)  (0) 2023.02.02
[CKA] 6. Object를 관리하는 방법 3가지  (0) 2023.01.29
[CKA] 4. Service  (0) 2023.01.20
[CKA] 3. ReplicaSet & Deployments  (0) 2023.01.11
[CKA] 2. pod 란  (0) 2022.11.26