Deploy Your First Application on K3s Using Kubernetes Dashboard Web UI


Warning: Undefined array key "uniqueId" in /www/wwwroot/syncbricks.com/wp-content/plugins/generateblocks/includes/blocks/class-container.php on line 997

(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

FeatureStatus
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:

FieldValue
App namen8n
Container imagen8nio/n8n:latest
Ports5678
Namespaceapps

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:

FieldValue
PVC Namen8n-storage
Size5Gi
Access ModeReadWriteOnce
Namespaceapps

✅ 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:

SettingValue
Domainn8n.yourdomain.com
Forward Tohttp://<Node-IP>:30456
SSLEnable Let’s Encrypt ✅

Now live securely on HTTPS ✅

✅ Verification Checklist

CheckResult
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:

FeatureWhy
Move to PostgreSQL in K3sReal database for automation
Ingress + cert-managerAutomatic TLS + domain routing
Qdrant vector DBAI automation support
Monitoring stackGrafana + Prometheus
Scheduled backupsEnterprise 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

Leave a Comment