Compare commits

...
Author SHA1 Message Date
ab 29c5b00c16 Added airtrail deployment
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 6s
Check with kubeconform / lint (push) Successful in 7s
Auto-update README / Generate README and Create MR (push) Successful in 9s
2026-09-12 07:18:56 +03:00
7 changed files with 172 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: airtrail
namespace: argocd
spec:
project: apps
destination:
namespace: airtrail
server: https://kubernetes.default.svc
source:
repoURL: ssh://git@gt.hexor.cy:30022/ab/homelab.git
targetRevision: HEAD
path: k8s/apps/airtrail
syncPolicy:
automated:
selfHeal: true
prune: true
syncOptions:
- CreateNamespace=true
+66
View File
@@ -0,0 +1,66 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: airtrail
labels:
app: airtrail
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: airtrail
template:
metadata:
labels:
app: airtrail
spec:
securityContext:
fsGroup: 1000
containers:
- name: airtrail
image: johly/airtrail:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 3000
env:
- name: ORIGIN
value: https://at.hexor.cy
- name: DB_URL
valueFrom:
secretKeyRef:
name: airtrail-creds
key: DB_URL
- name: UPLOAD_LOCATION
value: /app/uploads
- name: BODY_SIZE_LIMIT
value: 20M
volumeMounts:
- name: uploads
mountPath: /app/uploads
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi
startupProbe:
tcpSocket:
port: http
periodSeconds: 10
failureThreshold: 30
readinessProbe:
tcpSocket:
port: http
periodSeconds: 10
livenessProbe:
tcpSocket:
port: http
periodSeconds: 30
volumes:
- name: uploads
persistentVolumeClaim:
claimName: airtrail-uploads
+25
View File
@@ -0,0 +1,25 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: airtrail-creds
spec:
target:
name: airtrail-creds
deletionPolicy: Delete
template:
type: Opaque
data:
DB_URL: |-
postgresql://airtrail:{{ .airtrail | trim | urlquery | replace "+" "%20" }}@psql.psql.svc:5432/airtrail
data:
- secretKey: airtrail
sourceRef:
storeRef:
name: vaultwarden-login
kind: ClusterSecretStore
remoteRef:
conversionStrategy: Default
decodingStrategy: None
metadataPolicy: None
key: 2a9deb39-ef22-433e-a1be-df1555625e22
property: fields[21].value
+25
View File
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: airtrail-tls-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt
traefik.ingress.kubernetes.io/router.middlewares: kube-system-https-redirect@kubernetescrd
acme.cert-manager.io/http01-edit-in-place: "true"
spec:
ingressClassName: traefik
rules:
- host: at.hexor.cy
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: airtrail
port:
number: 3000
tls:
- secretName: airtrail-tls
hosts:
- at.hexor.cy
+10
View File
@@ -0,0 +1,10 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app.yaml
- external-secrets.yaml
- storage.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
+15
View File
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: airtrail
labels:
app: airtrail
spec:
type: ClusterIP
selector:
app: airtrail
ports:
- name: http
protocol: TCP
port: 3000
targetPort: http
+11
View File
@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: airtrail-uploads
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 1Gi