Skip to content

Commit 84c4ccc

Browse files
authored
Merge pull request #162 from devrandom0/sina/add_kubernetes_pdb
feat: add PodDisruptionBudget for high availability
2 parents ac5a925 + afc6285 commit 84c4ccc

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{- if .Values.podDisruptionBudget.enabled }}
2+
---
3+
apiVersion: policy/v1
4+
kind: PodDisruptionBudget
5+
metadata:
6+
name: {{ include "autoneg.fullname" . }}-pdb
7+
namespace: {{ include "autoneg.namespace" . | quote }}
8+
labels:
9+
{{- include "autoneg.labels" . | nindent 4 }}
10+
spec:
11+
selector:
12+
matchLabels:
13+
{{- include "autoneg.selectorLabels" . | nindent 6 }}
14+
{{- if .Values.podDisruptionBudget.minAvailable }}
15+
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
16+
{{- else if .Values.podDisruptionBudget.maxUnavailable }}
17+
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
18+
{{- end }}
19+
{{- end }}

deploy/chart/values.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ autoscaling: {}
2121

2222
replicas: 1
2323

24+
# Pod Disruption Budget configuration
25+
podDisruptionBudget:
26+
# Enable or disable PDB creation
27+
enabled: true
28+
# Specify either minAvailable or maxUnavailable, not both
29+
minAvailable: 1
30+
# maxUnavailable: 1
31+
2432
serviceAccount:
2533
create: true
2634
name: autoneg-controller-manager

terraform/kubernetes/main.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,39 @@ resource "kubernetes_deployment" "deployment_autoneg_controller_manager" {
382382
kubernetes_cluster_role_binding.clusterrolebinding_autoneg_proxy_rolebinding,
383383
]
384384
}
385+
386+
resource "kubernetes_pod_disruption_budget" "pdb_autoneg_controller" {
387+
count = var.pod_disruption_budget.enabled ? 1 : 0
388+
389+
metadata {
390+
name = "autoneg-controller-manager-pdb"
391+
namespace = kubernetes_namespace.namespace_autoneg_system.metadata[0].name
392+
labels = {
393+
app = "autoneg"
394+
control-plane = "controller-manager"
395+
}
396+
}
397+
398+
spec {
399+
dynamic "min_available" {
400+
for_each = var.pod_disruption_budget.min_available != null ? [var.pod_disruption_budget.min_available] : []
401+
content {
402+
value = min_available.value
403+
}
404+
}
405+
406+
dynamic "max_unavailable" {
407+
for_each = var.pod_disruption_budget.max_unavailable != null ? [var.pod_disruption_budget.max_unavailable] : []
408+
content {
409+
value = max_unavailable.value
410+
}
411+
}
412+
413+
selector {
414+
match_labels = {
415+
app = "autoneg"
416+
control-plane = "controller-manager"
417+
}
418+
}
419+
}
420+
}

terraform/kubernetes/variables.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,17 @@ variable "priority_class_name" {
7070
type = string
7171
default = null
7272
}
73+
74+
variable "pod_disruption_budget" {
75+
description = "Pod Disruption Budget configuration"
76+
type = object({
77+
enabled = bool
78+
min_available = optional(number)
79+
max_unavailable = optional(number)
80+
})
81+
default = {
82+
enabled = true
83+
min_available = 1
84+
max_unavailable = null
85+
}
86+
}

0 commit comments

Comments
 (0)