Cloud and Self-Hosting

Deploy Your First Application on K3s Using Kubernetes Dashboard Web UI

Learn how to deploy a real application on a K3s Kubernetes cluster using the Kubernetes Dashboard Web UI. This step-by-step guide covers namespace creation, persistent storage, service exposure, and accessing n8n in your home-lab Kubernetes environment.

By Amjid Ali Β· Β· Updated Β· 4 min read

Deploy Your First Application on K3s Using Kubernetes Dashboard Web UI: SyncBricks cover
In this article
  1. Prerequisites
  2. What We Will Achieve
  3. 🧭 Step 1 β€” Create a Namespace
  4. πŸš€ Step 2 β€” Deploy the Application (n8n)
  5. 🌐 Step 3 β€” Make n8n Accessible from OutsideBy default, Services are internal only β€” we need NodePort.
  6. πŸ’Ύ Step 4 β€” Add Persistent Storage (Important!)
  7. πŸ“ˆ Step 5 β€” Scale for High Availability
  8. βœ… Optional: Public Access via Reverse Proxy
  9. βœ… Verification Checklist
  10. πŸ”₯ What’s Next?
  11. βœ… n8n Deployment YAML for K3s
  12. βœ… Conclusion

(Step-by-Step Tutorial for Beginners)
Absolutely! Here is a complete and polished blog/tutorial for your first application deployment on Kubernetes (K3s) using the Kubernetes Dashboard Web UI only β€” no CLI complexity. You can publish this directly on your blog or course.

Kubernetes can feel overwhelming when starting out β€” YAML, CLI commands, networking, services, pods… it’s a lot to digest. But with K3s and the Kubernetes Dashboard Web UI, deploying your first app becomes simple and visual.

In this guide, we’ll deploy n8n (a workflow automation tool) onto a running K3s cluster using only the browser-based Dashboard. No Kubernetes CLI commands required.

Prerequisites

Before you begin, you should have:

βœ” A working K3s cluster (single or multi-node)
βœ” Kubernetes Dashboard UI installed and accessible
βœ” A login token with admin or developer access

What We Will Achieve

Feature Status
Deploy n8n in a new namespace βœ…
Create a Deployment (Pod) visually βœ…
Expose it externally using NodePort βœ…
Access app using any cluster node IP βœ…
Add persistent storage βœ…
Scale pods for resilience βœ…

You will fully understand your first Kubernetes workload by the end of this tutorial.

🧭 Step 1 β€” Create a Namespace

Namespaces help organize apps and policies.

πŸ“Œ In Dashboard:

βœ… Go to Namespaces
βœ… Click Create (top-right)
βœ… Enter Name:

apps

βœ… Click Create

πŸš€ Step 2 β€” Deploy the Application (n8n)

πŸ“Œ In Dashboard:

βœ… Go to Workloads β†’ Deployments
βœ… Click Create
βœ… Choose: Create from form
βœ… Enter:

Field Value
App name n8n
Container image n8nio/n8n:latest
Ports 5678
Namespace apps

Leave everything else default for now.

βœ… Click Deploy

Wait until the Deployment shows:

Pods: 1/1 Ready βœ…
Status: Running βœ…

🌐 Step 3 β€” Make n8n Accessible from OutsideBy default, Services are internal only β€” we need NodePort.

πŸ“Œ In Dashboard:

βœ… Go to Services under namespace apps
βœ… Locate service automatically created (name like: n8n-service)
βœ… Click Edit
βœ… Change:

Service Type: ClusterIP ➜ NodePort

βœ… Save

βœ… Find Access URL

πŸ‘‰ Click the service β†’ scroll to Ports
You will see something like:

Port: 5678
NodePort: 30456

Now, visit:

http://<Any-K3s-Node-IP>:30456

Example:

http://10.11.12.11:30456

πŸŽ‰ n8n is now running on your cluster!

πŸ’Ύ Step 4 β€” Add Persistent Storage (Important!)

By default, if the Pod is recreated β†’ your n8n workflows are lost.

πŸ“Œ Create a storage volume:

βœ… Go to Storage β†’ PersistentVolumeClaims β†’ Create
βœ… Fill form:

Field Value
PVC Name n8n-storage
Size 5Gi
Access Mode ReadWriteOnce
Namespace apps

βœ… Create

πŸ“Œ Attach PVC to Deployment:

βœ… Go to Workloads β†’ Deployments β†’ n8n
βœ… Edit β†’ Add Volume:

  • Volume name: n8n-data
  • PVC: n8n-storage

βœ… Mount to container path:

/home/node/.n8n

βœ… Save β†’ Pod restarts

βœ… Now data is safely persisted βœ…

πŸ“ˆ Step 5 β€” Scale for High Availability

Want always-on automation? Scale the Deployment βœ…

πŸ“Œ In Deployment details:

βœ… Click Scale
βœ… Set:

3 Replicas

Kubernetes spreads pods across multiple nodes if available.

βœ” Automatic failover
βœ” Resilience against a node outage

βœ… Optional: Public Access via Reverse Proxy

If you use NGINX Reverse Proxy Manager (great choice!), simply:

Setting Value
Domain n8n.yourdomain.com
Forward To http://<Node-IP>:30456
SSL Enable Let’s Encrypt βœ…

Now live securely on HTTPS βœ…

βœ… Verification Checklist

Check Result
Pod Status βœ… Ready
Access via NodePort βœ… Browser working
Persistent Data βœ… Doesn’t reset on restart
Scaling βœ… 3 Pods spread across nodes

You have successfully deployed your first production-style Kubernetes application!

πŸ”₯ What’s Next?

Now that you understand the workflow, we can upgrade the architecture:

Feature Why
Move to PostgreSQL in K3s Real database for automation
Ingress + cert-manager Automatic TLS + domain routing
Qdrant vector DB AI automation support
Monitoring stack Grafana + Prometheus
Scheduled backups Enterprise safety

And we will do all of this together βœ…

βœ… n8n Deployment YAML for K3s

apiVersion: v1
kind: Namespace
metadata:
  name: apps
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: n8n-storage
  namespace: apps
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n
  namespace: apps
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n
  template:
    metadata:
      labels:
        app: n8n
    spec:
      containers:
      - name: n8n
        image: n8nio/n8n:latest
        ports:
        - containerPort: 5678
        volumeMounts:
        - name: n8n-data
          mountPath: /home/node/.n8n
      volumes:
      - name: n8n-data
        persistentVolumeClaim:
          claimName: n8n-storage
---
apiVersion: v1
kind: Service
metadata:
  name: n8n-service
  namespace: apps
spec:
  selector:
    app: n8n
  ports:
  - port: 5678
    targetPort: 5678
    nodePort: 30456
    protocol: TCP
  type: NodePort

βœ… Conclusion

You just deployed your first real workload on K3s without writing a single Kubernetes YAML. You now understand:

βœ” Deployments
βœ” Pods
βœ” Services
βœ” NodePort networking
βœ” Persistent storage
βœ” Scaling for availability

Related videos

Video library
  • Cloud and Self-Hosting

    Heimdall Docker Installation Guide | Set up a Home Lab Dashboard

    Β· 6:30 Β· 14K views

    Watch on YouTube
  • Cloud and Self-Hosting

    MAAS Install Guide: Deploy Bare-Metal Servers Like a Cloud

    Β· 17:50 Β· 11.5K views

    Watch on YouTube
  • Cloud and Self-Hosting

    How to Generate and Deploy SSH Keys for Proxmox Cluster Login (Passwordless SSH Access)

    Β· 7:12 Β· 7.8K views

    Watch on YouTube