Example Configurations
This section will define a handful of example configurations for common scenarios. These examples serve as a basis for you to modify for your specific deployment.
Minimum Configuration for Deployment
The following configuration is a reduced set that brings up services with minimum features enabled. This includes no configuration for email (SMTP), only local accounts (no SSO/LDAP/AD), no TLS certificates, etc. This should NOT be used for production deployments but it helpful for getting an initial deployment that can be then modified.
Minimum Configuration
# Minimum default values for tiledb-cloud-enterprise.
# This is a YAML-formatted file.
# REQUIRED: Set the docker registry image credentials to pull TileDB Cloud docker images
# The password should be provided to you by your account representative
imageCredentials:
password: ""
##################################
# TileDB Cloud REST API settings #
##################################
tiledb-cloud-rest:
# Config ingress, be sure to set the url to where you want to expose the api
ingress:
url:
# REQUIRED: Change this to the hostname you'd like the API service to be at
- api.tiledb.example.com
# optional TLS
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources:
# REQUIRED:
# Set the resource limits for the REST service.
# We recommend a minimum of 8 cpus and 24 GB of ram on the worker nodes
# We set REST to slightly below this to allow for other pods on the same worker node.
# These setting effect the number of concurrent operations
# limits:
# cpu: 100m
# memory: 128Mi
requests:
# cpu: 16000m
# memory: 16Gi
cpu: 7000m
memory: 17Gi
resourcesDind:
# Set the resources for the Docker-in-Docker pod, this is where the UDFs run
# The resources here directly effect the number of concurrent UDFs that can be run
requests:
memory: 6Gi
restConfig:
# REQUIRED: Set the private dockerhub registry credentials, these are the same as the `imageCredentials` above
ContainerRegistry:
DockerhubPassword: ""
# REQUIRED: Set the initial passwords for the internal users of Rest
# Replace "secret" with a strong password
# This config can be removed after the first run of Rest
ComputationUserInitialPassword: "secret"
PrometheusUserInitialPassword: "secret"
CronUserInitialPassword: "secret"
UIUserInitialPassword: "secret"
DebugUserInitialPassword: "secret"
# REQUIRED: Set the signing secret(s) for api tokens, this should be a secure value
# We recommend creating a random value with `openssl rand -hex 32`
# This is a list of token signing secrets. Zero element of the list is used
# for signing, the rest are used for validation.
# This mechanism provides a way to rotate signing secrets.
# In case there are active tokens signed with a key and this key is removed from
# the list, the tokens are invalidated.
TokenSigningSecrets:
- "Secret"
# REQUIRED: This is needed for the TileDB Jupyterlab Prompt User Options extension
CorsAllowedOrigins:
- "https://jupyterhub.tiledb.example.com"
# REQUIRED: Define supported storage types and locations, if you want to use NFS
# enable "local"
StorageLocationsSupported:
- "s3"
#- "local"
#- "hdfs"
#- "azure"
#- "gcs"
# REQUIRED: Configure main database. It is recommended to host a MariaDB or MySQL instance outside of the kubernetes cluster
Databases:
# `main` is a required database configuration
main:
Driver: mysql
Host: "{{ .Release.Name }}-mariadb.{{ .Release.Namespace }}.svc.cluster.local"
Port: 3306
Schema: tiledb_rest
Username: tiledb_user
Password: password
# It is not recommend to run the database inside k8s for production use, but it is helpful for testing
mariadb:
# Set to true if you wish to deploy a database inside k8s for testing
enabled: false
image:
repository: bitnami/mariadb
tag: 10.5.8
pullPolicy: IfNotPresent
auth:
# Auth parameters much match with the restConfig.Databases.main above
database: tiledb_rest
username: tiledb_user
password: password
rootPassword: changeme
primary:
# Enable persistence if you wish to save the database, again running in k8s is not recommend for production use
persistence:
enabled: false
# Set security context to user id of mysqld user in tiledb-mariadb-server
podSecurityContext:
enabled: true
fsGroup: 999
containerSecurityContext:
enabled: true
runAsUser: 999
####################################
# TileDB Cloud UI Console settings #
####################################
tiledb-cloud-ui:
# REQUIRED: set the url of the jupyterhub server
config:
# REQUIRED: Set a secret here with `openssl rand -hex 32`
SessionKey: "secret"
RestServer:
# REQUIRED: This needs to be set to
# the same value as restConfig.UIUserInitialPassword
Password: "secret"
JupyterhubURL: "https://jupyterhub.tiledb.example.com"
# SSOOkta:
# Domain: "domain-name.okta.com"
# ClientID: "client_id"
# ClientSecret: "secret"
# REQUIRED: Config ingress, be sure to set the hostname to where you want to expose the UI
ingress:
enabled: true
# REQUIRED: Set URL for web console
url:
- console.tiledb.example.com
# optional TLS
tls: []
#########################################
# TileDB Cloud Hosted Notebook Settings #
#########################################
jupyterhub:
# REQUIRED: Set the private registry credentials, these are the same as the `imageCredentials` above
imagePullSecret:
password: ""
proxy:
# REQUIRED: Set a signing secret here with `openssl rand -hex 32`
secretToken: "Secret"
# The pre-puller is used to to ensure the docker images for notebooks are prepulled to each node
# This can improve notebook startup time, but add additional storage requirements to the nodes
# If you wish to use dedicated k8s node groups for notebooks, see:
# https://zero-to-jupyterhub.readthedocs.io/en/0.8.2/optimization.html?highlight=labels#using-a-dedicated-node-pool-for-users
hub:
config:
CryptKeeper:
# REQUIRED: Set the jupyterhub auth secret for persistence, this should be a secure value
# We recommend creating a random value with `openssl rand -hex 32`
keys:
- "Secret"
TileDBCloud:
# REQUIRED: Set the oauth2 secret, this should be a secure value
# We recommend creating a random value with `openssl rand -hex
client_secret: "Secret"
# REQUIRED: Set the domain for the jupyterhub and the oauth2 service
# it is likely you just need to replace `example.com` with your own internal domain
# This should match the ingress settings above and the hydra settings below
oauth_callback_url: "http://jupyterhub.tiledb.example.com/hub/oauth_callback"
token_url: "http://oauth2.tiledb.example.com/oauth2/token"
authorize_url: "http://oauth2.tiledb.example.com/oauth2/auth"
userdata_url: "http://oauth2.tiledb.example.com/userinfo"
# REQUIRED: Set the domain for the REST API and the oauth2 service
# it is likely you just need to replace `example.com` with your own internal domain
# This should match the tiledb-cloud-rest settings above and the hydra settings below
extraEnv:
OAUTH2_AUTHORIZE_URL: "https://oauth2.tiledb.example.com/oauth2/auth"
OAUTH2_USERDATA_URL: "https://oauth2.tiledb.example.com/userinfo"
TILEDB_REST_HOST: "https://api.tiledb.example.com"
# Uncomment to disable SSL validation. Useful when testing deployments
# TILEDB_REST_IGNORE_SSL_VALIDATION: "true"
ingress:
enabled: true
# REQUIRED: set the ingress domain for hosted notebooks
hosts:
- "jupyterhub.tiledb.example.com"
# optional TLS
tls: []
########################################
# TileDB Cloud Oauth2 Service Settings #
########################################
hydra:
hydra:
# REQUIRED: Set the domain for the jupyterhub
# it is likely you just need to replace `example.com` with your own internal domain
# This should match the ingress settings above and the hydra settings below
dangerousAllowInsecureRedirectUrls:
- http://jupyterhub.tiledb.example.com/hub/oauth_callback
config:
# Optionally set the internal k8s cluster IP address space to allow non-ssl connections from
# This defaults to all private IP spaces
# serve:
# tls:
# allow_termination_from:
# Set to cluster IP
# - 172.20.0.0/12
secrets:
# REQUIRED: Set the oauth2 secret, this should be a secure value
# We recommend creating a random value with `openssl rand -hex 32`
system:
- "secret"
cookie:
- "Secret"
# REQUIRED: Set MariaDB Database connection, this defaults to the in k8s development settings.
# You will need to set this to the same connection parameters as the tiledb-cloud-rest section
dsn: "mysql://tiledb_user:password@tcp(tiledb-cloud-mariadb.tiledb-cloud.svc.cluster.local:3306)/tiledb_rest?parseTime=true"
urls:
self:
# REQUIRED: Update the domain for the oauth2 service and the web console ui
# It is likely you can just replace `example.com` with your own internal domain
issuer: "https://oauth2.tiledb.example.com/"
public: "https://oauth2.tiledb.example.com/"
login: "https://console.tiledb.example.com/oauth2/login"
consent: "https://console.tiledb.example.com/oauth2/consent"
# Configure ingress for oauth2 service
ingress:
public:
hosts:
# REQUIRED: set the ingress domain for oauth2 service
- host: "oauth2.tiledb.example.com"
paths:
- path: /
pathType: ImplementationSpecific
# optional TLS
tls: []
######################
# Ingress Controller #
######################
ingress-nginx:
# This is provided for ease of testing, it is recommend to establish your own ingress which fits your environment
enabled: false
## nginx configuration
## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
##
controller:
name: controller
autoscaling:
enabled: true
minReplicas: 2
config:
use-proxy-protocol: "true"
log-format-escape-json: "true"
log-format-upstream: '{ "time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr", "x-forward-for": "$proxy_add_x_forwarded_for", "request_id": "$req_id", "remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status": $status, "vhost": "$host", "request_proto": "$server_protocol", "path": "$uri", "request_query": "$args", "request_length": $request_length, "duration": $request_time, "method": "$request_method", "http_referrer": "$http_referer", "http_user_agent": "$http_user_agent" }'
# Set timeouts to 1 hour
proxy-send-timeout: "3600"
proxy-read-timeout: "3600"
send-timeout: "3600"
client-max-body-size: "3076m"
proxy-body-size: "3076m"
proxy-buffering: "off"
proxy-request-buffering: "off"
proxy-http-version: "1.1"
ingressClass: nginx
## Allows customization of the external service
## the ingress will be bound to via DNS
publishService:
enabled: true
service:
annotations:
# Enable public facing load balancer
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
# Set any needed annotations. The default ones we have set are for aws ELB nginx
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
# Set aws-load-balancer-internal to allow all traffic from inside
# the vpc only, the -internal makes it not accessible to the internet
service.beta.kubernetes.io/aws-load-balancer: '0.0.0.0/0'
# Set timeout to 1 hour
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
## Set external traffic policy to: "Local" to preserve source IP on
## providers supporting it
## Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer
externalTrafficPolicy: "Local"
type: LoadBalancer
MinIO Usage for Deployment
MinIO is commonly used as a self-hosted object store. MinIO works well with TileDB Cloud.
Provided that after MinIO installation you have created:
A bucket called
minio-tiledb-cloud-intermediate-result-storage
The configuration below shows only the section that needs to be modified for use with MinIO.
MinIO Configuration
# MinIO configuration values for tiledb-cloud-enterprise.
# This is a YAML-formatted file.
##################################
# TileDB Cloud REST API settings #
##################################
tiledb-cloud-rest:
restConfig:
# REQUIRED: Define supported storage types and locations, if you want to use NFS
# enable "local"
StorageLocationsSupported:
- "s3"
ArraySettings:
# When enabled, AWS credentials will be auto-discovered
# from the Environment, config file, EC2 metadata etc.
AllowS3NoCredentials: false
# Change to false avoid any region checks for s3 compatible storage.
CheckS3Region: false
ResultStorage:
Config:
# REQUIRED: Configure with MinIO access details for task results storage bucket
- "vfs.s3.aws_access_key_id": "key"
- "vfs.s3.aws_secret_access_key": "secret"
# REQUIRED: Set to a minio bucket location for task results storage
Path: "s3://minio-tiledb-cloud-intermediate-result-storage"
Workflows:
BatchTaskParamsStorage:
S3BatchTaskParamsStorage:
# REQUIRED: Set to a minio bucket location for Task Graph Storage
Bucket: "s3://minio-tiledb-cloud-intermediate-result-storage"
Path: "argo-workflows"
TileDBEmbedded:
Config:
- "vfs.s3.scheme": "http"
- "vfs.s3.region": ""
# REQUIRED: Set to your minio host
- "vfs.s3.endpoint_override": "minio.example.com:9999"
- "vfs.s3.use_virtual_addressing": "false"
##################
# Argo Workflows #
##################
argo-workflows:
useStaticCredentials: true
artifactRepository:
s3:
# insecure will disable TLS. Primarily used for minio installs not configured with TLS
insecure: true
# REQUIRED: The Bucket where the artifacts are stored
bucket: 'minio-tiledb-cloud-intermediate-result-storage'
# REQUIRED: Set to MinIO host
endpoint: minio.example.com:9999
# REQUIRED: Configure with minio access details
accessKeySecret:
name: minio-secret
key: MINIO_ACCESS_KEY_ID
secretKeySecret:
name: minio-secret
key: MINIO_SECRET_ACCESS_KEY
Last updated