IBM FlashSystem

IBM FlashSystem

Find answers and share expertise on IBM FlashSystem


#Storage
#Datasecurity
#Storage
#FlashSystem
 View Only

FlashSystem.ai Installation Tutorial

  • 1.  FlashSystem.ai Installation Tutorial

    Posted 12 days ago

    Using a lab environment, I've created this step by step tutorial to help one configure FlashSystem.ai from a clean installation of Ubuntu. The setup should be very similar for Red Hat or other Linux distributions.

    FlashSystem.ai Installation Guide

    Lab Environment:
    VMware Workstation 25H2u1
    Ubuntu 26.04 Desktop
    FS5200 Software Version 9.1.2.3

    Variables used in this installation:
    Remember to replace all IP's/Hostnames below with your information and apply it to the guide below as required.

    Ubuntu Hostname flashsystemai
    FlashSystem  FQDN flashsystemai.lab.local
    FlashSystem Management IP 192.168.2.195
    Ubuntu/K3s IP  192.168.3.155
    Namespace flashsystem-app

    Prerequisites:

    1. Storage must connect to Storage Insights.
    2. The IP address used on the VM must be registered with DNS. See first step below to do a ping test from the storage. 192.168.3.155 was used in this lab setup.
    3. Cloud API Key must be created from
    https://cloud.ibm.com/login. "Manage-->Access (IAM)-->API Keys. Copy the key and keep it safe as you will be unable to view the key later.
    *note a credit card was needed to create the account for verification. The is no billing to create the API key.
    4. Install VM-Tools on the Ubuntu VM so all the commands below can be copy/paste into the terminal.

    Installation Steps using Ubuntu Terminal:

    1 - Prepare Ubuntu:

    Set Hostname
    sudo hostnamectl set-hostname flashsystemai.lab.local

    Verify:
    hostname
    -f
    *putty into the storage and do a test ping. Example: ping -srcip4 192.168.2.195
    flashsystemai.lab.local

    Expected:
    flashsystemai.lab.local
    Successful ping from storage

    2 - Update Ubuntu

    sudo apt update
    sudo apt -y upgrade
    sudo reboot

    3 - Install basic prerequisites (can copy/paste all together)
    sudo apt update
    sudo apt install -y \
    curl \
    wget \
    vim \
    git \
    jq \
    openssl \
    ca-certificates \
    gnupg \
    apt-transport-https \
    software-properties-common

    Verify:
    curl --version
    openssl version
    git --version

    Expected:
    openssl version
    git --version
    Warning: The argument '–version' starts with a Unicode character. Maybe ASCII was intended?
    curl: (6) Could not resolve host: –version
    OpenSSL 3.5.5 27 Jan 2026 (Library: OpenSSL 3.5.5 27 Jan 2026)
    git version 2.53.0

    4 - Verify networking
    ip addr

    Expected primary IP:
    192.168.3.155

    Test internet:
    ping -c 4 8.8.8.8
    ping -c 4 ibm.com

    5 - Update local hosts file
    sudo nano /etc/hosts

    Add:
    192.168.3.155 flashsystemai.lab.local flashsystemai

    Verify:
    getent hosts flashsystemai.lab.local

    Expected:
    192.168.3.155   flashsystemai.lab.local flashsystemai

    6 - Install k3s (Lightweight Kubernetes):
    curl -sfL https://get.k3s.io | sh -

    Verify:
    sudo systemctl status k3s --no-pager

    Expected:
    Active: active (running)

    Then run:
    sudo kubectl get nodes

    Expected:
    NAME            STATUS   ROLES                  AGE   VERSION
    flashsystemai   Ready    control-plane,master   ...

    7 - Verify k3s Cluster Components:
    sudo kubectl get pods -A

    Expected:
    kube-system   coredns-...
    kube-system   local-path-provisioner-...
    kube-system   metrics-server-...
    kube-system   traefik-...

    8 – Disable swap:
    sudo swapoff -a
    sudo cp /etc/fstab /etc/fstab.backup
    sudo sed -i '/swap/d' /etc/fstab

    Verify:
    swapon --show
    free -h

    Expected:
    Swap: 0B

    9 - Disable Traefik:
    sudo kubectl get pods -A
    sudo mkdir -p /etc/rancher/k3s
    sudo nano /etc/rancher/k3s/config.yaml

    Using nano add the following lines and save/exit:
    disable:
    - traefik

    sudo systemctl restart k3s (may take minute for traefik to delete)

    Verify:
    sudo kubectl get pods -A

    Expected:
    traefik-...
    svclb-traefik-...
    Should be gone

    10 - Install Helm:
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    helm repo update

    Verify:
    helm version

    Expected:
    version.BuildInfo{Version:"v3.21.3", GitComm……..

    11  - Install ingress-nginx:
    helm repo add ingress-nginx
    https://kubernetes.github.io/ingress-nginx
    helm repo update

    helm install ingress-nginx ingress-nginx/ingress-nginx \
      --namespace ingress-nginx \
      --create-namespace

    If installation fails with:

    Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp 127.0.0.1:8080: connect: connection refused

    follow the steps below else continue with step 12:

    11.1 - Configure kubectl for Your User:
    mkdir -p ~/.kube
    sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
    sudo chown $(id -u):$(id -g) ~/.kube/config
    chmod 600 ~/.kube/config

    Verify:
    sudo kubectl get nodes

    Expected:
    NAME                      STATUS   ROLES           AGE     VERSION
    flashsystemai.lab.local   Ready    control-plane   ...

    11.2 - Check KUBECONFIG:
    echo $HOME
    ls -l ~/.kube/config
    head -5 ~/.kube/config

    Expected:
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data:…………………..

    11.3 - Force kubectl to Use Your Config:
    kubectl --kubeconfig=$HOME/.kube/config get nodes
    export KUBECONFIG=$HOME/.kube/config

    Verify: Should work without sudo
    kubectl get nodes

    Expected:
    NAME                      STATUS   ROLES           AGE   VERSION
    flashsystemai.lab.local   Ready    control-plane   26m   v1.36.2+k3s1

    12 Install ingress-nginx: (second attempt after correcting error)
    helm repo add ingress-nginx
    https://kubernetes.github.io/ingress-nginx
    helm repo update

    helm install ingress-nginx ingress-nginx/ingress-nginx \
      --namespace ingress-nginx \
      --create-namespace

    Verify:
    kubectl get pods -n ingress-nginx

    Expected:
    STATUS   Running

    13 Verify the ingress-nginx Service:
    kubectl get svc -n ingress-nginx

    Expected:
    ingress-nginx-controller Ready 1/1(may take a minute)

    14 Create the FlashSystem.ai Namespace:
    kubectl create namespace flashsystem-app

    Verify:
    kubectl get namespace flashsystem-app

    Expected:
    NAME              STATUS   AGE
    flashsystem-app   Active   ...

    15 Create the IBM Container Registry Pull Secret:
    kubectl create secret docker-registry icr-io \
      --docker-server=icr.io \
      --docker-username=iamapikey \
      --docker-password='<YOUR_IBM_CLOUD_API_KEY>' \
      --docker-email='<YOUR_EMAIL>' \
      -n flashsystem-app

    *NOTE Can copy/paste entire command above but update API key and enter email address. Cloud API Key is the one create on https://cloud.ibm.com/login. Remember to remove the quotes from '<YOUR_IBM_CLOUD_API_KEY>' and '<YOUR_EMAIL>'. Leave the username iamapikey.

    Verify:
    kubectl get secrets -n flashsystem-app

    Expected:
    icr-io

    16 - Create the Backend TLS Certificate:
    cd ~
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
      -keyout tls.key \
      -out tls.crt \
      -subj "/CN=flashsystem-app-service.flashsystem-app.svc.cluster.local"

    16.1
    kubectl create secret tls flashsystem-app-tls \
      --key=tls.key \
      --cert=tls.crt \
      -n flashsystem-app

    Verify:
    kubectl get secrets -n flashsystem-app

    Expected:

    icr-io
    flashsystem-app-tls

    17 - Create a Frontend Certificate:
    openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
      -keyout frontend.key \
      -out frontend.crt \
      -subj "/CN=flashsystemai.lab.local" \
      -addext "subjectAltName=DNS:flashsystemai.lab.local"

    17.1:
    kubectl create secret tls my-custom-frontend-cert \
      --key=frontend.key \
      --cert=frontend.crt \
      -n flashsystem-app

    18 -  Verify Helm Can Authenticate to IBM Container Registry:
    helm registry login icr.io \
      --username iamapikey \
      --password '<YOUR_IBM_CLOUD_API_KEY>'

    *NOTE Can copy/paste entire command above but update API key. Cloud API Key is the one create on https://cloud.ibm.com/login. Remember to remove quotes from '<YOUR_IBM_CLOUD_API_KEY>'. Leave the username iamapikey.

    Verify:
    Login Succeeded

    19 - Pull the FlashSystem.ai Helm Chart:
    helm pull oci://icr.io/flashsystem-ai-release/flashsystem-ai:1.1.0 --untar

    Verify:
    ls -la

    Expected:
    There should be a flashsystem-ai directory

    20 - Update values.yaml in flashsystem-ai folder
    cd flashsystem-ai
    nano values.yaml

    *FIND:
    hosts:
      - host: ""
    *CHANGE TO:
    hosts:
      - host: "flashsystemai.lab.local"

    *FIND:
    backend:
      mode: "manual"
      secretName: ""
    *CHANGE TO:
    backend:
      mode: "manual"
      secretName: "flashsystem-app-tls"

    *FIND:
    frontend:
      mode: "wildcard"
      secretName: ""
    CHANGE TO:
    frontend:
      mode: "custom"
      secretName: "my-custom-frontend-cert"

    *Note don't forget to change mode to custom.

    21 - Install FlashSystem.ai from inside the ~/flashsystem-ai directory
    helm install flashsystem-app . -f values.yaml -n flashsystem-app

    Verify: (may have to wait minute or two to come ready)
    kubectl get pods -n flashsystem-app

    Expected:
    NAME                              READY   STATUS    RESTARTS   AGE
    flashsystem-ai-7xxxxxxxxd-ws6ns   1/1     Running   0          2m2s

    22 -  Verify the Service:
    kubectl get svc -n flashsystem-app

    Expected:
    NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    flashsystem-ai-service   ClusterIP   10.43.147.60   <none>        8443/TCP   3m17s

    23 - Verify the Ingress Was Created:
    kubectl get ingress -n flashsystem-app

    Expected:
    NAME                     CLASS   HOSTS                     ADDRESS         PORTS     AGE
    flashsystem-ai-ingress   nginx   flashsystemai.lab.local   192.168.3.155   80, 443   4m14s

    24  - Open web browser (from within the VM):
    https://flashsystemai.lab.local/setup

    24.1 There should be a log on screen. Enter a username and password

    24.2 Add storage, with superuser and password. Select Security to Self Signed

    24.3 Test connection and Save

    25 - Storage Insights information:

    25.1 Enter Tenant ID from Storage Insights. Get this from the IBM SI URL Typically https://insights.ibm.com/cui/01f17ec3xxxxxxxxxxxxxxxx omit the https://insights.ibm.com/cui and only use 01f17ec3xxxxxxxxxxxxxxx

    25.2 Copy/paste the very long Storage Insights API Key. Create the API key in Storage Insights. Settings-->User access management

    25.3 Click Save and refresh the page. There should be a GUI Connection Key. You need this key for the step below

    26 - Configure Storage to Communicate to FlashSystem AI:

    26.1 Putty to storage and login superuser

    26.2 lsaicontainerinfo (should be blank)

    26.3 chaicontainerinfo -key GUI Connection Key Above -url flashsystemai.lab.local

    Example: chaicontainerinfo -key aaxaxxxx-dxxx-4xxx-8xxx-xxxxxxxx -url flashsystemai.lab.local

    *Note URL must not contain https:// Although it will accept this, the storage will not communicate.

    Conclusion:

    Login to the storage and you should now see the small blue AI icon and be able to initiate a chat.  



    ------------------------------
    Brandon Rock
    ------------------------------