728x90
728x90
# 현상
- node의 cpu / memory가 거의 대부분 점유되고 있는 상황에서도 node가 늘어나지 않고 있다.
- 내가 생각했을 때 CA를 사용하면 노드 리소스가 80% 이상 사용 중일 때 새로 노드 추가 ~ 뭐 이런식으로 진행될 줄 알았는데, 그게 아니었다.
- 노드가 새로 추가되는건 노드에 자리가 없어서 배치되지 못하는 pod가 존재할 때 … 이다. 사실 쿠버네티스 사용 목적 등을 생각하면 그게 맞다.
- 하지만 파드가 하나 새로 떠야되는데 그 때서야 노드 프로비저닝을 시작한다? → 느리다. → 어느정도의 over provisioning이 필요하다.
# Over Provisioning
https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#how-can-i-configure-overprovisioning-with-cluster-autoscaler
생각보다 간단한 over provisioning 구현방법
- 낮은 priority를 갖는 dummy pod들을 생성해둔다.
- 노드에 자리가 없을 때, dummy 파드가 먼저 죽고 필요한 파드는 먼저 뜬다.
- → 배치되지 못하고 있는 dummy 파드를 위해 노드가 미리 새로 프로비저닝된다.
참조 : overprovisioning
# with Terraform
## modules/eks/k8s_node_overprovisioning.tf
# priority가 -10인 priority class 생성
resource "kubernetes_priority_class_v1" "overprovisioning" {
metadata {
name = "overprovisioning"
labels = local.kube_labels
}
value = -10
global_default = false
description = "Priority class used by overprovisioning."
}
# 위 class 를 사용하는 pod를 생성하는 deployment 생성
resource "kubernetes_deployment_v1" "overprovisioning" {
metadata {
name = "overprovisioning"
namespace = "default"
labels = local.kube_labels
}
spec {
replicas = 2
selector {
match_labels = {
run = "overprovisioning"
}
}
template {
metadata {
name = "overprovisioning"
labels = {
run = "overprovisioning"
}
}
spec {
priority_class_name = kubernetes_priority_class_v1.overprovisioning.id
termination_grace_period_seconds = 0
container {
name = "reserve-resources"
image = "registry.k8s.io/pause:3.9"
resources {
requests = {
cpu = 1
memory = "2G"
}
}
}
}
}
}
}
# 더 고려할 점
- 우선 cpu 1 / mem 2G 짜리 파드 2개로 더미를 구성해 두었는데, 이들이 죽어도 배치가 안될만큼의 큰 파드는 결국 바로 프로비저닝될 수 없다.
- 그런 일이 자주 있진 않겠지만, 아무튼 이정도는 임시방편 정도라고 생각이 된다.
- 나중에 노드 resource의 request / limit 점유량을 직접 모니터링해서 미리 프로비저닝할 수 있는 데몬셋을 개발하거나 / 카펜터를 쓰거나 해야할 것 같다.
끝
728x90
728x90
'공부 > Kubernetes' 카테고리의 다른 글
[EKS/Terraform] Secondary IP 줄이기 with Terraform (25) | 2024.02.06 |
---|---|
[ingress-nginx] restart 시 downtime 해결 - minReadySeconds (44) | 2023.11.29 |
[kubernetes/GUI] OpenLens 사용하기 (MAC) (0) | 2023.11.05 |
[EKS/Java/IRSA] JAVA App에 IRSA 부여할 때 종속성 추가하기 (0) | 2023.09.15 |
[RBAC & IRSA] ECR Secret Updater Cronjob 구성 (1) | 2023.09.04 |
댓글