
SUSE AI is an enterprise platform that runs large language models (LLMs), inference engines, and retrieval-augmented generation (RAG) pipelines on Kubernetes. It bundles SUSE Rancher Prime as the management plane, SUSE Storage for persistent volumes, SUSE Security for runtime protection, SUSE Observability for cluster telemetry, and a curated AI library that includes Ollama, vLLM, Open WebUI, and vector databases such as OpenSearch and Milvus.
This guide explains how to deploy the SUSE AI stack on a Vultr GPU server running Ubuntu 24.04, using Terraform and Ansible. A single variable selects whether Terraform provisions a Vultr Bare Metal server or a Vultr Cloud GPU instance. Terraform provisions the GPU server, the SSH keypair, and renders the Ansible inventory file. Ansible installs Rancher Kubernetes Engine 2 (RKE2) Prime as the Kubernetes distribution, deploys Rancher Prime with Let's Encrypt TLS, configures SUSE Storage, applies the NVIDIA GPU Operator, deploys SUSE Observability with a generated values file, and runs Ollama and Open WebUI as the inference backend and chat interface.
Before you begin, you need to:
git on the workstation that runs the deployment.22, 80, 443, 6443, and 9345 on the target server firewall.Pick the server size based on the components you intend to deploy. The table lists the approximate CPU, memory, and storage each layer requires. The SUSE Observability rows follow the published profile requirements.
The trial and 10-nonha profiles request the same CPU and memory but differ in storage (154 GB versus 335 GB). Every non-HA profile, including 20-nonha, 50-nonha, and 100-nonha, runs on a single node. The HA profiles (150-ha and up) require a minimum of three nodes and fall outside the single-server deployment this guide builds. See the SUSE Observability sizing reference for the full profile table.
Pick a plan that meets the minimum for the deployment scope:
trial or 10-nonha Observability: 24 vCPUs, 50 GB RAM, 600 GB storage minimum.100-nonha Observability: 40 vCPUs, 80 GB RAM, 1 TB storage minimum.Vultr offers several Bare Metal and Cloud GPU plans at different sizes. Choose any plan that meets the minimum above, using the List Bare Metal Plans and List GPU Plans API references to compare specs.
The Terraform and Ansible configuration lives in the suse-ai-on-vultr directory of the code-samples repository. Clone it onto the workstation that runs Terraform and Ansible.
Clone the code-samples repository.
Navigate to the suse-ai-on-vultr directory.
Inspect the directory structure.
The directory contains:
terraform/: Provisions the GPU server, the SSH keypair, the firewall, and renders the Ansible inventory.ansible/: Holds the roles that install each layer of the SUSE stack.Makefile: Wraps the Terraform and Ansible commands behind make targets..env.example: Template that documents every variable the pipeline expects.The pipeline reads every secret and tunable from a single .env file at the repository root. The Makefile sources this file and re-exports the variables under the TF_VAR_ prefix that Terraform expects.
Copy the example file.
Open the copied file for editing.
Populate the deployment variables.
Save and close the file.
Replace the placeholder values:
apps.rancher.io.meta-llama/Llama-3.1-8B-Instruct, the model the Ansible pipeline deploys by default when DEPLOY_VLLM is true. The pipeline forwards this value to the vLLM deployment automatically.bare-metal for a Bare Metal server or cloud for a Cloud GPU instance.atl, ewr, or fra).vbm-* plan when SERVER_TYPE is bare-metal, or a vcg-* plan when SERVER_TYPE is cloud.2284 corresponds to Ubuntu 24.04 LTS.true to deploy SUSE Observability and its agent.true to deploy the NVIDIA GPU Operator.trial, 10-nonha, 100-nonha, or 150-ha). See Resource Requirements for the minimum vCPUs and RAM each profile needs.true to have the Ansible pipeline deploy vLLM automatically (requires a second GPU and a valid HF_TOKEN). Skip the manual vLLM steps in Install Optional AI Library Components when this is true.The Terraform configuration generates an ED25519 keypair, uploads the public key to Vultr, provisions the server set by SERVER_TYPE (a Bare Metal server or a Cloud GPU instance), and writes the Ansible inventory file with the discovered public IP.
Initialize Terraform to download the Vultr, TLS, and Local providers.
Run a dry-run plan to preview the resources Terraform will create.
The plan output lists the server that SERVER_TYPE selects (Bare Metal or Cloud GPU), the SSH keypair, and the local files that Terraform writes.
Apply the plan to provision the server.
Provisioning a Bare Metal server takes approximately ten to fifteen minutes. A Cloud GPU instance takes a few minutes.
The Ansible playbook contains roles that mirror the SUSE AI deployment phases. The first play waits for SSH connectivity, so the same command works whether the server finished booting or is still coming online. The roles run idempotently, so re-runs reconcile drift without reinstalling running components.
Run the full playbook against the provisioned server.
The pipeline installs RKE2, Rancher Prime, SUSE Storage, SUSE Observability, the NVIDIA GPU Operator, and the Ollama and Open WebUI AI workloads. The full run takes approximately twenty to thirty minutes, depending on which components are enabled. The final play prints the access URLs and the auto-generated admin credentials.
Confirm that every pod in the cluster reached the Running or Completed state.
The task fails and lists any pod that is not Running or Completed. No output from that task confirms that every component started successfully.
Print the access URLs and credentials again without rerunning the deployment.
This command re-runs only the final summary play and reprints the same SUSE AI DEPLOYMENT COMPLETE block that make ansible prints at the end.
Rancher Prime is the management plane for the cluster. It registers the SCC subscription, installs SUSE Security, and monitors every workload the pipeline deployed. The first visit to the Rancher UI presents a welcome screen that sets the admin password and the server URL.
On the workstation, open the URL below in a browser. Replace SERVER-IP with the public IP of the server.
On Welcome to Rancher, enter admin in the Bootstrap Password field.
Select Set a specific password to use, then enter and confirm a strong password in the New Password and Confirm New Password fields.
Confirm that the Server URL field reads https://rancher-prime.SERVER-IP.sslip.io.
Select the checkbox to accept the End User License Agreement & Terms & Conditions.
Click Continue.
SUSE Customer Center (SCC) tracks the subscriptions backing this deployment and unlocks support entitlements once Rancher Prime registers against it. The Helm install already staged the registration code in the UI during setup. Activate it now to complete the registration.
In the Rancher UI, click the hamburger menu, then navigate to Global Settings, then Registration.
Confirm that the Online Registration tab shows the pre-filled registration code.
Click Register.
The banner changes to System registration successfully activated, and the Product Registration panel reports the status as Active for the SUSE Rancher product.
SUSE Security (NeuVector) provides runtime protection for the cluster. It scans containers for vulnerabilities, segments network traffic, and detects active threats. Rancher installs it from the Apps catalog or through Cluster Tools. The NeuVector chart does not auto-detect the container runtime, so RKE2 and K3s clusters must set the container runtime to k3scontainerd in the chart values. See the SUSE Rancher Manager NeuVector overview for the runtime values per cluster type. The steps below use the Apps catalog.
local cluster.k3scontainerd, the runtime RKE2 and K3s require.cattle-neuvector-system and streams the Helm install logs in the panel at the bottom of the screen.NeuVector serves its UI on its own ingress.
SSH into the server.
On the server, wait for the NeuVector pods to reach the Running state.
On the server, retrieve the bootstrap admin password.
Copy the printed password for use when logging in below.
Exit the SSH session to return to the workstation.
From the workstation, in the code-samples/suse-ai-on-vultr directory, expose the NeuVector UI over HTTPS.
On the workstation, open the URL below in a browser. Replace SERVER-IP with the public IP of the server.
Log in with the following credentials:
adminOpen WebUI provides the chat interface and uses the GPU-accelerated Ollama runtime for inference. The Ansible pipeline pre-deploys the gemma:2b model, which appears in the model selector after the first login.
On the workstation, open the URL below in a browser. Replace SERVER-IP with the public IP of the server.
Click Get Started.
Enter your full name, email, and password, then click Create Admin Account. The first account you register becomes the Open WebUI admin.
Select the gemma:2b model from the model dropdown and send a message.
Open WebUI routes the message to the Ollama service over the private Kubernetes cluster network. Ollama runs the gemma:2b model on the NVIDIA GPU and streams the response back to Open WebUI.
SUSE Observability ships the platform UI and a separate agent. The agent collects topology, metrics, and traces from the cluster and forwards them to the platform. Install the Kubernetes StackPack, generate a service token, then deploy the agent.
On the workstation, open the URL below and log in with the username admin and the password printed by the Ansible pipeline. Replace SERVER-IP with the public IP of the server.
Navigate to StackPacks, then Kubernetes.
Under Installed Instances, enter a name for your Kubernetes cluster in the Kubernetes Cluster Name field, then click Install. The StackPack reports that it is waiting for data from the agent.
On the waiting-for-data screen, click CREATE NEW SERVICE TOKEN and copy the token.
SSH into the server.
Export the service token, cluster name, and server IP.
Replace svctok-YOUR_GENERATED_TOKEN with the token you copied from the UI, YOUR_CLUSTER_NAME with the name you entered during StackPack installation, and YOUR_SERVER_IP with the public IP of the server.
Add the SUSE Observability Helm repository.
Refresh the local Helm repository cache.
Deploy the SUSE Observability agent, cluster agent, and checks agent.
The node agent binds STS_HEALTH_PORT to 5555, which the NVIDIA Data Center GPU Manager (DCGM) host engine (nv-hostengine) already holds on GPU nodes. The conflict crashes the agent with bind: address already in use. Move the agent to port 5556.
Set the new health port on the node agent's environment.
Patch the container port definition to match.
Restart the DaemonSet to apply the change.
After the agent restarts and sends data, the Installed Instances entry transitions to the Active state, and the cluster topology renders in the UI.
The SUSE Application Collection ships three additional AI library charts beyond Ollama and Open WebUI. vLLM, mcpo, and PyTorch are each optional, install into the suse-ai namespace, and reuse the application-collection image pull secret from the Rancher install. Apply runtimeClassName: nvidia to any GPU-backed workload. Every command in each subsection below runs on the server.
RKE2 does not promote the NVIDIA runtime to the containerd default even when the NVIDIA GPU Operator sets CONTAINERD_SET_AS_DEFAULT. GPU workloads must therefore set runtimeClassName: nvidia explicitly. The Ollama and vLLM roles already include this value. Without it, the pod schedules on the GPU but the NVIDIA devices never mount, and inference silently falls back to the CPU.
Confirm that every layer of the stack reports a healthy state.
SSH into the server.
List the pods in the AI namespace.
The output displays the OpenSearch, Ollama, Open WebUI, and Redis pods in the Running state.
List the pods in the observability namespace.
The output displays the platform and agent pods in the Running state.
Confirm that Ollama uses the GPU.
The output reports library=CUDA with the A100 GPU description, confirming GPU-backed inference.
You have successfully deployed the SUSE AI stack on a Vultr Bare Metal or Cloud GPU server running Ubuntu 24.04 using Terraform and Ansible. The cluster runs RKE2 Prime as the Kubernetes distribution, Rancher Prime as the management plane, SUSE Storage for persistent volumes, the NVIDIA GPU Operator for accelerator scheduling, SUSE Observability for monitoring, SUSE Security for runtime protection, and the SUSE AI library components Ollama, Open WebUI, and OpenSearch for retrieval-augmented generation. For more information, visit the official SUSE AI documentation.
0 Comments
Be the first to comment and share your perspective with the community.