쿠버네티스 리소스 할당

greenTea·2023년 8월 18일
0

쿠버네티스 리소스 할당

🤔Kubernetes에서 리소스의 requestslimits는 파드가 실행되는 노드에서 사용 가능한 리소스를 관리하고 스케줄링에 사용됩니다. 이 두 값은 다르게 작동합니다.

리소스를 할당 하는 이유

🫡만약 A,B노드에서 A노드의 경우 10개의 pod가 실행중이고 B의 노드의 경우 1개의 pod만이 동작한다고 가정하겠습니다.
만약 하나의 pod를 생성할 경우 개수만 보았을때에는 B노드는 1개의 pod만을 가지고 있기에 B의 배치하는 것이 좋을 것 같습니다.
그러나 만약 A노드의 10 podcpumemory를 거의 사용하지 않는 상황이고 B의 pod는 1개지만 대부분의 리소스를 잡아먹는 상황이었다면 B에 pod를 배치하는 것은 좋지 않습니다.
또한 만약 해커가 A의 pod중 하나의 podcpu사용량을 대폭 늘려버릴 경우 다른 9개의 pod들은 비정상적인 상태가 될 것입니다.

🥳이를 위해 쿠버네티스에서는 리소스를 할당할 수 있게 지원하고 있습니다.

requests

😓requests는 해당 컨테이너에 할당된 리소스의 보장된 최소량을 나타냅니다.
노드에서 파드를 스케줄링 할 때, Kubernetes 스케줄러는 파드의 리소스 requests를 기반으로 적절한 노드를 찾습니다. 즉, 노드는 해당 requests를 충족시킬 수 있는 충분한 리소스가 있어야 합니다.
requests에 지정된 리소스량은 해당 컨테이너에 대해 항상 예약되고 보장됩니다. 따라서 다른 파드나 프로세스에 의해 이 리소스량이 줄어들지 않습니다.

limits

🧐limits는 해당 컨테이너가 사용할 수 있는 리소스의 최대량을 나타냅니다.
컨테이너가 limits를 초과하여 리소스를 사용하려고 시도하면, 해당 컨테이너는 종료되고 다시 시작될 수 있습니다

yaml 파일

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밑에 requestslimits가 있습니다.

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를 실행해보면 requestlimit이 같은 값으로 존재하는 것을 확인 할 수 있습니다.

참고자료

쿠버네티스 공식 홈페이지
따배쿠 - 쿠버네티스

profile
greenTea입니다.

0개의 댓글