Create dedicated ci-build node pool (L4-1-24G, €0.75/hr) replacing H100 (€3.50+/hr) for CI builds. H100 reserved for training only. - Add ci-build pool to Terraform (L4-1-24G, scale-to-zero, fr-par-2) - Update GitLab Runner to target ci-build pool with L4-sized limits - Change CUDA_COMPUTE_CAP from 90 (H100) to 89 (L4) in CI - Dockerfile.training keeps CUDA_COMPUTE_CAP=90 for H100 training Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
129 lines
3.5 KiB
HCL
129 lines
3.5 KiB
HCL
resource "scaleway_vpc_private_network" "foxhunt" {
|
|
name = "${var.cluster_name}-pn"
|
|
region = var.region
|
|
}
|
|
|
|
resource "scaleway_k8s_cluster" "foxhunt" {
|
|
name = var.cluster_name
|
|
version = var.k8s_version
|
|
cni = "cilium"
|
|
region = var.region
|
|
delete_additional_resources = true
|
|
private_network_id = scaleway_vpc_private_network.foxhunt.id
|
|
|
|
auto_upgrade {
|
|
enable = true
|
|
maintenance_window_start_hour = 4
|
|
maintenance_window_day = "sunday"
|
|
}
|
|
|
|
autoscaler_config {
|
|
disable_scale_down = false
|
|
scale_down_delay_after_add = "10m"
|
|
scale_down_unneeded_time = "10m"
|
|
estimator = "binpacking"
|
|
ignore_daemonsets_utilization = true
|
|
}
|
|
}
|
|
|
|
resource "scaleway_k8s_pool" "always_on" {
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "always-on"
|
|
node_type = var.always_on_type
|
|
size = 1
|
|
min_size = 1
|
|
max_size = 1
|
|
autoscaling = false
|
|
autohealing = true
|
|
region = var.region
|
|
}
|
|
|
|
# GPU pool for ML training (H100 — large VRAM for ensemble training)
|
|
resource "scaleway_k8s_pool" "gpu_training" {
|
|
count = var.enable_gpu_training_pool ? 1 : 0
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "gpu-training"
|
|
node_type = var.gpu_training_type
|
|
size = 1
|
|
min_size = 0
|
|
max_size = var.gpu_training_max_size
|
|
autoscaling = true
|
|
autohealing = true
|
|
region = var.region
|
|
|
|
lifecycle {
|
|
ignore_changes = [size]
|
|
}
|
|
}
|
|
|
|
# GPU pool for inference during trading (L4 — cost-effective for forward passes)
|
|
# When trading: trading_service + ml_training_service move here via GPU-enabled manifests
|
|
resource "scaleway_k8s_pool" "gpu_inference" {
|
|
count = var.enable_gpu_inference_pool ? 1 : 0
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "gpu-inference"
|
|
node_type = var.gpu_inference_type
|
|
size = 1
|
|
min_size = 0
|
|
max_size = var.gpu_inference_max_size
|
|
autoscaling = true
|
|
autohealing = true
|
|
region = var.region
|
|
|
|
lifecycle {
|
|
ignore_changes = [size]
|
|
}
|
|
}
|
|
|
|
# GitLab CE node pool (dedicated DEV1-L for GitLab + Runner manager)
|
|
resource "scaleway_k8s_pool" "gitlab" {
|
|
count = var.enable_gitlab_pool ? 1 : 0
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "gitlab"
|
|
node_type = var.gitlab_type
|
|
size = 1
|
|
min_size = 1
|
|
max_size = 1
|
|
autoscaling = false
|
|
autohealing = true
|
|
region = var.region
|
|
}
|
|
|
|
# CI build pool (L4 — cheaper than H100, has CUDA for compilation + GPU tests)
|
|
resource "scaleway_k8s_pool" "ci_build" {
|
|
count = var.enable_ci_build_pool ? 1 : 0
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "ci-build"
|
|
node_type = var.ci_build_type
|
|
size = 1
|
|
min_size = 0
|
|
max_size = var.ci_build_max_size
|
|
autoscaling = true
|
|
autohealing = true
|
|
region = var.region
|
|
|
|
lifecycle {
|
|
ignore_changes = [size]
|
|
}
|
|
}
|
|
|
|
# CPU pool for remote development (DevPod — autoscales to zero)
|
|
resource "scaleway_k8s_pool" "dev" {
|
|
count = var.enable_dev_pool ? 1 : 0
|
|
cluster_id = scaleway_k8s_cluster.foxhunt.id
|
|
name = "gpu-dev"
|
|
node_type = var.dev_pool_type
|
|
size = 1
|
|
min_size = 0
|
|
max_size = var.dev_pool_max_size
|
|
autoscaling = true
|
|
autohealing = true
|
|
wait_for_pool_ready = false
|
|
region = var.region
|
|
|
|
lifecycle {
|
|
ignore_changes = [size]
|
|
}
|
|
}
|
|
|