Closed junha-ahn closed 1 year ago
파드어피니티는 향후 Redis 를 Backend Pod과 가장 근접한 위치에 배포할때 사용한다. 현재 BackendPod은 NodeSelector로도 충분하다.
테인트 또한 현재 크게 의미 있지는 않다. 만약 ArgoCd, Prometheus, Grafana에 대해 격리가 필요하다면 사용
참고
파드 리소스를 관리한다는 것은 전반적인 CPU와 메모리 사용률을 관리하여 클러스터의 활용도를 최적화하는 것을 의미 (네트워크와 스토리지 리소스를 관리하는 방법은 없다)
❯ kubectl top nodes
error: Metrics API not available
매트릭서버 설치는 더 고민해보자
Requests
Limits
OOM Kill
, 노드의 리소스와 같은 양으로 컨테이너에 리소스를 할당하면 해당 컨테이너는 스케줄링되지 않는다. 해당 노드에서 기본적으로 사용 중인 kubelet과 같은 컨테이너가 이미 있기 때문이다. 이렇게 할당할 경우 Pending 상태로 남게 된다. 만약 requests는 설정하지 않고 limits 만 설정한다면 requests에도 limits과 같은 양으로 설정되기 때문에 requests나 limits 모두 너무 크게 잡으면 안 된다.
CPU 리소스는 CPU 단위로 측정된다. 쿠버네티스에서 1 CPU는, 다음과 같다.
분수 값도 가능하다. 0.5 CPU를 요청한 컨테이너는 1 CPU를 요청한 컨테이너 CPU의 절반 가량을 보장받는다. 접미사 m을 사용하여 밀리(milli)를 표현할 수도 있다. 예를 들어서 100m CPU, 100milliCPU, 그리고 0.1 CPU는 모두 같다. 1m보다 정밀한 표현은 허용하지 않는다.
CPU 리소스는 항상 리소스의 절대량으로 표시되며, 상대량으로 표시되지 않는다. 예를 들어, 컨테이너가 싱글 코어, 듀얼 코어, 또는 48 코어 머신 중 어디에서 실행되는지와 상관없이 500m CPU는 거의 같은 양의 컴퓨팅 파워를 가리킨다.
즉
reuqest.cpu
는 최소한 보장받아야 하는 CPU를 설정하자
memory 에 대한 제한 및 요청은 바이트 단위로 측정된다. E, P, T, G, M, k 와 같은 수량 접미사 중 하나를 사용하여 메모리를 일반 정수 또는 고정 소수점 숫자로 표현할 수 있다. Ei, Pi, Ti, Gi, Mi, Ki와 같은 2의 거듭제곱을 사용할 수도 있다. 예를 들어, 다음은 대략 동일한 값을 나타낸다.
128974848, 129e6, 129M, 128974848000m, 123Mi
참고
ResourceQuota
와 Limit
를 namespace와 함께쓰면서 pod에서 접근할 수 있는 resource 컴퓨팅 자원에 대해 제한을 걸 수 있다.
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resourcequota
namespace: custom-ns
spec:
hard:
requests.cpu: "1000m"
requests.memory: "1Gi"
limits.cpu: "2000m"
limits.memory: "2Gi"
해당 네임스페이스에 pod가 배포되면 다음의 룰을 따른다.
LimitRange는 개별 pod, container 단위로 cpu와 memory에 제한을 주거나 default값을 설정하도록 할 수 있다
apiVersion: v1
kind: LimitRange
metadata:
name: my-limitrange
namespace: custom-ns
spec:
limits:
- default:
memory: "256Mi"
cpu: "500m"
defaultRequest:
memory: "128Mi"
cpu: "250m"
max:
memory: "1Gi"
cpu: "1000Mi"
min:
memory: "128Mi"
cpu: "250m"
type: Container
Description
현재 컴퓨팅 파워에 대한 컨트롤이 없다.
자원 제한에 대해 학습하고, 구현해야 한다
관련 키워드
참고 도서
To do
파드안티어피니티를 사용해 워크로드를 여러 가용 영역으로 분산하여, 애플리케이션 고가용성 보장NodeCondition 테인트를 사용해 노드 실패나 성능 저하를 사전에 방지기본 제한과 요청을 설정하기 위해 LimitRange를 구현한다요약:
ResourceQuata
Test Checklist