I'm currently working on a Kubernetes plugin for OMV7.
The plugin is intended to implement a single-node Kubernetes environment using SUSE K3s. The plugin comes with preinstalled Traefik, Cert-Manager and Kubernetes Dashboard.
The OMV UI contains list views for the most important resources, but it is never intended to be a replacement for other UIs such as Kubernetes Dashboard or SUSE Rancher.
It will introduce so-called recipes that are simply manifests or that are based on existing Helm charts. This should make it easier for less experienced kubernetes users to get started.
I am planning a new GitHub repository where anyone interested can contribute such recipes for all kinds of applications. The UI will then integrate these and thus simplify the installation of applications.
Here are some simple example:
Filebrowser
apiVersion: v1
kind: Namespace
metadata:
name: filebrowser-app
---
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
name: "shared-folder-data"
namespace: filebrowser-app
spec:
storageClassName: shared-folder
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: "2Gi"
volumeName: "shared-folder-data"
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: filebrowser
namespace: filebrowser-app
spec:
repo: https://utkuozdemir.org/helm-charts
chart: filebrowser
targetNamespace: filebrowser-app
valuesContent: |-
securityContext:
runAsNonRoot: true
runAsUser: 1001
runAsGroup: 100
rootDir:
pvc:
existingClaim: "shared-folder-data"
config:
baseURL: /filebrowser
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: filebrowser-websecure
namespace: filebrowser-app
spec:
entryPoints:
- websecure
routes:
- match: PathPrefix(`/filebrowser`)
kind: Rule
services:
- name: filebrowser
port: 80
tls:
secretName: host-selfsigned-cert
Alles anzeigen
WeTTY
apiVersion: v1
kind: Namespace
metadata:
name: wetty-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/instance: wetty
app.kubernetes.io/name: wetty
name: wetty
namespace: wetty-app
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/instance: wetty
app.kubernetes.io/name: wetty
template:
metadata:
labels:
app.kubernetes.io/instance: wetty
app.kubernetes.io/name: wetty
spec:
containers:
- image: docker.io/wettyoss/wetty:latest
imagePullPolicy: IfNotPresent
name: wetty
ports:
- containerPort: 3000
securityContext:
runAsNonRoot: true
runAsUser: 65534
runAsGroup: 65534
args:
- "--port 3000"
- "--base /wetty"
- "--force-ssh"
- "--ssh-port 22"
- "--ssh-host=<HOSTNAME>"
---
apiVersion: v1
kind: Service
metadata:
name: wetty
namespace: wetty-app
labels:
app.kubernetes.io/instance: wetty
app.kubernetes.io/name: wetty
spec:
type: ClusterIP
ports:
- name: wetty
port: 3000
protocol: TCP
targetPort: 3000
selector:
app.kubernetes.io/instance: wetty
app.kubernetes.io/name: wetty
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: wetty-websecure
namespace: wetty-app
spec:
entryPoints:
- websecure
routes:
- match: PathPrefix(`/wetty`)
kind: Rule
services:
- name: wetty
port: 3000
tls:
secretName: host-selfsigned-cert
Alles anzeigen
You can watch a video on the project Youtube channel to get a first impression about the plugin.