diff --git a/k8s/apps/xandikos/app.yaml b/k8s/apps/xandikos/app.yaml new file mode 100644 index 0000000..233776f --- /dev/null +++ b/k8s/apps/xandikos/app.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: xandikos + namespace: argocd +spec: + project: apps + destination: + namespace: xandikos + server: https://kubernetes.default.svc + source: + repoURL: ssh://git@gt.hexor.cy:30022/ab/homelab.git + targetRevision: HEAD + path: k8s/apps/xandikos + syncPolicy: + automated: + selfHeal: true + prune: true + syncOptions: + - CreateNamespace=true + diff --git a/k8s/apps/xandikos/deployment.yaml b/k8s/apps/xandikos/deployment.yaml new file mode 100644 index 0000000..dfdaf44 --- /dev/null +++ b/k8s/apps/xandikos/deployment.yaml @@ -0,0 +1,70 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: xandikos + labels: + app: xandikos +spec: + selector: + matchLabels: + app: xandikos + replicas: 1 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + template: + metadata: + labels: + app: xandikos + spec: + nodeSelector: + kubernetes.io/hostname: master.tail2fe2d.ts.net + volumes: + - name: storage + hostPath: + path: /k8s/xandikos + type: Directory + containers: + - name: xandikos + image: ghcr.io/jelmer/xandikos:latest + imagePullPolicy: Always + command: + - "python3" + - "-m" + - "xandikos.web" + - "--port=8081" + - "-d/data" + - "--defaults" + - "--listen-address=0.0.0.0" + - "--route-prefix=/dav" + resources: + requests: + memory: "64Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "1000m" + livenessProbe: + httpGet: + path: /health + port: 8081 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /health + port: 8081 + initialDelaySeconds: 10 + periodSeconds: 5 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 8081 + protocol: TCP + volumeMounts: + - name: storage + mountPath: /data diff --git a/k8s/apps/xandikos/ingress.yaml b/k8s/apps/xandikos/ingress.yaml new file mode 100644 index 0000000..4d4a568 --- /dev/null +++ b/k8s/apps/xandikos/ingress.yaml @@ -0,0 +1,40 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: xandikos + annotations: + ingressClassName: traefik + 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: + rules: + - host: cal.hexor.cy + http: + paths: + - path: /dav + pathType: Prefix + backend: + service: + name: xandikos + port: + number: 8081 + - path: /.well-known/carddav + pathType: Exact + backend: + service: + name: xandikos + port: + number: 8081 + - path: /.well-known/caldav + pathType: Exact + backend: + service: + name: xandikos + port: + number: 8081 + tls: + - secretName: xandikos-tls + hosts: + - cal.hexor.cy diff --git a/k8s/apps/xandikos/kustomization.yaml b/k8s/apps/xandikos/kustomization.yaml new file mode 100644 index 0000000..0aa569e --- /dev/null +++ b/k8s/apps/xandikos/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - app.yaml + - deployment.yaml + - service.yaml + - ingress.yaml + + diff --git a/k8s/apps/xandikos/service.yaml b/k8s/apps/xandikos/service.yaml new file mode 100644 index 0000000..d3b2e70 --- /dev/null +++ b/k8s/apps/xandikos/service.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: xandikos + labels: + app: xandikos +spec: + selector: + app: xandikos + ports: + - protocol: TCP + port: 8081 + targetPort: 8081 + name: http + type: ClusterIP