Fairy ' s
[K8s] 리소스 요구사항 본문
CPU 메모리와 디스크 리소스가 있는 노드가 3개 있는 클러스터가 있다. 모든 파드는 리소스 집합(CPU 2개, 메모리 1개, 디스크 공간 일부)을 사용한다. 파드가 노드에 배치될 때마다 해당 노드에서 사용할 수 있는 리소스를 소비한다. 파드가 이동할 노드를 결정하는 것은 Scheduler인데, 스케줄러는 파드에 필요한 리소스와 노드에서 사용 가능한 리소스의 양을 고려한다.
노드에 충분한 리소스가 없으면 스케줄러는 해당 노드에 파드를 배치하지 않고, 충분한 리소스를 사용할 수 있는 곳에 파드를 배치한다. 노드에서 사용할 수 있는 리소스가 충분하지 않은 경우 파드 예약을 보류(Pending)한다. Pending 상태인 파드는 우리가 직접 확인할 수 있으며, 이벤트 섹션을 보면 보류가 된 이유를 알 수 있다.
NAME READY STATUS RESTARTS AGE
Nginx 0/1 Pending 0 7m
Events:
Reason Message
------ -------
FailedScheduling No nodes are availabe that match all of the following predicates:: Insufficient cpu (3).
위 이벤트 섹션을 보면 Pening 된 이유가 CPU 부족이라고 확인된다.
Resource Requests
Default로 파드 또는 파드 내의 컨테이너에 요구되는 최소 CPU 또는 메모리 양이 리소스 요구사항이다. 스케줄러가 파드에 노드를 배치하려고 할 때, 이 숫자를 사용해 사용 가능한 리소스가 충분한 노드를 식별한다. 만약 리소스 요구사항의 수준이 높은 경우, 파드 또는 Deployment Definition 파일에서 requests를 추가하고 메모리와 CPU 사용량에 대한 새로운 값을 지정하면, 요구사항에 맞출 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 8080
resources:
requests:
memory: "1Gi"
cpu: 1
Docker 컨테이너는 노드에서 사용할 수 있는 리소스에 제한이 없다. 컨테이너가 노드에 있는 하나의. vCPU로 시작한다고 가정하면, 노드에 있는 기본 프로세스나 다른 리소스 컨테이너를 죽이는 데에 필요한 만큼의 리소스를 사용할 수 있다. Default로 쿠버네티스는 컨테이너에 하나의 vCPU만 사용하도록 제한한다. 메모리도 마찬가지로 Default로 하나의 컨테이너에 512 mebibyte의 제한을 설정한다. 기본 제한을 바꾸려면 파드 Definition 파일의 resources 섹션 아래 limits 섹션을 추가하여 변경할 수 있다.
파드가 지정된 리소스 제한을 초과하려고 하면, 컨테이너는 제한보다 더 많은 CPU 리소스를 사용할 수 없기 때문에 쿠버네티스는 지정된 제한을 초과하지 않도록 CPU를 조절한다. 메모리는 한도보다 많이 사용할 수 있지만, 파드가 지속적으로 한도보다 더 많은 메모리를 사용하려고 하면 파드가 종료된다.
'Study > K8s' 카테고리의 다른 글
[K8s] Taints and Tolerations vs Node Affinity (0) | 2023.08.24 |
---|---|
[K8s] Node Selectors & Affinity (0) | 2023.08.23 |
[K8s] Taints and Tolerations (0) | 2023.08.17 |
[K8s] Labels & Selectors (0) | 2023.08.14 |
[K8s] Scheduling (0) | 2023.08.10 |