Overview
This guide describes how to deploy the Poolside AI platform on a GPU workstation or server host. The installation supports both online and air-gapped environments. Installation time typically takes less than 30 minutes when the installation bundle is cached on the host. The Poolside platform includes:- Chat model (Malibu): Quantized/compressed to run on 2x RTX 6000 GPUs
- Code completion model (Point): Runs on 1x RTX 6000 GPU
- Poolside Web Assistant: Browser-based chat interface
- Poolside Console: Browser-based interface for managing models, configuring agents and integrations, controlling access, and monitoring usage
- Built-in authentication: Keycloak identity provider
- S3-compatible object storage: SeaweedFS for models and telemetry
- Database: PostgreSQL for Poolside deployment
- cert-manager: Self-signed certificate provider
Prerequisites
Install the following prerequisites on the host before starting the installation procedure. The installation process installs and configures GPU drivers and Poolside platform services. Before you begin, ensure you have:- A supported operating system: Ubuntu 22.04 or Red Hat Enterprise Linux 9.6
sudoaccess on the host- Network access for online installations, or the full bundle and artifacts available locally for air-gapped installations
Prerequisites for RHEL 9.6
-
Install
iptables-nftusingyum(version1.8.10-11.el9) -
Install
container-selinuxusingyum -
Install
jqusingyum(version1.6or later) -
Install
yq(versionv4.49.2or later) from https://github.com/mikefarah/yq/releases/tag/v4.49.2- 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 https://releases.hashicorp.com/terraform/1.8.5- Download and install the binary to
/usr/local/bin/terraform unzipis required to extract the Terraform binary
- Download and install the binary to
In RHEL 9.x,
Run Terraform with the absolute path:
/usr/local/bin is not included in the secure_path setting in /etc/sudoers by default. As a result, sudo terraform can return a command not found error.Run Terraform with the absolute path:
/usr/local/bin/terraform.Prerequisites for Ubuntu 22.04
-
Install
kubectlusingsudo snap install kubectl --classic -
Install
jqusingsudo apt install -y jq -
Install
yq(versionv4.49.2or later) from https://github.com/mikefarah/yq/releases/tag/v4.49.2- Download
yq_linux_amd64.tar.gzand install it to/usr/local/bin/yq
- Download
-
Install
terraform(version1.8.5) from https://releases.hashicorp.com/terraform/1.8.5- 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 https://github.com/lework/skopeo-binary/releases/tag/v1.20.0- Download
skopeo-linux-amd64and install it to/usr/local/bin/skopeo - 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
- Download
Installation
The Poolside installation bundle includes all required Terraform providers for alinux/amd64 host to support fully offline (air-gapped) deployments.
Step 0 (optional): Air-gapped installation setup
This configuration is required only for air-gapped installations. This method is used instead of a standard
.terraformrc file to ensure that Terraform behaves consistently when commands are run as both root and a non-root user.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 all Terraform commands in this guide, 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 and configure RKE2 on the host
The01-infra-rke2 directory contains the Terraform module that installs RKE2 on the host system.
Using sudo, run the following commands from the 01-infra-rke2 directory.
Air-gapped environment:
Step 2: Generate RKE2 credentials and access files
The02-rke2-credentials directory contains the Terraform module that connects to the RKE2 cluster and extracts the configuration files required for later installation stages.
These files allow Terraform to authenticate to the RKE2 cluster and complete the Poolside platform deployment.
Using sudo, run the following commands from the 02-rke2-credentials directory.
Air-gapped environment:
Step 3: Install supporting infrastructure services
The03-infra-services directory contains the Terraform module that uses the previously generated RKE2 credentials to access the cluster and deploy the supporting infrastructure required by the Poolside platform.
This step installs:
- A local container registry
- A PostgreSQL database
- An S3-compatible object store
- Keycloak for user authentication
sudo, run the following commands from the 03-infra-services directory.
Air-gapped environment:
Step 4: Deploy the Poolside platform
The04-poolside-deployment directory contains the Terraform module that deploys the Poolside platform into the RKE2 cluster using the infrastructure services installed in the previous steps.
This deployment includes optional configuration and must align with any modifications made in earlier phases. Review and update the terraform.tfvars file as needed before running Terraform.
Run the following commands from the 04-poolside-deployment directory.
Air-gapped environment:
Step 5: Upload Poolside models
The final step uploads Poolside models to the S3-compatible storage used by the deployment. The05-poolside-model-upload directory contains a Terraform module that creates a Kubernetes job to sync model files from a local host directory into the poolside-models S3 bucket.
-
Copy the Poolside model files (Malibu and/or Point) into the local host directory:
/opt/poolside/poolside-model-uploadsIf you customized host volume paths during Step 1 (01-infra-rke2), use the corresponding directory instead. -
Run the following commands from the
05-poolside-model-uploaddirectory to trigger the model upload job. Air-gapped environment:Online environment: - To upload additional or updated models later, repeat these steps. Uploads are additive and do not remove existing models from the deployment.
Post-installation configuration
Step 1: Configure local DNS
Add hostname resolution to your system:Step 2: Set up the Poolside platform
The following steps describe how to complete initial setup using the internal Keycloak service as the identity provider. If you are integrating with an external identity provider, see OIDC authentication.-
Open a web browser and navigate to:
https://poolside.poolside.localIf you configured a different hostname, use that value instead. Ensure DNS resolution is working for the selected hostname. -
Retrieve identity configuration values from Terraform output.
-
Change to the
03-infra-servicesdirectory. -
Run the following command:
-
Note the values for
client_api_credentialsandoidc_provider_url.
-
Change to the
-
Create the organization.
-
When prompted in the Poolside Console, create your organization. For Poolside realm settings, enter the following values:
- Provider URL:
oidc_provider_urlfrom the Terraform output - Client ID:
client_api_credentials.idfrom the Terraform output - Client Secret:
client_api_credentials.secretfrom the Terraform output
- Provider URL:
-
When prompted in the Poolside Console, create your organization. For Poolside realm settings, enter the following values:
-
Register the first user.
- Click Login, then Register.
- Create your administrator user account. This user is automatically assigned the
tenant-adminrole.
Verification
Your installation is successful when:- All pods are running:
kubectl get pods -A - The web interface is accessible at
https://poolside.poolside.local - Models show a
Healthystatus in the Poolside Console - Chat functionality works in the Poolside Web Assistant
Troubleshooting
Common issues
Model pods stuck inContainerCreating
-
Verify GPU availability on the host using
nvidia-smi -
Scale the affected deployment to zero replicas, then scale it back up:
- Identify the deployment:
kubectl get deploy -n poolside-models - Scale down and back up as needed
- Identify the deployment:
- Trust the cluster CA certificate from the installation bundle (for example, in your
poolside-installdirectory), or from the OS trust store location under/usr/local/...after it has been installed on the host - Certificate installation steps vary by operating system
-
Verify that services are running:
- Confirm that models were successfully uploaded during the model upload step