Back when I was at Honeywell, I had the privilege of being involved in some massive projects — including OpenVEP and Experion Elevate SCADA. These were enterprise-grade control systems that took entire teams months to scope, configure, deploy, and integrate. I remember the time, cost, and sheer coordination it took to stand something up in a data center.
Fast forward to today, and I’m blown away that I can spin up a demo SCADA environment in just minutes using containers and a Kubernetes cluster on Civo. Of course, this is just for demonstration purposes — a production deployment would require persistent volumes and hardened security — but the fact that it’s even possible this quickly is remarkable.
This post walks you through how I deployed Inductive Automation’s Ignition platform to a Civo Kubernetes cluster using nothing more than the CLI, a few YAML files, and Docker Hub.
Step 1: Create the Kubernetes Cluster
I used the Civo web dashboard to create a new Kubernetes cluster. The process is straightforward:
- Choose your cluster name, size, and node count (I used 3 nodes).
- Under networking, select “default” or create a new network.
- Let Civo auto-create a firewall or configure one manually if needed.
- Hit Create Cluster and within a few minutes, your cluster is ready.
Civo even gives you an estimated time to completion and notifies you when everything is live.
Step 2: Set Up the CLI
Although the web UI is great, I prefer using the command line — especially when scripting deployments.
To install the Civo CLI on Windows:
choco install civo-cli
Once installed, link your CLI to your Civo account:
civo apikey save
You’ll need your API key, which you can find under Account Settings > Security in the Civo dashboard.
Step 3: Connect kubectl to Your Cluster
Get the kubeconfig for your cluster with:
civo kubernetes config <your_cluster_id> –save
This will merge the config with your existing kubeconfig file, allowing you to run:
kubectl config use-context ignitiondemo
kubectl get nodes
Step 4: Deploy Ignition
Ignition is available on Docker Hub under inductiveautomation/ignition. For this demo, I used version 8.1.41.
a) Create a Namespace
Save this to IgnitionNS.yaml:
Apply it with:
apiVersion: v1
kind: Namespace
metadata:
name: ignition-demo
kubectl apply -f IgnitionNS.yaml
b) Create the Deployment
Here’s the deployment YAML (IgnitionDeploy.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: ignition
namespace: ignition-demo
spec:
replicas: 1
selector:
matchLabels:
app: ignition
template:
metadata:
labels:
app: ignition
spec:
containers:
– name: ignition
image: inductiveautomation/ignition:8.1.41
ports:
– containerPort: 8088
Apply it with:
kubectl apply -f IgnitionDeploy.yaml
Step 5: Expose the Deployment
To make Ignition accessible externally, we’ll use a LoadBalancer service. Save this as IgnitionLB.yaml:
apiVersion: v1
kind: Service
metadata:
name: ignition-lb
namespace: ignition-demo
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8088
protocol: TCP
selector:
app: ignition
Apply it:
kubectl apply -f IgnitionLB.yaml
To get the public IP:
kubectl get service ignition-lb -n ignition-demo
You’ll see something like:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ignition-lb LoadBalancer 10.43.194.211 212.2.247.184 80:32013/TCP 2m
Now you can access Ignition from your browser:
http://212.2.247.184 (This demo is no longer online)
Final Thoughts
This deployment is meant for demonstration only. In a real production environment, you’d want:
- Persistent storage for project and tag data
- Secrets management for credentials
- Network security policies
- Backup and monitoring tools
Assessing these production readiness factors is central to technical due diligence when evaluating a company’s infrastructure maturity.
But still — seeing Ignition up and running on a public IP in under 30 minutes is impressive, especially when I think about the months-long projects of the past.
Civo, containers, and Kubernetes are reshaping the landscape. For those of us with a background in traditional industrial automation, it’s an exciting time to bridge the old with the new.
Related Reading
Bridging operational technology with modern cloud infrastructure is a common theme in my fractional CTO work. If your organization is evaluating how to modernize legacy systems, you may also find my guide on when and why to use RPA useful — it covers when to automate UI-based workflows vs. using API integrations.
For a look at how AI is changing front-end business workflows, see how I replaced a traditional contact form with a conversational AI.
