2. Installation

This guide provides a detailed walkthrough for setting up an UltiHash cluster in a Kubernetes environment, whether on-premises or in a cloud environment. The process is divided into four main steps:

  1. Prerequisites: Gather the necessary credentials, tools, and environment configurations.

  2. Cluster setup: Configure your Kubernetes cluster, including creating namespaces and provisioning secrets.

  3. Helm installation: Deploy UltiHash using Helm, customizing the setup for your specific environment.

  4. Post-installation: Verify the installation.

Step 1: Prerequisites

Before you begin the installation, ensure you have the following:

  • Credentials: After purchasing the UltiHash license, you will receive:

    • Registry login and password (referred to as registry_login and registry_password).

    • License key (referred to as license_key).

    • Monitoring token (referred to as monitoring_token).

  • Kubernetes cluster:

    • Version: Ensure you have a Kubernetes cluster running version 1.20 or higher.

    • Controllers:

      • Ingress controller: Exposes the UltiHash cluster API endpoint outside the Kubernetes cluster. The recommended solution is Nginx Ingress (tested on version 1.9.6).

      • CSI controller: Manages persistent volumes.

    • Note: You can use any Kubernetes version starting from 1.20, and any CSI controller that dynamically provisions and attaches persistent volumes. For optimal performance, use a CSI controller that imposes the least disk performance degradation.

  • Local environment:

    • kubectl: Ensure Kubernetes command line tool kubectl is installed and configured to access the cluster.

    • Helm: Install Kubernetes package manager Helm (version 3.x) to manage Kubernetes packages.

Step 2: Cluster setup

  1. Namespace creation:

    • Create a Kubernetes namespace for the UltiHash installation:

      kubectl create ns <storage>
      
    • Replace <storage> with your desired namespace name.

  2. Secrets provisioning:

    • Registry credentials: Provision a secret in Kubernetes to store the UltiHash registry credentials:

      kubectl create secret docker-registry registry-credentials -n <storage> --docker-server='registry.ultihash.io' --docker-username='<registry_username>' --docker-password='<registry_password>'
      
    • Replace <storage> with the namespace name. Replace <registry_username>, and <registry_password> with the appropriate values you received from UltiHash.

    • License key and monitoring token: Create a secret in Kubernetes for the license key and monitoring token:

      kubectl create secret generic ultihash -n <storage> --from-literal=license='<license_key>' --from-literal=token='<monitoring_token>'
      
    • Replace <storage> with the namespace name. Replace <license_key> and <monitoring_token> with the specific values provided by UltiHash.

Step 3: Helm installation

  1. Helm chart deployment:

    • Deploy the Helm chart with a specific release name and namespace:

      helm install <release_name> oci://registry.ultihash.io/stable/ultihash-cluster -n <storage> --values values.yaml --wait
      
    • Replace <release_name> and <storage> with your chosen names. values.yaml should be configured as described below.

  2. Component configuration:

    • Customize the values.yaml file with the necessary configurations:

      • Storage class: Specify the storage class name created by your CSI controller.

      • Domain name: Enter a valid domain name for your UltiHash cluster.

      • Service replicas and storage size: Adjust the number of replicas and storage size for services like etcd, entrypoint, storage, and deduplicator based on your requirements.

        global:                           
          logLevel: INFO                  # Default log level for all UltiHash services. Valid values are DEBUG, INFO, WARN, ERROR, or FATAL
          telemetryExportInterval: 30000  # Export interval for UltiHash services telemetry (in milliseconds). Could be overriden individually for each UltiHash service
        
        etcd:
          replicaCount: <number_of_replicas>
          persistence:
            storageClass: <storage_class>
        
        database:
          primary:
            persistence:
              storageClass: <storage_class>
              size: <storage_size>
        
        entrypoint:
          replicas: <number_of_replicas>
          ingress:
            host: <domain_name>  # FQDN to expose the entrypoint outside the cluster
        
        storage:
          replicas: <number_of_replicas>
          storageClass: <storage_class>
          storageSize: <storage_size>
        
        deduplicator:
          replicas: <number_of_replicas>
          storageClass: <storage_class>
          storageSize: <storage_size>
        
        exporter:
          enabled: true
        

Step 4: Post-installation

  1. Verification:

    • After deployment, verify that all services are running correctly by checking the Kubernetes namespace:

      kubectl get all -n <storage>
      
    • Ensure that all pods are in the Running state with no errors.

Last updated