apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
selector:
type: web
ports:
- port: 8000
[3] 노드 스케줄러
Pod 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-3
spec:
nodeSelector:
kubernetes.io/hostname: 노드이름
containers:
- name: container
image: 이미지이름
apiVersion: v1
kind: Pod
metadata:
name: hello-pod-05
spec:
nodeSelecter:
kubernetes.io/hostname: node1
containers:
- name: hello-container1
image: yoskr/yos_node:0.1
ports:
- containerPort: 8000
노드별로 사양이 다르므로 특정 노드에 지정해서 셋팅하게 하는것이다.
그 노드에 자원이 부족할경우 실행을 하지않는다.
[4] QoS
쿠버네티스는 QoS지원한다.
각 파드에 자원을 할당 제한 등등..
K8s에서 resource request와 limit은 컨테이너에 할당 되는 CPU와 Memory 자원량을 의미
CPU는 Milicore단위(1,000 Milicore = 1Core)로 Memory는 Mbyte단위로 할당
request량은 k8s의 Pod 스케쥴링의 기준, request량은 Pod의 모든 컨테이너 request량을 합친 값이 된다.
Pod 스케쥴링이란 Pod를 어떤 노드에 배치하는가를 결정하는 과정으로 k8s는 Round-Robin방식으로 수행
즉, 첫 번째 노드가 요청되는 Pod request량을 수용 할 자원을 가지고 있다면 배치(생성)를 하고
만약 그렇지 않다면 다음 차례의 노드에 대해 동일한 작업을 수행하는 방식
만약 모든 노드가 Pod request량을 수용 할 수 없으면 Pod는 Pending상태로 되며 Pod 스케쥴링을 할 수 없다는 Event가 발생
limit량은 Pod가 사용하는 자원을 제한
Pod가 limit량을 초과 하게 되면 오버커밋 상태가 된다.
Request와 Limit량 산정의정답은 없음
권장하는 것은 request는 평균 사용량+10%로 limit은 Peek 사용량 중 최대 사용량을(비 정상 Peek 제외) 기준으로 설정하는 것을 권장
0] QoS 사용 방법
QoS 확인 방법 kubectl describe Pod nginx-guaranteed | grep QoS
resources 사용 방법
limit > pod 사용량 제한
request >필요 요청 메모리 용량 요청하는거
컨테이너별로 request 용량을 지정할수 있다.
1] BestEffort
resources 항목을 아예 사용하지 않을 경우 BestEffort로 분류
limit을 설정하지 않았기 때문에 노드에 유휴 자원이 존재한다면 제한 없이 모든 자원을 사용
request를 설정하지 않았기 때문에 보장받을 수 있는 자원도 없음
2] Guaranteed
resources 항목에서 limits와 request의 값이 완전히 동일한 경우 Guaranteed로 분류
request와 limit이 동일하여 자원의 오버커밋이 허용되지 않기 때문에 자원 사용을 안정적으로 보장
3] Burstable
resources 항목에서 limits가 requests보다 클 경우 Burstable로 분류
4] 우선 순위
Guaranteed > Burstable > BestEffort
단, Burstable과 BestEffort 간에는 메모리의 사용량에 따라 우선순위가 바뀔 수 있다.