added Reloader

This commit is contained in:
2026-01-10 09:08:25 +01:00
parent 8384ea46c0
commit 38b38131e9
2 changed files with 245 additions and 0 deletions
+22
View File
@@ -922,3 +922,25 @@ spec:
- CreateNamespace=true
- PruneLast=true
---
# Controllers (Reloader, etc.)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: controller
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: homelab
source:
repoURL: https://gitea.dooplex.hu/admin/homelab-manifests.git
targetRevision: main
path: control-system
destination:
server: https://kubernetes.default.svc
namespace: control-system
syncPolicy:
syncOptions:
- CreateNamespace=true
- PruneLast=true
---
+223
View File
@@ -0,0 +1,223 @@
# Reloader - Automatically restarts pods when ConfigMaps/Secrets change
# https://github.com/stakater/Reloader
# Namespace: control-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: reloader
namespace: control-system
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
---
# Role for Reloader's own namespace (for leader election configmap)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: reloader-leader-election
namespace: control-system
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- list
- get
- watch
- create
- update
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- list
- get
- watch
- create
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: reloader-leader-election
namespace: control-system
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: reloader-leader-election
subjects:
- kind: ServiceAccount
name: reloader
namespace: control-system
---
# ClusterRole for watching ConfigMaps/Secrets and updating workloads across all namespaces
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: reloader
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
rules:
- apiGroups:
- ""
resources:
- secrets
- configmaps
verbs:
- list
- get
- watch
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
verbs:
- list
- get
- update
- patch
- apiGroups:
- extensions
resources:
- deployments
- daemonsets
verbs:
- list
- get
- update
- patch
- apiGroups:
- batch
resources:
- cronjobs
verbs:
- list
- get
- apiGroups:
- batch
resources:
- jobs
verbs:
- create
- delete
- list
- get
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: reloader
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: reloader
subjects:
- kind: ServiceAccount
name: reloader
namespace: control-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reloader
namespace: control-system
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
app.kubernetes.io/version: "v1.4.12"
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
template:
metadata:
labels:
app.kubernetes.io/name: reloader
app.kubernetes.io/instance: reloader
app.kubernetes.io/version: "v1.4.12"
spec:
serviceAccountName: reloader
securityContext:
runAsNonRoot: true
runAsUser: 65534
seccompProfile:
type: RuntimeDefault
containers:
- name: reloader
image: ghcr.io/stakater/reloader:v1.4.12
imagePullPolicy: IfNotPresent
env:
- name: GOMAXPROCS
valueFrom:
resourceFieldRef:
divisor: "1"
resource: limits.cpu
- name: GOMEMLIMIT
valueFrom:
resourceFieldRef:
divisor: "1"
resource: limits.memory
- name: RELOADER_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: RELOADER_DEPLOYMENT_NAME
value: reloader
ports:
- name: http
containerPort: 9090
protocol: TCP
resources:
requests:
cpu: 10m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
livenessProbe:
httpGet:
path: /live
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
readinessProbe:
httpGet:
path: /metrics
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL