🤔
Kubernetes
에서 리소스의requests
와limits
는 파드가 실행되는 노드에서 사용 가능한 리소스를 관리하고 스케줄링에 사용됩니다. 이 두 값은 다르게 작동합니다.
🫡만약 A,B노드에서 A노드의 경우 10개의 pod가 실행중이고 B의 노드의 경우 1개의 pod만이 동작한다고 가정하겠습니다.
만약 하나의 pod를 생성할 경우 개수만 보았을때에는 B노드는 1개의 pod만을 가지고 있기에 B의 배치하는 것이 좋을 것 같습니다.
그러나 만약 A노드의 10 pod는 cpu와 memory를 거의 사용하지 않는 상황이고 B의 pod는 1개지만 대부분의 리소스를 잡아먹는 상황이었다면 B에 pod를 배치하는 것은 좋지 않습니다.
또한 만약 해커가 A의 pod중 하나의 pod의 cpu사용량을 대폭 늘려버릴 경우 다른 9개의 pod들은 비정상적인 상태가 될 것입니다.🥳이를 위해
쿠버네티스
에서는 리소스를 할당할 수 있게 지원하고 있습니다.
😓
requests
는 해당 컨테이너에 할당된 리소스의 보장된 최소량을 나타냅니다.
노드에서 파드를 스케줄링 할 때,Kubernetes 스케줄러
는 파드의 리소스requests
를 기반으로 적절한 노드를 찾습니다. 즉, 노드는 해당requests
를 충족시킬 수 있는 충분한 리소스가 있어야 합니다.
requests
에 지정된 리소스량은 해당 컨테이너에 대해 항상 예약되고 보장됩니다. 따라서 다른 파드나 프로세스에 의해 이 리소스량이 줄어들지 않습니다.
🧐
limits
는 해당 컨테이너가 사용할 수 있는 리소스의 최대량을 나타냅니다.
컨테이너가limits
를 초과하여 리소스를 사용하려고 시도하면, 해당 컨테이너는 종료되고 다시 시작될 수 있습니다
apiVersion: v1
kind: Pod
metadata:
name: nginx-resource
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
memory: 500Mi
cpu: 1
limits:
memory:
cpu: 2000m
😑위 파일은 nginx를 실행하는 yaml파일로
resources
밑에requests
와limits
가 있습니다.
request
의 위에서 말한대로 최소 보장 리소스를 의미하는데 이를 통해쿠버네티스
의 스케쥴러가pod
를 배치할때 이 값들을 활용해서 배치하게 됩니다.
cpu의 경우 1은 1core를 의미하며 0.5는 0.5core로 이해하시면 됩니다. 1core는 1000m으로 표시할 수도 있습니다.memory의 경우 Mi라는 단위를 사용하는데 1 Mi는 1,024 KiB를 의미합니다.
🫡위 yaml파일에서
requests
를 없애고limits
만을 남긴 상태에서 실행해보시고kubectl describe pod nginx-resource
를 실행해보면request
와limit
이 같은 값으로 존재하는 것을 확인 할 수 있습니다.
참고자료