Install Self-Hosted on-premises
How to set up UltiHash Self-Hosted on your local infrastructure with Kubernetes
On-premises environments remain vital for many organizations. Through its Kubernetes-native architecture, UltiHash supports easy scaling and load balancing, ensuring that systems can handle fluctuating workloads with minimal reconfiguration. This design ensures that on-premises deployments remain flexible and customizable, allowing businesses to maintain control over their infrastructure.
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:
- Prerequisites: Gather the necessary credentials, tools, and environment configurations. 
- Cluster setup: Configure your Kubernetes cluster, including creating namespaces and provisioning secrets. 
- Helm installation: Deploy UltiHash using Helm, customizing the setup for your specific environment. 
- Post-installation: Verify the installation. 
Step 1: Prerequisites
Before you begin the installation, ensure you have the following:
- Skills: good knowledge of Kubernetes, kubectl, and helm. 
- UltiHash Account: Sign up at ultihash.io/signup and verify your email. 
- Credentials: After signing up on the UltiHash website, you will get the following credentials on your dashboard: - Registry login and password (referred to as - registry_loginand- registry_password).
- Customer ID (referred to as - customer_id).
- Access token (referred to as - access_token).
- 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. 
- 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 - kubectlis installed and configured to access the cluster.
- Helm: Install Kubernetes package manager Helm (version 3.x) to manage Kubernetes packages. 
 
Step 2: Cluster setup
- Namespace creation: - Create a Kubernetes namespace for the UltiHash installation: - kubectl create ns <namespace>
- Replace - <namespace>with your desired namespace name.
 
- Secrets provisioning: - Registry credentials: Provision a secret in Kubernetes to store the UltiHash registry credentials: - kubectl create secret docker-registry registry-credentials -n <namespace> --docker-server='registry.ultihash.io' --docker-username='<registry_login>' --docker-password='<registry_password>'
- Replace - <namespace>with the namespace name. Replace- <registry_login>, and- <registry_password>with the appropriate values obtained from your dashboard on the UltiHash website.
- Ultihash credentials and monitoring token: Create a secret in Kubernetes for the license key and monitoring token: - kubectl create secret generic ultihash -n <namespace> --from-literal=customer_id='<customer_id>' --from-literal=access_token='<access_token>' --from-literal=token='<monitoring_token>'
- Replace - <namespace>with the namespace name. Replace- <customer_id>,<access_token>,and- <monitoring_token>with the corresponding values found on your UltiHash dashboard.
 
Step 3: Helm installation
- Helm chart deployment: - Log into the UltiHash registry with your - registry_loginand- registry_password:- helm registry login registry.ultihash.io
- Deploy the Helm chart with a specific release name and namespace: - helm install <release_name> oci://registry.ultihash.io/stable/ultihash-cluster -n <namespace> --values values.yaml --wait
- Replace - <release_name>and- namespacewith your chosen names.- values.yamlshould be configured as described below.
 
- Component configuration: - Customize the - values.yamlfile 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- deduplicatorbased 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: groups: - id: 0 type: ROUND_ROBIN storages: 1 storageClass: <storage_class> size: <storage_size> deduplicator: replicas: <number_of_replicas> storageClass: <storage_class> storageSize: <storage_size> exporter: enabled: true
 
 
Step 4: Post-installation
- Verification: - After deployment, verify that all services are running correctly by checking the Kubernetes namespace: - kubectl get all -n <namespace>- Replace - <namespace>with the namespace where UltiHash cluster has been deployed.
- Ensure that all pods are either in the - Runningor in the- Completedstate with no errors.
 
- Get access to the UltiHash cluster: - Obtain the UltiHash root user credentials: - # Obtain credentials for the UltiHash root user aws_access_key_id=`kubectl get secret <release_name>-super-user-credentials -n <namespace> -o jsonpath="{.data.access-key-id}" | base64 --decode` aws_secret_access_key=`kubectl get secret <release_name>-super-user-credentials -n <namespace> -o jsonpath="{.data.secret-key}" | base64 --decode` # Set the credentials for the UltiHash root user export AWS_ACCESS_KEY_ID=$aws_access_key_id export AWS_SECRET_ACCESS_KEY=$aws_secret_access_key
- Replace - <release_name>and- <namespace>with the Helm release name and namespace name correspondingly.
- Use AWS CLI and AWS SDK to interact with the UltiHash cluster: - aws s3api list-buckets --endpoint-url <cluster-url>
- Replace - <cluster-url>with the appropriate scheme: either- https://<domain_name>or- http://<domain_name>, depending on whether your- entrypoint.ingressobject in the Helm values has been configured with or without TLS. The- <domain_name>corresponds to the domain name chosen for the UltiHash cluster, as set in the- entrypoint.ingress.hostobject.
 
Frequent issues troubleshooting
Last updated
Was this helpful?