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_loginandregistry_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_loginandregistry_password:helm registry login registry.ultihash.ioDeploy 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 --waitReplace
<release_name>andnamespacewith 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, anddeduplicatorbased 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 theCompletedstate 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_keyReplace
<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: eitherhttps://<domain_name>orhttp://<domain_name>, depending on whether yourentrypoint.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 theentrypoint.ingress.hostobject.
Frequent issues troubleshooting
Last updated
Was this helpful?