해당 페이지는 kubernetes의 namespace 페이지를 기반으로 작성한다
https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
Namespaces
In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster. Names of resources need to be unique within a namespace, but not across namespaces. Namespace-based scoping is applicable only for namespaced objects
kubernetes.io
Namespace란?
- 클러스터 내에서 리소스 그룹을 격리하기 위한 메커니즘
- 리소스 이름은 Namespace 내에서는 고유해야하지만, Namepspace 다를 경우 동일한 리소스 이름으로 생성 가능
- Namespace 가빈의 범위는 Object(Deployment, Service 등)만 적용되며,
클러스터 전체 Object(StorageClass, Nodes, PersistentVolme)등에는 적용되지 않음
다양한 Namespace를 구성하는 경우
- Namespace는 사용자가 여러 팀이나, 프로젝트 단위에서 사용하기 위함
- 사용자가 수 십명의 경우 Namespace를 만들거나 생각할 필요가 없음
- Namespace는 이름의 범위를 제공 함
- Namespace는 중복 될 수 없으며, 각 리소스는 하나의 Namespace만 가짐
- Namespace는 여러 사용자간 클러스터 리소스를 나누는 방법
- 동일한 SW의 버전이 다른 리소스를 구분할 필요가 없고, Label을 통해 동일한 Namespace 사용 가능
Namespace 확인
# kubectl get namespaces
NAME STATUS AGE
default Active 9h
kube-node-lease Active 9h
kube-public Active 9h
kube-system Active 9h
- default : Namespace가 없는 객체의 기본 Namespace
- kube-system : kuernetes 시스템에 의해 생성된 객체의 namespace
- kube-public : 모든 사용자가 사용할 수 있는 namespace
kubectl get, describe 명령어를 통해 namespace 정보를 확인할 수 있음
# kubectl get namespace default
NAME STATUS AGE
default Active 11h
# kubectl describe namespace default
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
- describe 정보에서 resource 할당량(quota)과 제한값(limit)를 알 수 있음
- 리소스 할당량은 namespace에 존재하는 리소스의 총 사용량 추적
- 리소스 제한 값은 namespace에서 사용하는 리소스 제한
Namespace 상태
- Status: Active ==> Namespace 활성화 상태
- Status: Terminating ==> Namespace 가 종료중이며, 새로운 Object를 생성할 수 없음
Namespace 생성
1. yaml 파일을 통한 생성
# cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
# kubectl create -f ./my-namespace.yaml
namespace/mynamespace created
# kubectl get namespace mynamespace
NAME STATUS AGE
mynamespace Active 32s
2. CLI로 생성
# kubectl create namespace mynamespace2
namespace/mynamespace2 created
# kubectl get namespace mynamespace2
NAME STATUS AGE
mynamespace2 Active 7s
Namespace 삭제
# kubectl delete namespace mynamespace
namespace "mynamespace" deleted
# kubectl delete namespace mynamespace2
namespace "mynamespace2" deleted
# kubectl get namespace -A
NAME STATUS AGE
default Active 12h
kube-node-lease Active 12h
kube-public Active 12h
kube-system Active 12h
Namespace를 통한 Kubernetes 세분화
1. default namespace의 이해
기본적으로 kuberntes는 default namespace를 이용하여 pod, service, deployment 등을 프로비저닝 수행
2. 2개의 namespace를 추가
kubectl create 문은 -f 옵션으로 파일 형태의 명령 수행
#kubectl create -f https://k8s.io/examples/admin/namespace-dev.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
#kubectl create -f https://k8s.io/examples/admin/namespace-prod.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "production",
"labels": {
"name": "production"
}
}
}
# kubectl get namespaces --show-labels
NAME STATUS AGE LABELS
default Active 26h <none>
development Active 14h name=development
kube-node-lease Active 26h <none>
kube-public Active 26h <none>
kube-system Active 26h <none>
production Active 14h name=production
- --show-labels 옵션을 통해 namespce의 labels 들을 확인할 수 있다.
- json 파일의 labels: name: 의 내용이 명시 됨
3. 각 namespace 내 pod 생성
- 한 namespace와 상호작용하는 사용자는 다른 namespace의 콘텐츠를 볼 수 없음
# kubectl create deployment snowflake --image=registry.k8s.io/serve_hostname -n=development
deployment.apps/snowflake created
# kubectl scale deployment snowflake --replicas=3
deployment.apps/snowflake scaled
- --image 옵션을 통해 dockerhub 이미지를 불러옴
- -n=development 옵션을 통해 namespace 지정
- scale 명령어를 통해 replica 수를 지정
아래와 같이 development namespace에 생성된 내용을 확인할 수 있음
# kubectl config set-context --current --namespace=development
Context "kubernetes-admin@kubernetes" modified.
# kubectl get pod
NAME READY STATUS RESTARTS AGE
snowflake-58f6594f77-jdfkm 1/1 Running 0 9m3s
snowflake-58f6594f77-jwsz2 1/1 Running 0 8m55s
snowflake-58f6594f77-xcgdf 1/1 Running 0 8m55s
# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
snowflake 3/3 3 3 9m9s
'kubernetes' 카테고리의 다른 글
[kubernetes] static pod란 (0) | 2022.10.31 |
---|---|
[kubernetes] pod란? (0) | 2022.10.26 |
[kubernetes] etcd 및 백업 복구 방법 (0) | 2022.10.21 |
[kubernetes] kubernertes Component (0) | 2022.10.21 |