Namespace란
쿠버네티스는 동일한 물리 클러스터를 기반으로하는 여러 가상 클러스터를 지원. 이러한 가상 클러스터를 Kubernetes Namespace 라고 함
Namespace는 이름의 범위를 제공 - 어떠한 Pod나 Deployment 등의 이름은 NameSpace내에서는 유일해야함
즉, 같은 클러스터 내에서 운용되는 애플리케이션이지만 독립된 클러스터에서 운용되는 것처럼 지원함
* PV, Node, NodePort와 같이 모든 Namespace에서 사용가능한 오브젝트 존재
* Namespace를 삭제하면 내부의 오브젝트도 모두 삭제됨
Namespace 작성 예제
Namespace 활용 Pod 작성 예제
ResourceQuota란
Namespace마다 Pod 등의 오브젝트가 사용할 수 있는 자원의 제한을 걸어둘 수 있음
Namespace마다 총 리소스의 사용을 제한하는 제약조건의 역할을 함
- ResourceQuota로 제한 가능한 설정
- Computer Resource : CPU, Memory, Storage, ....
- Object Count : Pod, Service, ConfigMap, PVC, ... (모든 오브젝트의 수를 제한하지는 못함)
ResourceQuota가 필요한 이유
Kubernetes에는 한정된 자원이 존재하며 하나의 Namespace 또는 Pod 내에서 과도한 리소스를 사용하면 다른 운용환경에 영향을 줌 이러한 상황을 방지하기 위해 분배된 리소스보다 많은 리소스를 사용하는 것을 방지가 필요함 |
ResourceQuota Yaml 작성 예제
ResourceQuota활용 Pod Yaml 작성 예제
LimitRange란
Namespace에 ResourceQuota에 맞먹는 자원을 사용하는 오브젝트가 스케줄링된다면?
-> 해당 Namespace에 있는 기존 Pod들이 자원을 사용 못하는 경우가 발생
이러한 문제점을 해결하기 위해 Namespace에 할당되는 Pod의 크기를 제한하는 Limit Range가 필요함
LimitRangeYaml 작성 예제
실습
1. Namespace 실습
Namespace yaml 작성 및 생성 확인
apiVersion: v1
kind: Namespace
metadata:
name: nm-1
Namespace를 지정하여 Pod 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-1
labels:
app: pod
spec:
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
Pod와 연결한 Service생성
apiVersion: v1
kind: Service
metadata:
name: svc-1
namespace: nm-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
같은 이름의 Pod를 배포하면 error 발생(Namespace의 특징)
Namespace를 추가로 생성
apiVersion: v1
kind: Namespace
metadata:
name: nm-2
추가된 Namespace에 Pod생성
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-2
labels:
app: pod
spec:
containers:
- name: container
image: kubetm/init
ports:
- containerPort: 8080
nm-2에서 nm-1의 Pod, Service 접근이 가능
2. ResourceQuota 실습
Namespace 생성
apiVersion: v1
kind: Namespace
metadata:
name: nm-3
해당 Namespace에 ResourceQuota 생성 및 확인
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq-1
namespace: nm-3
spec:
hard:
requests.memory: 1Gi
limits.memory: 1Gi
3. LimitRange 실습
'CICD' 카테고리의 다른 글
[Kubernetes] Deployment(Controller) (0) | 2022.01.08 |
---|---|
[Kubernetes] Replication Controller, ReplicaSet(Controller) (0) | 2022.01.07 |
[Kubernetes] ConfigMap, Secret(기본 오브젝트) (0) | 2022.01.05 |
[Kubernetes] Volume(기본 오브젝트) (0) | 2022.01.04 |
[Kubernetes] Service(기본 오브젝트) (0) | 2022.01.03 |
댓글