개요
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
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 7. schedule (nodeName, 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 |