Overview
Use this guide to deploy Poolside model inference on a dedicated GPU workstation or server host. The installation supports:- Ubuntu 22.04 LTS
- Ubuntu 24.04 LTS
- SUSE Linux Enterprise Server (SLES) 15 or openSUSE 15
- SUSE Linux Enterprise Server (SLES) 16 or openSUSE 16
- Red Hat Enterprise Linux (RHEL) 9.6
- Prepare the host and install operating-system-specific prerequisites.
- Install RKE2 infrastructure.
- Install supporting infrastructure services.
- Upload model checkpoints.
- Deploy model inference and ingress.
- RKE2 Kubernetes
- S3-compatible object storage for model checkpoints
- A local container registry
cert-managerfor self-signed certificates- NVIDIA GPU Operator for GPU access in RKE2 workloads
- Model inference workloads for the model checkpoints you provide
Prerequisites
Before you begin, ensure that the host meets the following prerequisites:- A supported operating system: Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, SUSE Linux Enterprise Server (SLES) 15 or openSUSE 15, SUSE Linux Enterprise Server (SLES) 16 or openSUSE 16, or RHEL 9.6
sudoaccess on the host- The Poolside installation bundle
- Poolside model checkpoint files available on the host
- The ingress hostnames you plan to expose for model inference
- If you use custom TLS certificates, CA and server certificate files with SANs that cover the hostnames described in Step 2
Prepare the host
Complete the preparation steps for the host operating system before you run the installation steps.Prepare RHEL 9.6
-
Lock the RHEL release
RHEL can upgrade the host to a newer minor release when new updates become available through
dnf updateoryum update. Before you install packages, lock the release to RHEL 9.6 to prevent automatic minor version upgrades. -
Install required tools
-
Install
iptables-nftusingyum(version1.8.10-11.el9) -
Install
container-selinuxusingyum -
Install
jqusingyum(version1.6or later) -
Install
yq(versionv4.49.2or later) from the yq releases page- Download
yq_linux_amd64.tar.gzand install it to/usr/local/bin/yq
- Download
-
Install
unzipusingyum(version6.00or later) -
Install
skopeousingyum(packageskopeo-1.18.1-2.el9_6.x86_64or later) -
Install
kubectlby adding the Kubernetes repository (ensure that thekubectlversion is the same as or newer than the RKE2 Kubernetes version):Then run: -
Install
terraform(version1.8.5) from the Terraform 1.8.5 releases page- Download and install the binary to
/usr/local/bin/terraform unzipis required to extract the Terraform binary
- Download and install the binary to
-
Install
-
Configure the Terraform command path
In RHEL 9.x,
/usr/local/binis not included in thesecure_pathsetting in/etc/sudoersby default. As a result,sudo terraformcan return acommand not founderror.Run Terraform with the absolute path:/usr/local/bin/terraform. -
Disable the nouveau driver if loaded
Confirm that the
nouveaugraphics driver is not loaded. For instructions, see Disable the nouveau driver in the NVIDIA documentation. Run the following command to check whether thenouveaudriver is loaded. If the command returns output, follow the next steps to turn off the driver and reboot.If thenouveaudriver is loaded:
Prepare Ubuntu
These steps apply to both Ubuntu 22.04 LTS and Ubuntu 24.04 LTS.-
Install required tools
- Install
kubectlusingsudo snap install kubectl --classic - Install
jqusingsudo apt install -y jq - Install
yq(versionv4.49.2or later) from the yq releases page- Download
yq_linux_amd64.tar.gzand install it to/usr/local/bin/yq
- Download
- Install
terraform(version1.8.5) from the Terraform 1.8.5 releases page- Download and install the binary to
/usr/local/bin/terraform unzipis required to extract the Terraform binary
- Download and install the binary to
- Install
skopeo(versionv1.18or later) from the skopeo-binary releases page- Download
skopeo-linux-amd64and install it to/usr/local/bin/skopeo
- Download
- Install
-
Configure the containers trust policy
Ensure the containers trust policy at
/etc/containers/policy.jsonallowsskopeoto access the RKE2 registry with the minimum required permissions to load container images into the registry during installation. -
Disable the nouveau driver if loaded
Confirm that the
nouveaugraphics driver is not loaded. For instructions, see Disable the nouveau driver in the NVIDIA documentation. Run the following command to check whether thenouveaudriver is loaded. If the command returns output, follow the next steps to turn off the driver and reboot.If thenouveaudriver is loaded: -
Configure Ubuntu kernel parameters
Poolside file watchers can exceed the Ubuntu default for inotify instances. Set the following parameter to
65535or higher:To apply the setting, add the parameter under/etc/sysctl.d/and reload:
Install
The Poolside installation bundle includes the Terraform providers required for alinux/amd64 host. You can use the same bundle in internet-connected and air-gapped environments.
Step 0 (optional): Set up an air-gapped installation
This configuration is required for air-gapped installations. In internet-connected environments, you can skip this step.
terraform.d directory.
-
Locate
poolside-terraform.tfrcin the root of the unpacked installation bundle. -
Replace the
$POOLSIDE_INSTALL_DIRplaceholder with the fully qualified path to the bundle’s root directory. -
For Terraform commands in the installation steps, prefix the command with the Terraform CLI configuration file path:
You can configure Terraform using alternative methods, such as a
.terraformrc file, as described in the official HashiCorp documentation. Because the installation process runs as both root and a local user, you must ensure that both accounts are configured to reference the cached providers correctly.Step 1: Install RKE2 on the host
The01-infra-rke2 directory contains the Terraform module that installs RKE2 on the host.
Using sudo, run the following commands from the 01-infra-rke2 directory.
Air-gapped environment:
Step 2: Install supporting infrastructure services
The02-infra-services directory contains the Terraform module that accesses the RKE2 cluster and deploys the supporting infrastructure required by Poolside model inference.
This step installs:
- A local container registry
- S3-compatible object storage
- Ingress and certificate resources for inference endpoints
- NVIDIA GPU Operator, deployed as
gpu-operator
1. Configure ingress hostnames
In02-infra-services/terraform.tfvars, set poolside_ingress_hosts to the model hostnames that you plan to use later in Step 4. The installer uses this value when it creates self-signed certificate SANs.
If you use installer-generated self-signed certificates, each model ingress_host_name that you configure in Step 4 must match one of the hostnames in poolside_ingress_hosts. This lets the installer generate certificates with the required SANs before model inference is deployed.
If you use custom TLS certificates, ensure that your certificate SANs include each model ingress_host_name that you configure in Step 4.
The installer includes poolside-docs in certificate SANs by default. Add a documentation hostname to poolside_ingress_hosts only if you want to use a different documentation hostname.
2. Configure custom TLS certificates
Skip this step if you use installer-generated self-signed certificates. If you use custom TLS certificates, you must provide your own CA and server certificate before you runterraform apply.
The custom_certificates and custom_ca_trust_chain parameters configure certificates for the TLS-terminating inference and storage services. The custom_certificates schema accepts certificate and key entries for poolside, services.storage, and services.storage_s3. You can use one certificate that covers all exposed hostnames, or separate certificates if your Public Key Infrastructure (PKI) requires it.
Across all certificates you provide, the Subject Alternative Names (SANs) must cover every hostname that you expose, including:
- Every model
ingress_host_namethat you configure in04-poolside-inference/terraform.tfvars - Any custom documentation ingress hostname that you configure instead of the default
poolside-docshostname seaweedfs.poolside.localseaweedfs-s3.poolside.local
-
Place your CA certificate, server certificate, and private key in a directory accessible to Terraform. The example below uses
<bundle-path>/poolside-install/byo-certs/. Thepoolside-install/subdirectory holds the installation’s persistent state and is preserved across cluster resets, so it is the recommended location for BYO certificate files.You must reference these files using fully qualified (absolute) paths in the next step. Relative paths are not supported. -
In
02-infra-services/terraform.tfvars, set the BYO variables:custom_ca_trust_chain.root_ca_pathmust point to the CA that signedserver.crt. When you runterraform apply, the module creates Kubernetes secrets with a-byosuffix from these files.
3. Run Terraform
Usingsudo, run the following commands from the 02-infra-services directory.
Air-gapped environment:
Step 3: Upload Poolside models
The03-poolside-model-upload directory contains the Terraform module that uploads model checkpoints into the deployment’s S3-compatible storage.
The module creates a Kubernetes job that syncs model files from a local host directory into the poolside-models bucket.
-
Copy the Poolside model checkpoint files for your deployment into the local host directory:
This is the default location. If you customized the Poolside host volume location in
01-infra-rke2, use the corresponding directory instead. -
Run the following commands from the
03-poolside-model-uploaddirectory. Air-gapped environment:Internet-connected environment: - To upload additional or updated models later, repeat these steps. Uploads are additive and do not remove existing models from the deployment.
Step 4: Deploy Poolside model inference
The04-poolside-inference directory contains the Terraform module that deploys the inference containers used to serve Poolside models.
-
In the
04-poolside-inferencedirectory, updateterraform.tfvarswith the model details you want to deploy. If you use installer-generated self-signed certificates, each modelingress_host_namemust match one of the hostnames you configured inpoolside_ingress_hostsduring Step 2: Install supporting infrastructure services. If you use custom TLS certificates, the certificate SANs must include each modelingress_host_name.Example: Model configuration -
Run the following commands from the
04-poolside-inferencedirectory. Air-gapped environment:Internet-connected environment:
Next steps: Post-installation configuration
Configure local DNS
Add hostname resolution on the deployment host. Replace the model ingress hostnames with theingress_host_name values you configured in Step 4. If you expose multiple model ingress hostnames, include each hostname on the same line.
Verification
Your installation is successful when the following checks pass:-
Confirm that all pods show a healthy status, such as
RunningorCompleted: -
Confirm that the model inference endpoint resolves to the deployment host:
-
Confirm that model workloads are running:
-
Confirm that the model upload job completed successfully:
Troubleshooting
Model pods stuck in ContainerCreating
-
Confirm that the host detects NVIDIA GPU devices:
-
Confirm that Kubernetes reports GPUs as allocatable:
-
Check model workload status:
Models not loading
-
Confirm that the model checkpoint files were copied into
/opt/poolside/poolside-model-uploads, or into the custom host volume location you configured. - Confirm that the model upload job completed successfully.
-
Check model initialization logs: