Skip to content

Commit b4b3f5a

Browse files
committed
feat: add keda
1 parent 23e5493 commit b4b3f5a

File tree

6 files changed

+120
-0
lines changed

6 files changed

+120
-0
lines changed

main.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@ module "karpenter" {
5050
node_role_arn = var.karpenter.node_role_arn
5151
}
5252

53+
module "keda" {
54+
count = var.keda.enabled ? 1 : 0
55+
source = "./modules/keda"
56+
57+
namespace = var.keda.namespace
58+
repository = var.keda.repository
59+
replicas = var.keda.replicas
60+
log_level = var.keda.log_level
61+
metrics_server = var.keda.metrics_server
62+
node_selector = var.keda.node_selector
63+
tolerations = var.keda.tolerations
64+
pod_annotations = var.keda.pod_annotations
65+
}
66+
5367
module "external_secrets" {
5468
count = var.external_secrets.enabled ? 1 : 0
5569

modules/keda/main.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
resource "helm_release" "keda" {
2+
name = "keda"
3+
repository = var.repository
4+
chart = "keda"
5+
namespace = var.namespace
6+
version = "2.16.1"
7+
8+
values = [
9+
yamlencode({
10+
replicas = var.replicas
11+
logLevel = var.log_level
12+
metricsServer = { enabled = var.metrics_server }
13+
nodeSelector = var.node_selector
14+
tolerations = var.tolerations
15+
podAnnotations = var.pod_annotations
16+
})
17+
]
18+
}
19+

modules/keda/outputs.tf

Whitespace-only changes.

modules/keda/variables.tf

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
variable "namespace" {
2+
description = "Namespace where Keda will be deployed"
3+
type = string
4+
default = "cluster-apps"
5+
}
6+
7+
variable "repository" {
8+
description = "Helm repository URL for Keda"
9+
type = string
10+
default = "https://kedacore.github.io/charts"
11+
}
12+
13+
variable "replicas" {
14+
description = "Number of replicas for Keda operator"
15+
type = number
16+
default = 2
17+
}
18+
19+
variable "log_level" {
20+
description = "Logging level for Keda operator"
21+
type = string
22+
default = "info"
23+
}
24+
25+
variable "metrics_server" {
26+
description = "Enable Keda's Prometheus metrics adapter"
27+
type = bool
28+
default = true
29+
}
30+
31+
variable "node_selector" {
32+
description = "Node selector for Keda pods"
33+
type = map(string)
34+
default = {}
35+
}
36+
37+
variable "tolerations" {
38+
description = "Tolerations for Keda pods"
39+
type = list(object({
40+
key = string
41+
operator = string
42+
value = optional(string, null)
43+
effect = optional(string, null)
44+
}))
45+
default = []
46+
}
47+
48+
variable "pod_annotations" {
49+
description = "Annotations for Keda pods"
50+
type = map(string)
51+
default = {}
52+
}

modules/keda/versions.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
terraform {
2+
required_version = ">= 1.9, < 2.0"
3+
4+
required_providers {
5+
kubernetes = {
6+
source = "hashicorp/kubernetes"
7+
version = "~> 2.30"
8+
}
9+
helm = {
10+
source = "hashicorp/helm"
11+
version = "~> 2.14"
12+
}
13+
}
14+
}

variables.tf

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,27 @@ variable "karpenter" {
8383
default = {}
8484
}
8585

86+
variable "keda" {
87+
description = "Keda configuration"
88+
type = object({
89+
enabled = optional(bool, false)
90+
repository = optional(string, "https://kedacore.github.io/charts")
91+
namespace = optional(string, "cluster-apps")
92+
replicas = optional(number, 2)
93+
log_level = optional(string, "info")
94+
metrics_server = optional(bool, true)
95+
node_selector = optional(map(string), {})
96+
tolerations = optional(list(object({
97+
key = string
98+
operator = string
99+
value = optional(string, null)
100+
effect = optional(string, null)
101+
})), [])
102+
pod_annotations = optional(map(string), {})
103+
})
104+
default = {}
105+
}
106+
86107
variable "external_secrets" {
87108
description = "external secrets configuration"
88109
type = object({

0 commit comments

Comments
 (0)