infra/stacks/osm_routing/main.tf
Viktor Barzin 843ba0ae8f scale down unused/over-replicated services
- osm-routing (otp, osrm-bicycle, osrm-foot): replicas=0, 0Mi actual usage
- dashy: replicas=0, redundant with homepage
- echo: 5 -> 1 replica
- networking-toolbox: 3 -> 1 replica
- travel-blog: 3 -> 1 replica
- blog: 3 -> 1 replica

Saves ~3.5Gi memory requests.
2026-03-14 21:12:44 +00:00

296 lines
6.4 KiB
HCL

variable "tls_secret_name" {
type = string
sensitive = true
}
variable "nfs_server" { type = string }
resource "kubernetes_namespace" "osm-routing" {
metadata {
name = "osm-routing"
labels = {
"istio-injection" : "disabled"
tier = local.tiers.aux
"resource-governance/custom-quota" = "true"
}
}
}
resource "kubernetes_resource_quota_v1" "osm_routing" {
metadata {
name = "tier-quota"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
}
spec {
hard = {
"requests.cpu" = "4"
"requests.memory" = "6Gi"
"limits.cpu" = "16"
"limits.memory" = "16Gi"
pods = "20"
}
}
}
module "nfs_osrm_data" {
source = "../../modules/kubernetes/nfs_volume"
name = "osm-routing-osrm-data"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
nfs_server = var.nfs_server
nfs_path = "/mnt/main/osm-routing/osrm-data"
}
module "nfs_otp_data" {
source = "../../modules/kubernetes/nfs_volume"
name = "osm-routing-otp-data"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
nfs_server = var.nfs_server
nfs_path = "/mnt/main/osm-routing/otp-data"
}
# --- OSRM Foot ---
resource "kubernetes_deployment" "osrm-foot" {
metadata {
name = "osrm-foot"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "osrm-foot"
tier = local.tiers.aux
}
}
spec {
# Disabled: reduce cluster memory pressure (2026-03-14 OOM incident)
replicas = 0
strategy {
type = "Recreate"
}
selector {
match_labels = {
app = "osrm-foot"
}
}
template {
metadata {
labels = {
app = "osrm-foot"
}
}
spec {
container {
name = "osrm-foot"
image = "ghcr.io/project-osrm/osrm-backend:latest"
command = ["osrm-routed", "--algorithm", "MLD", "/data/foot/greater-london-latest.osrm"]
port {
name = "http"
container_port = 5000
protocol = "TCP"
}
volume_mount {
name = "osrm-data"
mount_path = "/data"
}
resources {
requests = {
cpu = "15m"
memory = "256Mi"
}
limits = {
memory = "256Mi"
}
}
}
volume {
name = "osrm-data"
persistent_volume_claim {
claim_name = module.nfs_osrm_data.claim_name
}
}
}
}
}
}
resource "kubernetes_service" "osrm-foot" {
metadata {
name = "osrm-foot"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "osrm-foot"
}
}
spec {
selector = {
app = "osrm-foot"
}
port {
port = 5000
target_port = 5000
}
}
}
# --- OSRM Bicycle ---
resource "kubernetes_deployment" "osrm-bicycle" {
metadata {
name = "osrm-bicycle"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "osrm-bicycle"
tier = local.tiers.aux
}
}
spec {
# Disabled: reduce cluster memory pressure (2026-03-14 OOM incident)
replicas = 0
strategy {
type = "Recreate"
}
selector {
match_labels = {
app = "osrm-bicycle"
}
}
template {
metadata {
labels = {
app = "osrm-bicycle"
}
}
spec {
container {
name = "osrm-bicycle"
image = "ghcr.io/project-osrm/osrm-backend:latest"
command = ["osrm-routed", "--algorithm", "MLD", "/data/bicycle/greater-london-latest.osrm"]
port {
name = "http"
container_port = 5000
protocol = "TCP"
}
volume_mount {
name = "osrm-data"
mount_path = "/data"
}
resources {
requests = {
cpu = "15m"
memory = "256Mi"
}
limits = {
memory = "256Mi"
}
}
}
volume {
name = "osrm-data"
persistent_volume_claim {
claim_name = module.nfs_osrm_data.claim_name
}
}
}
}
}
}
resource "kubernetes_service" "osrm-bicycle" {
metadata {
name = "osrm-bicycle"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "osrm-bicycle"
}
}
spec {
selector = {
app = "osrm-bicycle"
}
port {
port = 5000
target_port = 5000
}
}
}
# --- OTP (OpenTripPlanner) ---
resource "kubernetes_deployment" "otp" {
metadata {
name = "otp"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "otp"
tier = local.tiers.aux
}
}
spec {
# Disabled: reduce cluster memory pressure (2026-03-14 OOM incident)
replicas = 0
strategy {
type = "Recreate"
}
selector {
match_labels = {
app = "otp"
}
}
template {
metadata {
labels = {
app = "otp"
}
}
spec {
container {
name = "otp"
image = "opentripplanner/opentripplanner:2.6.0"
args = ["--build", "--save"]
port {
name = "http"
container_port = 8080
protocol = "TCP"
}
volume_mount {
name = "otp-data"
mount_path = "/var/opentripplanner"
}
env {
name = "JAVA_TOOL_OPTIONS"
value = "-Xmx3g"
}
resources {
requests = {
cpu = "300m"
memory = "2Gi"
}
limits = {
memory = "2Gi"
}
}
}
volume {
name = "otp-data"
persistent_volume_claim {
claim_name = module.nfs_otp_data.claim_name
}
}
}
}
}
}
resource "kubernetes_service" "otp" {
metadata {
name = "otp"
namespace = kubernetes_namespace.osm-routing.metadata[0].name
labels = {
app = "otp"
}
}
spec {
selector = {
app = "otp"
}
port {
port = 8080
target_port = 8080
}
}
}