로컬에서는 잘 되는데 ☘️

Kubernetes - Namespace, ResourceQuota, LimitRange란?

by youngjun._.

기본 Object - Namespace, ResourceQuota, LimitRange 란?

 

기능 설명에 앞서 이 Object들을 왜 써야 하는지 알아보자.

 

Kubernetes Cluster에 전체 사용할 수 있는 자원이 있다고 해보자.

일반적으로 Memory나 CPU가 있을 것이다.

Cluster안에는 여러 Namespace를 만들 수 있고, Namespace안에는 여러 Pod를 만들 수 있다.

Namespace안에 여러 Pod가 생성 됨 

 

각 Pod는 필요한 자원을 Cluster 자원에서 공유해서 사용한다.

여기서 하나의 Namespace안에 있는 Pod가 Cluster에 남은 자원을 모두 사용해버리면

다른 Pod는 더이상 쓸 자원이 없어 문제가 발생하게 된다.

자원이 부족하다!

이런 상황을 방지하기 위해 Resource Quota가 필요하다!

 

Resource Quota는 Namespace에 최대 한계를 설정할 수 있다.

Pod 입장에서 자원이 부족해 문제가 발생할 수 있지만

다른 Namesapce에 있는 Pod에는 영향을 끼치지 않게된다.

Resource Quota 적용한 모습

세번째 그림과 같이 하나의 Pod의 자원 사용량이 너무 크면 다른 Pod가 Namespace에 들어오지 못한다.

이런 상황을 방지하기 위해 LimitRange를 둬서 Namespace에 들어오는 Pod 크기를 제한할 수 있다!

Limit Range로 Pod의 크기를 제한

참고로 Limit Range, Resource Quota는 Namespace뿐만아니라 Kubernetes Cluster에도 적용할 수 있다.

Cluster에도 Limit Range와 Resource Quota를 설정할 수 있다!

이제 각 Object의 기능을 살펴보자!

 

1. Namespace

특징 1-1) 하나의 Namespace안에는 같은 Type의 Object들은 이름이 중복될 수 없다.

 

ex) 같은 이름의 Pod를 생성할 수 없다!

중복된 이름의 Pod 생성 불가능!

Object들 마다 별도의 유효ID가 존재하지만 한 Namespace안에서는 같은 종류의 Object라면

이름 또한 유효ID 같이 유일한 Key 역할을 한다는 의미이다.

 

특징 1-2) 다른 Namespace의 자원과 분리가 되어 관리된다.

 

Namespace2에 Service1이 존재할 때,

Pod1의 Label과 Service1의 selector를 연결할 수 없다는 의미이다.

Namespace는 각각 분리되어 관리

지금까지 배웠던 대부분의 자원들은 그 자원안에서 만든 Namespace안에서만 사용 가능
하지만 Node나 PV처럼 모든 Namespace에서 공용으로 사용되는 Object도 있다.

 

 

특징 1-3) Namespace를 지우게 되면 그 안에 있는 자원(Pod, Service 등)도 다 지워진다.

 

지울 때 신중하게 지워야한다.

 

Pod 마다 IP를 가지고 있는데 접근 요청을 하면 어떻게 될까?

다른 Namespace에서 Pod IP 접근

앞 게시글에서 연결을 허용해주지 않는다고 설명했는데

기본적으로는 연결이 되고 나중에 배울 Network Policy라는 Object에서 제한할 수 있다.

 

yaml 파일 내용을 확인해보자.

Namespace의 yaml 파일

Namespace를 만들 때는 이름 외에는 특별히 들어가는 값이 없다.

Pod나 Service를 만들 때 속하게 될 namespace를 지정할 수 있다.

두 Object는 namespace이름이 다르기 때문에(nm-1, nm-2) labels와 selector의 값이 같아도 연결되지 않는다!

 

2.ResourceQuota

ResourceQouta란?

 - Namespace의 자원 한계를 설정하는 Object

ResourceQuota 설정

위와 같이 Namespace에 제한하고 싶은 자원을 명시한다.

Namespace에 들어갈 Pod들의 request 자원을 3G로 설정
Memory limit를 6G로 설정

Resource Quota를 지정한 경우

특징 2-1) 같은 Namespace에 Pod를 생성할 때 꼭 스펙을 명시해야함!

Pod 생성 시 스펙을 명시해야함

Pod2 처럼 스펙이 없는 경우 Namespace에 생성되지 않음

 

특징 2-2) 생성할 Pod의 용량이 초과되면 생성 안됨!

당연한 얘기지만 여러 Pod의 합산 memory가 request를 넘어도 생성이 안됨.

 

yaml 파일을 살펴보자.

 

ResourceQuota를 만들 때 할당할 namespace를 설정한 후,

hard라는 속성에 자원(requests)과 한계(limits)가 들어간다.

 

memory와 같이 제한할 수 있는 것은 CPU와 Storage가 있다.

또 Objects의 숫자도 제한할 수 있다.

제한할 수 있는 Resource와 Object 목록

모든 Object를 제한할 수 있는 것은 아니고 Kubernetes가 업데이트 될 때마다
종류가 많아지고 있다. 확인을 해보고 사용하도록 하자.

3. LimitRange

 

'Infra > Kubernetes' 카테고리의 다른 글

ReplicaSet의 3가지 기능  (0) 2020.04.07
Kubernetes - Controller  (0) 2020.04.07
Kubernetes - ConfigMap, Secret  (0) 2020.03.12
Kubernetes - Volume  (0) 2020.03.12
Kubernetes - Service  (3) 2020.03.12

블로그의 정보

개발하는만두

youngjun._.

활동하기