TrueFoundry allows you to deploy Kubernetes manifests directly through the web interface, making it easy to deploy any Kubernetes application without needing to use kubectl or other command-line tools.
This feature is perfect for deploying existing Kubernetes applications, custom
operators, or any workload that’s defined as Kubernetes YAML manifests.
Prerequisites
Access to a TrueFoundry workspace
A connected cluster (AWS, GCP, Azure, or on-premises)
Kubernetes manifests in YAML format
Step-by-Step Deployment Guide
Navigate to Deployments
Log in to your TrueFoundry dashboard and click on Deployments in the
left sidebar, then click New to create a new deployment.
Select Helm
In the application type page, click on show advanced and select Helm.
Select K8s Manifest
In the “Deploy new Helm” modal: - Select your workspace from the dropdown -
Choose K8s Manifest instead of Helm chart - Click Next
Configure Your Deployment
Enter a name for your deployment (e.g., web-app
) and add your Kubernetes
manifest in the Manifests section - Click Submit to deploy
Monitor Deployment
Monitor the deployment status in the helm deployments list and view logs by
clicking on your deployment.
Complete Example: Web Application with Virtual Service
Here’s a comprehensive example that deploys a web application with proper configuration, secrets, and routing:
apiVersion : v1
kind : Namespace
metadata :
name : demo
2. ConfigMap (HTML Content)
apiVersion : v1
kind : ConfigMap
metadata :
name : web-content
namespace : demo
data :
index.html : |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to TrueFoundry</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin-top: 15%;
background-color: #f0f4f8;
color: #1f3c88;
}
.container {
display: inline-block;
background: white;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
margin-bottom: 1rem;
font-size: 2.5rem;
}
p {
margin-bottom: 1.5rem;
font-size: 1.2rem;
}
.btn {
display: inline-block;
padding: 0.75rem 1.5rem;
font-size: 1rem;
color: white;
background-color: #1f3c88;
border: none;
border-radius: 4px;
text-decoration: none;
cursor: pointer;
}
.btn:hover {
background-color: #163062;
}
</style>
</head>
<body>
<div class="container">
<h1>Welcome to TrueFoundry</h1>
<p>Your AI infrastructure, simplified.</p>
<a class="btn" href="https://truefoundry.com" target="_blank">Go to TrueFoundry</a>
</div>
</body>
</html>
apiVersion : apps/v1
kind : Deployment
metadata :
name : welcome-deployment
namespace : demo
spec :
replicas : 2
selector :
matchLabels :
app : welcome-web
template :
metadata :
labels :
app : welcome-web
spec :
containers :
- name : nginx
image : nginx:1.25
ports :
- containerPort : 80
volumeMounts :
- name : html-volume
mountPath : /usr/share/nginx/html
volumes :
- name : html-volume
configMap :
name : web-content
items :
- key : index.html
path : index.html
apiVersion : v1
kind : Service
metadata :
name : welcome-service
namespace : demo
spec :
selector :
app : welcome-web
ports :
- port : 80
targetPort : 80
5. Gateway (External Access)
apiVersion : networking.istio.io/v1beta1
kind : Gateway
metadata :
name : welcome-gateway
namespace : demo
spec :
selector :
istio : ingressgateway
servers :
- port :
number : 80
name : http-welcome
protocol : HTTP
hosts :
- "welcome.truefoundry.local"
6. VirtualService (Routing)
apiVersion : networking.istio.io/v1beta1
kind : VirtualService
metadata :
name : welcome-virtualservice
namespace : demo
spec :
hosts :
- "welcome.truefoundry.local"
gateways :
- welcome-gateway
http :
- match :
- uri :
prefix : /
route :
- destination :
host : welcome-service
port :
number : 80
Complete Manifest (All-in-One)
Copy this complete YAML to deploy everything at once: # Namespace
apiVersion : v1
kind : Namespace
metadata :
name : demo
---
# ConfigMap: custom HTML page with welcome message & button
apiVersion : v1
kind : ConfigMap
metadata :
name : web-content
namespace : demo
data :
index.html : |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to TrueFoundry</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin-top: 15%;
background-color: #f0f4f8;
color: #1f3c88;
}
.container {
display: inline-block;
background: white;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
margin-bottom: 1rem;
font-size: 2.5rem;
}
p {
margin-bottom: 1.5rem;
font-size: 1.2rem;
}
.btn {
display: inline-block;
padding: 0.75rem 1.5rem;
font-size: 1rem;
color: white;
background-color: #1f3c88;
border: none;
border-radius: 4px;
text-decoration: none;
cursor: pointer;
}
.btn:hover {
background-color: #163062;
}
</style>
</head>
<body>
<div class="container">
<h1>Welcome to TrueFoundry</h1>
<p>Your AI infrastructure, simplified.</p>
<a class="btn" href="https://truefoundry.com" target="_blank">Go to TrueFoundry</a>
</div>
</body>
</html>
---
# Deployment: Nginx serving the welcome page
apiVersion : apps/v1
kind : Deployment
metadata :
name : welcome-deployment
namespace : demo
spec :
replicas : 2
selector :
matchLabels :
app : welcome-web
template :
metadata :
labels :
app : welcome-web
spec :
containers :
- name : nginx
image : nginx:1.25
ports :
- containerPort : 80
volumeMounts :
- name : html-volume
mountPath : /usr/share/nginx/html
volumes :
- name : html-volume
configMap :
name : web-content
items :
- key : index.html
path : index.html
---
# Service: expose Nginx internally
apiVersion : v1
kind : Service
metadata :
name : welcome-service
namespace : demo
spec :
selector :
app : welcome-web
ports :
- port : 80
targetPort : 80
---
# Istio Gateway: entry point for external traffic
apiVersion : networking.istio.io/v1beta1
kind : Gateway
metadata :
name : welcome-gateway
namespace : demo
spec :
selector :
istio : ingressgateway
servers :
- port :
number : 80
name : http-welcome
protocol : HTTP
hosts :
- "welcome.truefoundry.local"
---
# VirtualService: route traffic to Nginx
apiVersion : networking.istio.io/v1beta1
kind : VirtualService
metadata :
name : welcome-virtualservice
namespace : demo
spec :
hosts :
- "welcome.truefoundry.local"
gateways :
- welcome-gateway
http :
- match :
- uri :
prefix : /
route :
- destination :
host : welcome-service
port :
number : 80
TrueFoundry Integration Features
TrueFoundry Secrets Integration
You can reference TrueFoundry secrets directly in your Kubernetes manifests. Truefoundry secrets are supported only in manifest block that too only for kubernetes secret manifest which are using stringData
field to store the secret.
How to use TrueFoundry secrets in your manifests:
apiVersion : v1
kind : Secret
metadata :
name : api-key-secrets
type : Opaque
stringData :
api-key : tfy-secret://truefoundry:api-key-secrets:api-key