Openshift ResourceQuota & LimitRange
원문 : 호롤리한하루/Openshift ResourceQuota & LimitRange
Overview
Openshift의 리소스를 제한시키는 기능인 ResourceQuota에 대해서 알아보겠습니다.
Prerequisites
- Openshift v4이상 클러스터
1. ResourceQuota & LimitRange
ResourceQuota
프로젝트의 리소스를 제한시키는 기능을 제공합니다. 크게 세가지 타입의 리소스를 관리합니다.
- Compute Resource (cpu, memory, ephemeral-storage 등)
- Storage Resource (pvc용량, pvc개수등)
- Object counts (pod, rc, rsourcequotas, svc, configmap 등)
ephemeral-storage : 로컬 임시 스토리지 (emptydir)
LimitRange
아무런 제약을 걸지 않았을 때, 기본적으로 컨테이너는 Openshift의 리소스를 무제한으로 사용할 수 있습니다.
위의 ResourceQuota
로 클러스터의 프로젝트 별로 리소스 사용과 생성을 제한할 수 있다면 LimitRange
는 pod이나 컨테이너의 리소스를 제한하는 정책입니다.
좀 더 작은 단위의 제약 조건이라고 생각하시면 됩니다.
- pod과 컨테이너의 최소&최대 컴퓨팅 리소스 사용량 지정
- 최소&최대 pvc용량 지정
- 리소스에 대한 Request와 Limit사이의 비율을 지정
2. Hands-On
ResourceQuota 적용
먼저 새로운 project를 하나 생성해줍니다.
그 다음, 관리자페이지의 Administration > Resource Quotas로 이동해 ResourceQuota를 생성
test resource quota를 하나 생성하겠습니다.
apiVersion: v1
kind: ResourceQuota
metadata:
name: test-quota
namespace: resource-management-00
spec:
hard:
pods: '3'
services: '5'
requests.cpu: '1'
requests.memory: 512Mi
replicationcontrollers: '5'
resourcequotas: '1'
pod은 3개까지
services는 5개까지
cpu와 memory는 각각 1개, 512mb까지 사용가능
replicationcontrollers는 5개까지
resourcequotas는 1개까지 생성가능합니다.
이 ResourceQuota는 프로젝트(
resource-management-00
)에만 적용되는 제한사항입니다.
배포를 해주면 ResourceQuota의 overview에서 생성한 ResourceQuota의 세부사항을 확인할 수 있습니다.
ResourceQuota가 제대로 적용되었는지 확인
좌측 메뉴의 Workloads > Deployments를 선택해줍니다.
Deployment 생성하기 버튼을 누르면 :
이렇게 기본 템플릿이 나옵니다.
그대로 생성해주고 Workloads > ReplicaSet으로 이동해보면 제대로 복제본들이 뜨지 않은 것을 확인할 수 있습니다.
Event탭으로 이동하면 상세 사항을 확인할 수 있습니다.
에러의내용은 앞에서 생성했던 ResourceQuotas 규칙에 부합하지 않는 생성이기 때문에 pod을 생성하지 않았다는 내용입니다.
LimitRange 생성
컨테이너는 기본적으론 Openshift클러스터의 리소스를 무제한으로 사용하기 때문에 ResourceQuota를 쓰기 위해선 개별 pod에 대한 리소스 제약이 필요합니다.
개별 pod 또는 컨테이너에 거는 리소스제약이 LimitRange
입니다.
현재 사용하고 있는 프로젝트인 limits-00
에서 생성되는 모든 pod은 다음과 같은 리소스 제약을 갖게 설정하는 구문입니다.
kind: LimitRange
apiVersion: v1
metadata:
name: limits-00
spec:
limits:
- type: Pod
max:
cpu: 1
memory: 1.5Gi
min:
cpu: 100m
memory: 50Mi
- type: Container
max:
cpu: 500m
memory: 750Mi
min:
cpu: 100m
memory: 50Mi
default:
cpu: 200m
memory: 100Mi
다음 명령어로 LimitRange
를 클러스터에 배포해줍니다.
$ oc create -f limitlange.yaml -n resource-management-00
limitrange/limits-00 created
GUI에서 확인하려면 Administration > LimitRanges로 들어가서
생성했던 LimitRange를 확인할 수 있습니다.
LimitRange를 배포한 후에, 위에서 오류가 났었던 ReplicaSet의 로그를 다시 살펴보면 정상적으로 배포가 진행되었다는 것을 확인할 수 있습니다.
ResourceQuota가 제대로 적용되었는지 확인2
pod4개 띄워보기
맨처음에 배포한 ResourceQuota에서 pod의 개수를 3으로 제한을 걸어뒀습니다.
한번 Workload > Deployments로 이동해서 pod의 개수를 3에서 4로 늘려봅시다.
Workload > ReplicaSet의 Event탭을 살펴보면 pod의 개수가 3으로 제약이 걸려있기 때문에 pod을 더 늘릴 수 없다고 에러가 발생한 것을 확인할 수 있습니다.
Deployment의 resource 변경하기
현재 배포된 pod의 리소스를 확인해보겠습니다.
Workload > Deployments로 이동해서 pod의 개수를 1개로 scale-down시켜주고,
Pods탭으로 이동 :
YAML을 보면 현재 해당 pod의 resource는 LimitRange에서 설정한 default값을 따르고 있는 것을 확인 가능합니다.
현재 해당 pod은 deployment 컨트롤러의 관리를 받고 있기 때문에 deployment의 설정을 바꿔서 산하 pod들의 리소스들을 수정시켜보겠습니다.
Workload > Deployments > YAML 탭으로 이동해서 30번 줄 resources를 변경해주면 됩니다.
resources:
limits:
cpu: 500m
requests:
cpu: 500m
이렇게 바꿔주면 앞으로 이 deployment에서 관리하는 pod들은 위와같은 리소스제약을 가지게 됩니다.
Deployment를 save해서 재배포해주고 Workload > Deployments > Pods > pod 선택 후 YAML탭을 살펴보면,
deployment에서 설정한 대로 리소스가 정의된 것을 확인할 수 있습니다.
테스트로 pod을 3개로 다시 scale-up해주면 pod이 2개밖에 안뜨는 것을 확인할 수 있고
로그를 보면 cpu리소스의 limit을 넘어가는 request이기 때문에 pod이 생성되지 않았다는 메세지를 확인할 수 있습니다.
Administration > ResourceQuotas 로 이동해보면 현재 설정한 ResourceQuota중에 얼마나 사용하고 있는지 확인할 수 있습니다.
끝