Namespace
Namespace는 쿠버네티스 클러스터를 보다 효율적으로 관리할 수 있는 오브젝트이다.
네임스페이스를 이용하면 용도에 따라 파드, 레플리카셋, 서비스등을 논리적으로 구분할 수 있다.
Namespace는 무엇을 해주나
보통 쿠버네티스 클러스터를 한명이 맡아서 관리하는 경우는 없다.
백엔드 팀과, 인프라 팀, 조직별로 다른 클러스터를 사용할 수도 있지만 같은 클러스터를 사용할 수도 있다.
네임스페이스는 이럴때 조직별로 각자의 논리적인 가상 공간을 제공해
마치 여러 개의 가상 클러스터를 사용하는 느낌을 줄 수 있다.
또한, prod환경 이외에 dev, staging, test, monitoring 환경등 여러 환경별로 리소스를 정의할 수 있게 해준다.
Namespace 종류
kubectl 명령어를 통해 현재 클러스터에 존재하는 네임스페이스들을 확인해보자.
여러가지 네임스페이스가 있는데, 앞에 kube-가 붙은 네임스페이스는
쿠버네티스 클러스터가 자동으로 생성된 네임스페이스이다.
kube-system 네임스페이스에는 어떤 파드들이 있을까?
Calico CNI부터 여러가지 쿠버네티스 구성요소가 보인다.
아래 포스트에서 보다 자세한 구성요소들의 역할을 정리해놓았다.
[Kubernetes] 쿠버네티스 구성 요소
쿠버네티스 클러스터 구성 쿠버네티스는 마스터 노드와 워커 노드로 구성되어 있다. 마스터 노드가 최소 1대 이상 있어야 클러스터를 유지시킬 수 있으며 마스터 노드는 여러 대가 있을 수 있다
imsongkk.tistory.com
그렇다면 우리가 여태 생성한 오브젝트들은 자연스레 default 네임스페이스에 속할것이라고 추측할 수 있다.
Namespace를 정의하는 YAML
apiVersion: v1
kind: Namespace
metadata:
name: prod
굉장히 심플하다.
Namespace를 사용하는 YAML
우리가 만든 네임스페이스에 리소스를 정의하고 싶다면 어떻게 해야 할까?
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
namespace: prod # prod 네임스페이스 지정
spec:
containers:
- name: my-nginx-container
image: nginx
ports:
- containerPort: 80
protocol: TCP
metadata.namespace 필드에 명시해주기만 하면 된다.
나만의 Namespace 만들기
위의 YAML파일을 적용해보자.
my-nginx-pod를 만들면서 네임스페이스를 prod로 명시했으므로 prod 네임스페이스에 존재하는것을 볼 수 있다.
네임스페이스를 명시하지 않은 오브젝트들은 default 네임스페이스에 존재하는것을 볼 수 있다.
네임스페이스에 종속되지 않는 오브젝트
파드, 레플리카셋, 디플로이먼트, 서비스들은 대표적인 네임스페이스에 종속되는 오브젝트이다.
하지만 노드는 네임스페이스에 종속될 수 있을까?
노드는 물리적인 분리이며, 네임스페이스는 논리적인 분리이다.
따라서 노드는 네임스페이스에 독립적이다.
다른 독립적인 오브젝트는 다음과 같은 명령어로 확인할 수 있다.
kubectl api-resources --namespaced=false
네임스페이스 자체도 네임스페이스에 독립적인것을 볼 수 있다.
'Infra > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 오브젝트 [ServiceAccount] (0) | 2023.07.28 |
---|---|
[Kubernetes] 쿠버네티스 오브젝트 [ConfigMap, Secret] (0) | 2023.07.27 |
[Kubernetes] 쿠버네티스 오브젝트 [Service] (0) | 2023.07.05 |
[Kubernetes] 쿠버네티스 오브젝트 [Deployment] (0) | 2023.07.04 |
[Kubernetes] 쿠버네티스 오브젝트 [ReplicaSet] (0) | 2023.07.03 |