Kubernetes/Udemy - CKAD with Tests

Resource Requirement

비번변경 2021. 7. 16. 20:51

Pod는 배치된 Node의 CPU, MEM, 디스크 등의 리소스를 소비하기 때문에, 쿠버네티스 스케쥴러는 Pod에서 요구하는 리소스 양과 Node에서 사용할 수 있는 리소스 양을 고려하여 Pod를 배치한다. Pod가 배치된 Node에 리소스가 충분하지 않으면 Pod는 Pending 상태에 머무르며, 이 부분은 describe 명령어 출력 결과의 event 란에서 확인할 수 있다.

 

Resource Requirement

컨테이너가 필요로 하는 최소 CPU/MEM 등의 리소스

쿠버네티스 스케쥴러는 이 값을 바탕으로 Pod를 배치할 수 있을 만큼 리소스가 충분한 Node를 식별한다.

Pod 배포 정의 파일에 아래와 같이 정의할 수 있다.

apiVersion: v1
kind: Pod
metadata:
	name: simple-webapp-color
	labels:
		name: simple-webapp-color
spec:
	containers:
		- name: simple-webapp-color
		image: simple-webapp-color
		ports:
			- containerPort: 8080
		resources:
			requests:
				memory: "1Gi"
				cpu: 1

CPU의 경우, 1 CPU는 1 vCPU와 같고 0.1 CPU는 100m(밀리) CPU와 같다. CPU의 최솟값은 1m이다.

 

Resource Limit

리소스에 대한 제한 없이 필요한 만큼의 리소스를 소비할 수 있는 도커 컨테이너와 다르게 쿠버네티스는 Pod에서 사용할 수 있는 리소스 양을 제한할 수 있다. 리소스 제한은 Pod 배포 정의 파일에 설정할 수 있으며, 별도로 지정하지 않은 경우 기본값이 세팅된다.

Limit 기본값
CPU : 1
메모리 : 512MB
apiVersion: v1
kind: Pod
metadata:
	name: simple-webapp-color
	labels:
		name: simple-webapp-color
spec:
	containers:
		- name: simple-webapp-color
		image: simple-webapp-color
		ports:
			- containerPort: 8080
		resources:
			requests:
				memory: "1Gi"
				cpu: 1
			limits:
				memory: "2Gi"
				cpu: 2

requests와 limits는 컨테이너 각각에 설정해야 한다.

 

사용 리소스 양이 제한값을 초과하는 경우,

  • CPU는 사용량을 조절하기 때문에 컨테이너는 설정된 limit 초과하여 사용할 수 없다.
  • MEM는 사용량을 조절하지 않고 limit 초과하여 사용할 수 있다.

 

Pod가 지속적으로 limit 초과하여 MEM를 사용하는 경우, Pod가 종료된다.

 

Default Resource Setting

Pod가 리소스를 기본적으로 설정할 수 있기 위해서는 Pod가 생성되는 네임스페이스에 관련 설정이 있어야 한다.

그 정의 파일은 아래와 같다.

  • CPU
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-limit-range
    spec:
      limits:
      - default:
          memory: 512Mi
        defaultRequest:
          memory: 256Mi
        type: Container​
  • MEM
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-limit-range
    spec:
      limits:
      - default:
          cpu: 1
        defaultRequest:
          cpu: 0.5
        type: Container​