Namespaces
- Namespaces란?
- 하나의 클러스터에서도 Namespace로 나누어 자원, 권한등을 한정적으로 하여 안정적인 서비스를 제공한다.
- 리소스를 각각의 분리된 영역으로 나누기 좋은 방법
- 용도에 따라 컨테이너와 그에 관련된 리소스들을 구분지어 관리할 수 있는, 논리적인 그룹으로 쿠버네티스는 Namespace 오브젝트 제공
- 여러 네임스페이스를 사용하면 쿠버네티스 시스템을 더 작은 그룹으로 분할
- 멀티 테넌트(Multi-tenant) 환경을 분리하여 리소스를 생산, 개발, QA 환경 등으로 사용
-
리소스 이름은 네임스페이스 내에서만 고유 명칭 사용
- 현재 클러스터의 기본 네임스페이스 확인하기
$ kubectl get ns NAME STATUS AGE default Active 7d1h kube-node-lease Active 7d1h kube-public Active 7d1h kube-system Active 7d1h
- Namespace를 설정하지 않으면 default를 사용하게 된다.
- 각 네임스페이스 상세 내용 확인
- kubectl get을 옵션없이 사용하면 default 네임스페이스에 질의
- 다른 사용자와 분리된 환경으로 타인의 접근을 제한
- 네임스페이스 별로 리소스 접근 허용과 리소스 양도 제어 가능
- –namespace나 -n을 사용하여 네임스페이스 별로 확인 가능
$ kubectl get pod --namespace kube-system
- YAML 파일로 네임스페이스 만들기
- test_ns.yaml 파일을 생성하고 create를 사용하여 생성
apiVersion: apps/v1 kind: Namespace metadata: name: test-ns
- 생성 및 확인
$ kubectl create -f test_ns.yaml $ kubectl get ns
- 생성 및 확인
- kubectl 명령어로 yaml 없이 바로 네임스페이스 생성 가능
$ kubectl create ns "test-ns" namespace/test-ns created
$ kubectl create ns test-ns2 --dry-run=client -o yaml apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: test-ns2 spec: {} status: {}
- –dry-run=client: 실행하지 않고, 문법이 맞는지 확인한다.
- -o yaml: yaml 파일까지 만들어 준다.
kubectl create ns test-ns3 -o yaml > test-ns3.yaml
- test_ns.yaml 파일을 생성하고 create를 사용하여 생성
- 전체 네임스페이스 조회
- 전체 네임스페이스를 대상으로 kubectl을 실행하는 방법
$ kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-74ff55c5b-sxvfj 1/1 Running 10 7d1h kube-system etcd-minikube 1/1 Running 10 7d1h kube-system kube-apiserver-minikube 1/1 Running 10 7d1h kube-system kube-controller-manager-minikube 1/1 Running 12 7d1h kube-system kube-proxy-pdqqx 1/1 Running 10 7d1h kube-system kube-scheduler-minikube 1/1 Running 10 7d1h kube-system storage-provisioner 1/1 Running 19 7d1h
- 특정 namespace에 해당하는 deploy, rs, pod 얻기
$ kubectl get all -n test-ns $ kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-74ff55c5b-sxvfj 1/1 Running 10 7d1h etcd-minikube 1/1 Running 10 7d1h kube-apiserver-minikube 1/1 Running 10 7d1h kube-controller-manager-minikube 1/1 Running 12 7d1h kube-proxy-pdqqx 1/1 Running 10 7d1h kube-scheduler-minikube 1/1 Running 10 7d1h storage-provisioner 1/1 Running 19 7d1h
- 전체 네임스페이스를 대상으로 kubectl을 실행하는 방법
- namespace 할당하기
- namespace를 주기 위해 create할 때 -n 옵션으로 줄 수 있다.
$ kubectl create -f deploy-jenkins.yaml -n test-ns
- YAML 파일에 namespace 할당 가능하다.
metadata: name: test namespace: test-ns
- namespace를 주기 위해 create할 때 -n 옵션으로 줄 수 있다.
- default 네임스페이스가 아닌 특정 네임스페이스로 변경하기
- ~/.kube/config 를 할당하면 된다.
```
contexts:
- context: cluster: kubernetes user: kubernetes-admin namespace: test-ns ```
- contexts.context.namespace 추가
- ~/.kube/config 를 할당하면 된다.
```
contexts:
- 네임스페이스 삭제하기
$ kubectl delete ns test-ns
- test-ns에 해당하는 것들이 모두 사라진다.
** 출처: 데브옵스(DevOps)를 위한 쿠버네티스 마스터