> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Detailed walkthrough (IBM Cloud)

> Step-by-step guidance for every required IBM Cloud value in values.yaml, COS HMAC keys, base64 encoding, optional private registry images, and installing with arize.sh or Helm on IKS.

## Before you start

* Complete [Download and extract the distribution](/docs/ax/selfhosting/getting-started/download-and-unpack-the-distribution). Work from the extracted folder that contains `arize.sh`, `arize-operator-chart.tgz`, and your `values.yaml`.
* Align your cluster with [IKS cluster and IBM Cloud resources](/docs/ax/selfhosting/installation/ibm/cluster-existing-iks).
* Contact Arize AI for `clusterSizing`.
* Keep the [example `values.yaml` (quick start)](/docs/ax/selfhosting/installation/ibm/install-arize-quickstart) open as a template to compare against when you finish the steps below.
* Treat `values.yaml` as sensitive. Store generated passwords and keys in your **secret manager / vault**, not in git history.

For every field that must be stored **base64-encoded** in `values.yaml`, use (replace placeholders with your own values—do not reuse literals from documentation):

```bash theme={null}
printf '%s' '<plain-text-value>' | base64 | tr -d '\n'
```

Prefer `printf` over `echo` so passwords and keys are not corrupted by trailing newlines.

## 1. Verify cluster access and clusterName

Configure `kubectl` for your IKS cluster:

```bash theme={null}
ibmcloud ks cluster config --cluster <cluster-name>
```

Set `clusterName` in `values.yaml` to the output of:

```bash theme={null}
kubectl config current-context
```

## 2. Seed hubJwt (license JWT)

Use the JWT string Arize AI provided for downloads. Store it **base64-encoded** under `hubJwt`.

```yaml theme={null}
hubJwt: "<JWT_BASE64>"
```

## 3. Set cloud and IBM COS

```yaml theme={null}
cloud: "ceph"
```

Create two buckets and HMAC credentials as described in [IKS cluster and resources](/docs/ax/selfhosting/installation/ibm/cluster-existing-iks).

Set bucket names and regional endpoint (region must match your buckets):

```yaml theme={null}
gazetteBucket: "<gazette-bucket-name>"
druidBucket: "<adb-bucket-name>"
cephS3Endpoint: "https://s3.<region>.cloud-object-storage.appdomain.cloud"
cephS3Region: "<region>"
cephS3AccessKeyId: "<HMAC_ACCESS_KEY_ID_BASE64>"
cephS3SecretAccessKey: "<HMAC_SECRET_ACCESS_KEY_BASE64>"
```

## 4. Storage classes

List storage classes on your IKS cluster:

```bash theme={null}
kubectl get storageclass
```

VPC Gen2 clusters commonly use `ibmc-vpc-block-metro-retain-10iops-tier`. Set both:

```yaml theme={null}
storageClassCephStandard: "ibmc-vpc-block-metro-retain-10iops-tier"
storageClassCephSsd: "ibmc-vpc-block-metro-retain-10iops-tier"
```

## 5. PostgreSQL

### In-cluster

Generate a Postgres password and base64-encode it:

```yaml theme={null}
postgresPassword: "<POSTGRES_PASSWORD_BASE64>"
```

Use `echo -n '<your-password>' | base64 | tr -d '\n'` for `postgresPassword` if you pick the password yourself.

Do **not** set `postgresHostEndpoint` when using the in-cluster StatefulSet.

### External (IBM Cloud Databases or other managed Postgres)

See [External PostgreSQL requirements](/docs/ax/selfhosting/installation/external-postgres-requirements). Typical IBM Cloud Databases settings:

```yaml theme={null}
postgresHostEndpoint: "<postgres-hostname>"
postgresPort: <port>          # often not 5432
postgresUsername: "admin"
postgresPassword: "<PASSWORD_BASE64>"
postgresSslEnable: true
```

## 6. Organization, cipher key, and sizing

Generate cipher key material (Arize AI documents the cipher length expectations in the bundled chart docs). Example for a random 32-character cipher source then base64 (adjust to your security process):

```bash theme={null}
cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | head -c 32 | base64
```

Then set:

```yaml theme={null}
organizationName: "<organization-or-company-name>"
cipherKey: "<CIPHER_KEY_BASE64>"
clusterSizing: "<sizing-from-arize-ai>"
```

Optional pool layout:

```yaml theme={null}
historicalNodePoolEnabled: false   # single shared pool
collectNodeMetrics: true           # collect node-level metrics
```

## 7. Ingress mode and URLs

Set the URL users will use for the Arize AX UI after ingress and DNS exist:

```yaml theme={null}
ingressMode: "tls"
appBaseUrl: "https://<arize-app.domain>"
expBaseUrl: "<arize-app.domain>"
```

You can set `appBaseUrl` / `expBaseUrl` after ingress is live and re-run Helm.

## 8. Optional private registry

If you mirror images to a private registry:

```yaml theme={null}
pushRegistry: "<registry-hostname>"
pullRegistry: "<registry-hostname>"
```

## 9. Install with Helm or arize.sh

From the directory that contains `arize-operator-chart.tgz` and `values.yaml`:

```bash theme={null}
helm upgrade --install -f values.yaml arize-op arize-operator-chart.tgz
```

Or:

```bash theme={null}

./arize.sh -f values.yaml -y -t 5400 install
```

## Next steps

* [Configure ingress on IBM Cloud](/docs/ax/selfhosting/installation/ibm/ingress-ibm-cloud) or [other controllers](/docs/ax/selfhosting/installation/ingress/other-controllers).
* [Validate the deployment](/docs/ax/selfhosting/installation/validate-deployment).
