네임스페이스에서 ResourceQuota 보장

네임스페이스에서 ResourceQuota 보장

저는 팀 간에 공유되는 클러스터를 실행하고 있으며 각 팀에 최소한의 리소스, 특히 메모리를 보장하고 싶습니다.

다음지침나는 그들의 네임스페이스에 다음을 사용해 보았습니다:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-quota
spec:
  hard:
    requests.memory: 8Gb

그러나 더 많은 문서를 읽어보면 이것이 포드에 8GB의 메모리가 있다는 것을 보장하지 않는다는 것이 밝혀졌습니다. 이는 포드 requests.memory값의 합이 8GB를 초과할 수 없음을 의미합니다. 위와 같이 8Gb를 설정하고 4Gb만 사용할 수 있으며 클러스터가 다른 곳에서 최대치에 도달하고 새 포드를 예약할 수 없는 경우 새 포드를 생성할 수 없을 수도 있습니다.

또한 예를 들어 총 메모리가 8Gi에 불과한 클러스터에서 값이 16Gi인 클러스터 ResourceQuota를 생성할 수 있습니다 .requests.memory

어쨌든 팀이 사용할 수 있는 고정된 양의 메모리를 보장할 수 있습니까?

답변1

이는 포드 요청의 합계가 8GB를 초과할 수 없음을 의미합니다.

예, 이것이 ResourceQuota의 논리입니다. 에서리소스 할당량 이해:

리소스 할당량은 다음과 같이 작동합니다.

  • 사용자는 자신의 Pod에 컴퓨팅 리소스 요청을 넣습니다.동일한 네임스페이스에 있는 모든 포드의 모든 리소스 요청 합계는 네임스페이스에 대한 리소스 할당량 문서의 하드 리소스 제한을 초과해서는 안 됩니다.이전에는 Pod의 리소스 제한 합계를 사용하여 리소스 할당량을 확인했지만 이는 리소스 요청을 사용하도록 변경되었습니다. 리소스 제한만 지정하는 포드에서는 리소스 요청이 기본적으로 정의된 제한과 일치하도록 설정되므로 이전에 생성된 포드에 대한 이전 버전과의 호환성이 유지됩니다. 요청은 예약 중에 클러스터가 보장하는 최소 리소스 양이므로 리소스 할당량에서 요청한 리소스에 대해서만 요금이 부과됩니다. 초과 커밋에 대한 자세한 내용은 계산 리소스를 참조하세요.

  • 포드를 생성하면 네임스페이스가 해당 네임스페이스에 대한 리소스 할당량에 지정된 제한을 초과하는 경우 HTTP 상태 코드 403 FORBIDDEN과 함께 요청이 실패합니다.

  • 네임스페이스에서 할당량이 활성화되어 있고 사용자가 할당량이 활성화된 각 리소스에 대해 포드에서 요청을 지정하지 않으면 포드의 POST가 HTTP 상태 코드 403 FORBIDDEN과 함께 실패합니다. 힌트: 이 문제를 방지하려면 할당량을 확인하기 전에 LimitRange 승인 컨트롤러를 사용하여 제한의 기본값을 강제로 적용하세요(그러면 리소스 요청은 기본적으로 제한과 동일합니다. 승인 컨트롤러 참조).


그러나 기사에서는 리소스를 별도로 나누어야 하는 경우가 조금 확장되었습니다. 그리고 이건 이미 구현된 것도 아니고..

할당량 및 클러스터 용량: 때로는 다음과 같이 더 복잡한 정책이 필요할 수도 있습니다.

  • 전체 클러스터 리소스를 여러 팀에 비례적으로 나눕니다.
  • 각 테넌트가 필요에 따라 리소스 사용량을 늘릴 수 있도록 허용하되 우발적인 리소스 고갈을 방지하기 위해 넉넉한 한도를 확보합니다.
  • 하나의 네임스페이스에서 수요를 감지하고, 노드를 추가하고, 할당량을 늘립니다.

이러한 정책은 할당량 사용량을 감시하고 다른 신호에 따라 각 네임스페이스의 할당량 하드 제한을 조정하는 '컨트롤러'를 작성하여 ResourceQuota를 빌딩 블록으로 사용하여 구현할 수 있습니다.


자체 컨트롤러에 사용자 정의 로직을 작성해야 할 것으로 예상됩니다.

도 살펴보시기 바랍니다OPA를 사용하여 Kubernetes 네임스페이스에 ResourceQuota를 적용하는 방법

관련 정보