Files
homelab/k8s/base/poddisruptionbudgets.yaml
T
Story Crater Bot 11c26f3f29 k8s: add base namespace and pod disruption budgets
- Namespace setup script with PSP/RBAC
- PodDisruptionBudgets for all services (zero-downtime drain)
2026-07-11 19:16:50 -07:00

323 lines
5.3 KiB
YAML

# k8s/base/poddisruptionbudgets.yaml
# PodDisruptionBudgets ensure zero-downtime cluster maintenance.
# Allows Kubernetes to gracefully drain nodes during updates/maintenance
# without violating availability guarantees.
---
# Observability stack
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: grafana
namespace: logging
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: grafana
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: loki
namespace: logging
spec:
minAvailable: 1
selector:
matchLabels:
app: loki
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: prometheus
namespace: monitoring
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: prometheus
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: prometheus-operator
namespace: monitoring
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: kube-prometheus-stack-operator
---
# IAM stack
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: authentik
namespace: iam
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: authentik
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: vault
namespace: iam
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: vault
---
# CI/CD stack
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: argocd-server
namespace: cicd
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: argocd-server
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: argocd-repo-server
namespace: cicd
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: forgejo
namespace: forge
spec:
minAvailable: 1
selector:
matchLabels:
app: forgejo
---
# Ingress & network
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
---
# Certificate management
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: cert-manager
namespace: cert-manager
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: cert-manager
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: cert-manager-webhook
namespace: cert-manager
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: cert-manager-webhook
---
# Storage & replication
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: minio-az-a
namespace: storage
spec:
minAvailable: 2
selector:
matchLabels:
app: minio
instance: az-a
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: minio-az-b
namespace: storage
spec:
minAvailable: 2
selector:
matchLabels:
app: minio
instance: az-b
---
# Database
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: cnpg-cluster
namespace: ddb
spec:
minAvailable: 2
selector:
matchLabels:
cnpg.io/cluster: ddb-cluster
---
# Messaging
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: kafka-broker
namespace: sqs
spec:
minAvailable: 2
selector:
matchLabels:
app.kubernetes.io/name: kafka
app.kubernetes.io/component: kafka-broker
---
# Workflow orchestration
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: temporal-cassandra
namespace: temporal
spec:
minAvailable: 2
selector:
matchLabels:
app: cassandra
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: temporal-server
namespace: temporal
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/component: server
---
# LLM inference
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: ollama
namespace: llm
spec:
minAvailable: 1
selector:
matchLabels:
app: ollama
---
# Cluster DNS
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: coredns
namespace: kube-system
spec:
minAvailable: 1
selector:
matchLabels:
k8s-app: kube-dns
---
# Cilium networking
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: cilium-agent
namespace: kube-system
spec:
minAvailable: 1
selector:
matchLabels:
k8s-app: cilium
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: cilium-operator
namespace: kube-system
spec:
minAvailable: 1
selector:
matchLabels:
io.cilium/app: operator
---
# Longhorn storage
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: longhorn-manager
namespace: longhorn-system
spec:
minAvailable: 2
selector:
matchLabels:
app: longhorn-manager
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: longhorn-csi-plugin
namespace: longhorn-system
spec:
minAvailable: 1
selector:
matchLabels:
app: csi-provisioner
---
# System components
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: kube-state-metrics
namespace: monitoring
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: kube-state-metrics