kubernetes 리소스의 관리와 설정 - namespace

2020. 2. 19. 13:24devops/kubernetes

namespace

쿠버네티스에서는 오브젝트들을 논리적으로 구분지을 수 있는 namespace라는 기능을 제공하고 있습니다. 포드, 레플리카셋, 디플로이먼트, 서비스 등을 묶여 있는 하나의 가상 공간 또는 그룹이라고 이해하면 됩니다. 예를 들어 database기능을 제공하는 포드들 끼리는 database라고 묶으면 되고 테스트 코드를 위한 오브젝트는 testbed 등을 묶으면 공통적인 성질을 가지고 있는 오브젝트를 좀 더 손 쉽게 관리할 수 있습니다. 

 

네임 스페이스 사용해보기 

kubectl get namespace or ns 를 통해 현재 존재하는 namespace를 확인할 수 있습니다. 여러분이 특별한 네임 스페이스를 만들지 않아도 아래와 같은 네임 스페이스가 만들어져있습니다. 

kubectl get namespaces                                                                                                                                               
NAME              STATUS   AGE
default           Active   5d18h
docker            Active   5d18h
kube-node-lease   Active   5d18h
kube-public       Active   5d18h
kube-system       Active   5d18h

 

해당 네임스페이스에 존재하는 포드, 레플리카셋, 디플로이먼트, 서비스 등을 확인하는 방법은 아래와 같습니다. get 뒤에 pod등의 오브젝트 --namespace 찾고자 하는 네임스페이스 이름 등으로 찾을 수 있습니다. 

kubectl get pods --namespace or -n default                                                                                                                               
NAME                                  READY   STATUS    RESTARTS   AGE
debug                                 1/1     Running   0          3d17h
service-deployment-6cd58767b4-9g2v2   1/1     Running   0          44h
service-deployment-6cd58767b4-plrtv   1/1     Running   0          44h
service-deployment-6cd58767b4-vk2z8   1/1     Running   0          44h

kubectl get object 이름 --namespace or -n 네임 스페이스 이름

 

위와 같은 명령어를 통해 쿠버네티스의 오브젝트들을 논리적으로 구분지을 수 있습니다. 하지만 알아야 주의해야 할 점은 논리적으로는 구분되어 있지만 물리적으로는 구분되지 않는다는 점 입니다. ex) 다른 네임스페이스에서 생성된 두 포드가 같은 노드에 존재할 수 있습니다. 

 

네임 스페이스 생성 방법

1. yaml

apiVersion: v1
kind: Namespace
metadata:
  name: production
  
kubectl apply -f 파일 이름

 

2. kubectl create namespace 이름

kubectl craete namespace 이름

 

해당 네임스페이스에 리소스를 생성하는 방법도 어렵지 않습니다. yaml 파일을 작성할 때 metadata의 namespace옵션에 등록하고 싶은 namespace를 작성하면 됩니다. 

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: deployment
  namespace: production

--- // ---를 통해 여러 개의 리소스를 생성가능
apiVersion: apps/v1
kind: Service
metadata: 
  name: deployment
  namespace: production

 

네임 스페이스 서비스에 접근하기

다른 네임 스페이스면 서비스의 이름만으로는 접근할 수 없습니다. 하지만 <서비스 이름>.<네임스페이스 이름>.svc처럼 서비스 이름 뒤에 네임스페이스 이름을 붙이면 다른 네임 스페이스에도 접근할 수 있습니다. 

culr hostname-svc-cluster.production.svc:8080 

 

네임스페이스 삭제하기 

kubectl delete -f <yaml 파일 이름>
kubectl delete namespace <이름>

 

쿠버네티스의 모든 오브젝트에 namespace를 사용할 수 있는 것은 아닙니다. 이를 확인하기 위해서는 아래 명령어로 확인할 수 있습니다. 

kubectl api-resources --namespaced=true