Initial Kozel's homelab infrastructure commit.

This commit is contained in:
2026-05-13 13:30:33 +02:00
commit 1a4c5ece17
42 changed files with 1443 additions and 0 deletions
BIN
View File
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudflared
namespace: cloudflare
spec:
replicas: 2
selector:
matchLabels:
app: cloudflared
template:
metadata:
labels:
app: cloudflared
spec:
containers:
- name: cloudflared
image: cloudflare/cloudflared:latest
args:
- tunnel
- --no-autoupdate
- run
- --token
- $(TUNNEL_TOKEN)
env:
- name: TUNNEL_TOKEN
valueFrom:
secretKeyRef:
name: cloudflared-token
key: token
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 250m
memory: 256Mi
+79
View File
@@ -0,0 +1,79 @@
apiVersion: v1
kind: Namespace
metadata:
name: dashboard
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: homepage-data
namespace: dashboard
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: local-path
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: homepage
namespace: dashboard
spec:
replicas: 1
selector:
matchLabels:
app: homepage
template:
metadata:
labels:
app: homepage
spec:
containers:
- name: homepage
image: ghcr.io/gethomepage/homepage:latest
env:
- name: HOMEPAGE_ALLOWED_HOSTS
value: homepage.kozelgaming.cz
- name: LOG_TARGETS
value: stdout
ports:
- containerPort: 3000
volumeMounts:
- name: homepage-data
mountPath: /app/config
volumes:
- name: homepage-data
persistentVolumeClaim:
claimName: homepage-data
---
apiVersion: v1
kind: Service
metadata:
name: homepage
namespace: dashboard
spec:
type: ClusterIP
selector:
app: homepage
ports:
- port: 3000
targetPort: 3000
+18
View File
@@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: monitoring
spec:
ingressClassName: nginx
rules:
- host: grafana.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kube-prometheus-stack-grafana
port:
number: 80
+18
View File
@@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homelab-ingress
namespace: others
spec:
ingressClassName: nginx
rules:
- host: metube.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: metube
port:
number: 8081
+18
View File
@@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myspeed-ingress
namespace: monitoring
spec:
ingressClassName: nginx
rules:
- host: myspeed.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myspeed
port:
number: 5216
+61
View File
@@ -0,0 +1,61 @@
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"longhorn-system\"}}\n"
},
"creationTimestamp": "2026-05-08T21:01:26Z",
"deletionTimestamp": "2026-05-09T10:52:14Z",
"labels": {
"kubernetes.io/metadata.name": "longhorn-system",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/enforce": "privileged",
"pod-security.kubernetes.io/warn": "privileged"
},
"name": "longhorn-system",
"resourceVersion": "290430",
"uid": "98b2816d-d69f-4fd7-a24c-a9c6addc6a26"
},
"spec": {},
"status": {
"conditions": [
{
"lastTransitionTime": "2026-05-09T10:52:19Z",
"message": "All resources successfully discovered",
"reason": "ResourcesDiscovered",
"status": "False",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2026-05-09T10:52:19Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2026-05-09T10:52:59Z",
"message": "Failed to delete all resource types, 5 remaining: Internal error occurred: failed calling webhook \"validator.longhorn.io\": failed to call webhook: Post \"https://longhorn-admission-webhook.longhorn-system.svc:9502/v1/webhook/validation?timeout=10s\": service \"longhorn-admission-webhook\" not found, Internal error occurred: failed calling webhook \"validator.longhorn.io\": failed to call webhook: Post \"https://longhorn-admission-webhook.longhorn-system.svc:9502/v1/webhook/validation?timeout=10s\": service \"longhorn-admission-webhook\" not found, Internal error occurred: failed calling webhook \"validator.longhorn.io\": failed to call webhook: Post \"https://longhorn-admission-webhook.longhorn-system.svc:9502/v1/webhook/validation?timeout=10s\": service \"longhorn-admission-webhook\" not found, Internal error occurred: failed calling webhook \"validator.longhorn.io\": failed to call webhook: Post \"https://longhorn-admission-webhook.longhorn-system.svc:9502/v1/webhook/validation?timeout=10s\": service \"longhorn-admission-webhook\" not found, Internal error occurred: failed calling webhook \"validator.longhorn.io\": failed to call webhook: Post \"https://longhorn-admission-webhook.longhorn-system.svc:9502/v1/webhook/validation?timeout=10s\": service \"longhorn-admission-webhook\" not found",
"reason": "ContentDeletionFailed",
"status": "True",
"type": "NamespaceDeletionContentFailure"
},
{
"lastTransitionTime": "2026-05-09T10:52:59Z",
"message": "Some resources are remaining: engines.longhorn.io has 1 resource instances, snapshots.longhorn.io has 1 resource instances, volumeattachments.longhorn.io has 1 resource instances, volumes.longhorn.io has 1 resource instances",
"reason": "SomeResourcesRemain",
"status": "True",
"type": "NamespaceContentRemaining"
},
{
"lastTransitionTime": "2026-05-09T10:52:59Z",
"message": "Some content in the namespace has finalizers remaining: longhorn.io in 4 resource instances",
"reason": "SomeFinalizersRemain",
"status": "True",
"type": "NamespaceFinalizersRemaining"
}
],
"phase": "Terminating"
}
}
+35
View File
@@ -0,0 +1,35 @@
apiVersion: v1
kind: Namespace
metadata:
name: storage-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-volume
namespace: storage-test
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: storage-test
spec:
containers:
- name: test
image: busybox:1.36
command: ["sh", "-c", "echo Longhorn funguje > /data/test.txt && sleep 3600"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: test-volume
+17
View File
@@ -0,0 +1,17 @@
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: k8s-lan-pool
namespace: metallb-system
spec:
addresses:
- 10.0.4.80-10.0.4.90
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: k8s-lan-l2
namespace: metallb-system
spec:
ipAddressPools:
- k8s-lan-pool
BIN
View File
Binary file not shown.
+32
View File
@@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: myspeed
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: myspeed
template:
metadata:
labels:
app: myspeed
spec:
containers:
- name: myspeed
image: germannewsmaker/myspeed:latest
ports:
- containerPort: 5216
---
apiVersion: v1
kind: Service
metadata:
name: myspeed
namespace: monitoring
spec:
selector:
app: myspeed
ports:
- port: 5216
targetPort: 5216
+60
View File
@@ -0,0 +1,60 @@
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: uptime-kuma-data
namespace: monitoring
spec:
storageClassName: longhorn
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: uptime-kuma
namespace: monitoring
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: uptime-kuma
template:
metadata:
labels:
app: uptime-kuma
spec:
containers:
- name: uptime-kuma
image: louislam/uptime-kuma:2.3.2
ports:
- containerPort: 3001
volumeMounts:
- name: uptime-kuma-data
mountPath: /app/data
volumes:
- name: uptime-kuma-data
persistentVolumeClaim:
claimName: uptime-kuma-data
---
apiVersion: v1
kind: Service
metadata:
name: uptime-kuma
namespace: monitoring
spec:
type: ClusterIP
selector:
app: uptime-kuma
ports:
- port: 3001
targetPort: 3001
+38
View File
@@ -0,0 +1,38 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: metube
namespace: others
spec:
replicas: 1
selector:
matchLabels:
app: metube
template:
metadata:
labels:
app: metube
spec:
containers:
- name: metube
image: ghcr.io/alexta69/metube:latest
ports:
- containerPort: 8081
env:
- name: UID
value: "1000"
- name: GID
value: "1000"
---
apiVersion: v1
kind: Service
metadata:
name: metube
namespace: others
spec:
selector:
app: metube
ports:
- port: 8081
targetPort: 8081
BIN
View File
Binary file not shown.
+22
View File
@@ -0,0 +1,22 @@
authentik:
secret_key: "mpREYM2Ad+5+WIgtAKYvLwDnC1hbp/r/en+SROa/xwKpmqwhYWH4LirhMk6XaAeu
N8lga6oOBqMMmhzeWKn7/Q=="
postgresql:
host: "authentik-postgresql"
user: "authentik"
password: "9u3cbsYwH+YdI5Cib4K5iFGetg5QS1WtSBeVUlApWx0="
name: "authentik"
postgresql:
enabled: true
auth:
username: "authentik"
password: "9u3cbsYwH+YdI5Cib4K5iFGetg5QS1WtSBeVUlApWx0="
database: "authentik"
redis:
enabled: true
server:
ingress:
enabled: false