fix: add helm-chart

This commit is contained in:
Rüdiger Küpper 2024-07-18 09:16:51 +02:00
parent 30a8ddf113
commit 24de4fd163
13 changed files with 389 additions and 0 deletions

6
helm/Chart.yaml Normal file
View File

@ -0,0 +1,6 @@
apiVersion: v1
appVersion: "v2.30.0"
description: "filebrowser"
name: filebrowser
release-name: filebrowser
version: v1.0.6

26
helm/README.md Normal file
View File

@ -0,0 +1,26 @@
## package helm chart
perl -pe 's/(version: )(v\d\.)(\d\.)(\d+)/$1 . $2.$3.($4 + 1)/ge' helm/Chart.yaml > helm/Chart.yaml.tmp;
mv helm/Chart.yaml.tmp helm/Chart.yaml
helm package helm
helm cm-push -u <username> -p <password> $(ls -tr -1 *.tgz | tail -n 1) <repo>
## install
helm install <releasename> <repo>/<chartname> --namespace <namespace> --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com'
or
helm upgrade --install <releasename> <repo>/<chartname> --namespace <namespace> --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com'
## install from local directory
helm upgrade --install <releasename> helm/ --namespace <namespace> --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com'
## upgrade
helm repo update
helm upgrade <releasename> <repo>/<chartname> --namespace <namespace>

View File

@ -0,0 +1,20 @@
{{- if (eq (toString .Values.cr.enabled ) "true") }}
apiVersion: v1
kind: Secret
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: dockersecret
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}-docker
namespace: {{ .Values.namespace }}
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: {{ .Values.cr.dockersecret }}
{{ end }}

View File

@ -0,0 +1,25 @@
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: configmap
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}-cm
namespace: {{ .Values.namespace }}
data:
.filebrowser.json: |
{
"port": 80,
"baseURL": "/files",
"address": "",
"log": "stdout",
"database": "/srv/config/database.db",
"root": "/srv"
}

View File

@ -0,0 +1,76 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: web
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}
namespace: {{ .Values.namespace }}
metadata:
labels:
app: {{ .Values.fullnameOverride }}
name: {{ .Values.namespace }}
name: {{ .Values.fullnameOverride }}
namespace: {{ .Values.namespace }}
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: {{ .Values.fullnameOverride }}
name: {{ .Values.namespace }}
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: {{ .Values.fullnameOverride }}
name: {{ .Values.namespace }}
spec:
containers:
- image: {{ .Values.cr.registry }}/{{ .Values.cr.image }}:{{ .Values.cr.tag }}
imagePullPolicy: Always
name: remoteip
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /srv
name: data-pvc
- mountPath: /srv/config
name: files-pvc
- mountPath: /.filebrowser.json
name: filebrowser-cm
subPath: .filebrowser.json
dnsPolicy: ClusterFirst
{{- if (eq (toString .Values.cr.enabled ) "true") }}
imagePullSecrets:
- name: {{ .Values.fullnameOverride }}-docker
{{ end }}
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: data-pvc
persistentVolumeClaim:
claimName: {{ .Values.namespace }}-data-pvc
- name: files-pvc
persistentVolumeClaim:
claimName: {{ .Values.namespace }}-files-pvc
- configMap:
defaultMode: 420
name: filebrowser-cm
name: filebrowser-cm

View File

@ -0,0 +1,40 @@
{{- if (eq (toString .Values.ingress.enabled ) "true") }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
cert-manager.io/cluster-issuer: letsencrypt-prod
ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
traefik.ingress.kubernetes.io/router.middlewares: {{ .Values.fullnameOverride }}-redirect@kubernetescrd
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: web
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}
namespace: {{ .Values.namespace }}
spec:
ingressClassName: {{ .Values.ingress.ingessClassName }}
rules:
- host: {{ .Values.ingress.domain }}
http:
paths:
- backend:
service:
name: {{ .Values.fullnameOverride }}
port:
number: {{ .Values.loadbalancer.port }}
path: /
pathType: Prefix
{{- if (eq (toString .Values.ingress.tls ) "true") }}
tls:
- hosts:
- {{ .Values.ingress.domain }}
secretName: {{ .Values.ingress.domain }}-tls
{{ end }}
{{ end }}

View File

@ -0,0 +1,32 @@
apiVersion: v1
kind: Service
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
name: {{ .Values.namespace }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: service
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}
namespace: {{ .Values.namespace }}
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: {{ .Values.fullnameOverride }}
port: {{ .Values.loadbalancer.port }}
protocol: {{ .Values.loadbalancer.protocol }}
targetPort: {{ .Values.loadbalancer.targetport }}
selector:
app: {{ .Values.fullnameOverride }}
name: {{ .Values.namespace }}
sessionAffinity: None
type: ClusterIP

View File

@ -0,0 +1,19 @@
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: middleware
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: redirect
namespace: {{ .Values.namespace }}
spec:
redirectScheme:
permanent: true
scheme: https

View File

@ -0,0 +1,31 @@
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: web
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}-data-pv
namespace: {{ .Values.namespace }}
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 100M
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: {{ .Values.fullnameOverride }}-data-pvc
namespace: {{ .Values.namespace }}
hostPath:
path: /mnt/{{ .Values.fullnameOverride }}-data-pv
type: ""
persistentVolumeReclaimPolicy: Retain
storageClassName: {{ .Values.storage.class }}
volumeMode: Filesystem

View File

@ -0,0 +1,31 @@
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: web
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}-files-pv
namespace: {{ .Values.namespace }}
spec:
accessModes:
- ReadWriteMany
capacity:
storage: {{ .Values.storage.size }}
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: {{ .Values.fullnameOverride }}-files-pvc
namespace: {{ .Values.namespace }}
hostPath:
path: /mnt/{{ .Values.fullnameOverride }}-files-pvc
type: ""
persistentVolumeReclaimPolicy: Retain
storageClassName: {{ .Values.storage.class }}
volumeMode: Filesystem

View File

@ -0,0 +1,24 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: pvc
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.namespace }}-data-pvc
namespace: {{ .Values.namespace }}
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100M
storageClassName: {{ .Values.storage.class }}
volumeMode: Filesystem
volumeName: {{ .Values.namespace }}-data-pv

View File

@ -0,0 +1,24 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
helmrepo: "{{ .Values.helmrepo }}"
labels:
app: {{ .Values.fullnameOverride }}
app.kubernetes.io/component: {{ .Values.fullnameOverride }}
app.kubernetes.io/instance: pvc
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: {{ .Values.fullnameOverride }}
app.kubernetes.io/version: {{ .Chart.Version }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
name: {{ .Values.fullnameOverride }}-files-pvc
namespace: {{ .Values.namespace }}
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: {{ .Values.storage.size }}
storageClassName: {{ .Values.storage.class }}
volumeMode: Filesystem
volumeName: {{ .Values.fullnameOverride }}-files-pv

35
helm/values.yaml Normal file
View File

@ -0,0 +1,35 @@
fullnameOverride: "filebrowser"
replicaCount: 1
namespace: filebrowser
helmrepo: "https://github.com/filebrowser/filebrowser"
storage:
size: 10Gi
class: local-path
cr:
enbled: false
dockersecret: ""
registry: docker.io
image: filebrowser/filebrowser
tag: v2.30.0
ingress:
enabled: true
tls: true
ingessClassName: traefik
domain: files.example.com
loadbalancer:
port: 80
targetport: 80
protocol: TCP
nodeSelector: {}
tolerations: []
affinity: {}