Deploying the WDS API Server with a Helm Chart
The WDS API Server can be deployed with the WDS Helm Chart to a Kubernetes cluster.
By default, the Helm chart is configured to deploy the WDS API Server in SingleService mode — deploying one instance of the Solidstack service. Only one configuration parameter is required: a MongoDB connection string. Kindly review the Third-Party Components for compatible versions.
To deploy WDS API Server in MultiService mode, a license key is required. Contact us for a license key.
If you find an error in the Helm chart (or in the WDS API Server itself), or if you have specific requirements that need to be added to the Helm chart, kindly use the Issues.
Deploying using Helm CLI
To deploy the WDS API Server using the Helm CLI, run the following commands:
IMPORTANT! Ensure you have access to a Kubernetes cluster.
# Add a repository
helm repo add webdatasource https://webdatasource.github.io/wds.helm
# Update your local repository cache
helm repo update
# Search for the chart to verify it's available
helm search repo webdatasource --version 1.0.2
# Install the chart
helm install wds-server --version 1.0.2 webdatasource/wds-helm-chart \
--namespace webdatasource --create-namespace \
--set global.registry="docker.io" \
--set global.coreServices.databases.mongodb.connectionString="mongodb+srv://<user>:<password>@<host>/WebDataSource?appName=<cluster>&readPreference=secondary"
Deploying using Terraform
IMPORTANT! Ensure you have helm provider configured in your terraform project.
Minimal Terraform configuration to deploy WDS API Server:
# MongoDB connection string and license key for WDS API Server deployment
variable "mongodb_connection_string" {
type = string
sensitive = true
}
# Docker registry of WDS API Server service images
variable "registry" {
type = string
default = "docker.io"
}
# Helm chart version for WDS API Server deployment
variable "helm_chart_version" {
type = string
default = "1.0.2"
}
# Namespace and ingress configuration for WDS API Server deployment
# Set `create_namespace` to false to deploy in an existing namespace
variable "create_namespace" {
type = bool
default = true
}
# Namespace for WDS API Server deployment
variable "namespace" {
type = string
default = "webdatasource"
}
# Enable or disable ingress for WDS API Server deployment
variable "enable_ingress" {
type = bool
default = true
}
# Kubernetes namespace resource
resource "kubernetes_namespace" "webdatasource" {
count = var.create_namespace ? 1 : 0
metadata {
name = var.namespace
}
}
# Helm release resource
resource "helm_release" "wds-server" {
name = "wds-server"
repository = "https://webdatasource.github.io/wds.helm"
chart = "wds-helm-chart"
version = var.helm_chart_version
namespace = var.namespace
create_namespace = false
values = [
yamlencode({
global = {
registry = var.registry
ingress = {
enabled = var.enable_ingress
}
}
}),
sensitive(yamlencode({
global = {
coreServices = {
databases = {
mongodb = {
connectionString = var.mongodb_connection_string
}
}
}
}
}))
]
depends_on = [
kubernetes_namespace.webdatasource
]
}
NOTE This code can be used to create a dedicated Terraform Module for WDS API Server.
Configuration
The following configuration parameters can be set via the values.yaml file:
Path | Description |
---|---|
global.coreServices.databases.mongodb.connectionString | Required Always. MongoDB connection string |
global.coreServices.mode | Deployment mode: SingleService or MultiService . Default: SingleService |
global.coreServices.license.key | Required for MultiService mode. License key. See Plans |
global.coreServices.cache.connectionString | Cache connection string (used only in MultiService mode; defaults to MongoDB) |
global.coreServices.jobTypes | List of available job types |
global.coreServices.externalIpConfigs | List of external IP configs |
global.coreServices.exceptionResponseDelayMs | Delay before responding with HTTP error (ms). Default: 1000 |
global.coreServices.maxInactiveSecToReregistrar | Max inactive seconds to re-register crawler. Default: 60 |
global.auxiliaryServices.docs.enabled | Deploy docs service |
global.auxiliaryServices.playground.enabled | Deploy playground service |
global.minLogLevel | Minimum log level. Values: Trace , Debug , Information , Warning , Error , Critical |
global.registry | Docker registry for all images. Default: docker.io |
global.resources.requests | Default CPU resources request per pod. Default: CPU: 100m; RAM: 256Mi |
global.deploymentExtraLabels | Extra labels for all deployments |
global.serviceExtraLabels | Extra labels for all services |
global.nodeSelector | Default nodeSelector for all pods |
global.tolerations | Default tolerations for all pods |
global.affinity | Default affinity rules for all pods |
global.ingress.enabled | Enable ingress |
global.ingress.className | Ingress class name. If is omitted, a default Ingress class should be defined. Default: nginx |
global.ingress.annotations | Ingress annotations |
global.ingress.basePath | Base path for all services. Default: / |
coreServices
and auxiliaryServices
sections in the values file can be used to override the global configuration for a particular service.
Accessing the WDS API Server instance
When the helm release has been deployed to a Kubernetes cluster, use the following command to get access URLs:
NAMESPACE=webdatasource # Change the namespce if necessary
SCHEME=$(kubectl get ing webdatasource -n $NAMESPACE -o jsonpath='{.spec.tls[0].hosts[0]}')
SCHEME=$([ -n "$SCHEME" ] && echo https || echo http)
HOST=$(kubectl get ing webdatasource -n $NAMESPACE -o jsonpath='{.spec.rules[0].host}')
if [ -z "$HOST" ]; then
HOST=$(kubectl get ing webdatasource -n $NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
[ -z "$HOST" ] && HOST=$(kubectl get ing webdatasource -n $NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
[ -z "$HOST" ] && HOST=localhost
fi
echo
kubectl get ing webdatasource -n $NAMESPACE -o jsonpath='{range .spec.rules[*].http.paths[*]}{.path}/{"\n"}{end}' | awk -v s="$SCHEME" -v h="$HOST" '{print s"://"h $0}'
The result should look like this:
http(s)://[your-host]/playground/
http(s)://[your-host]/docs/
http(s)://[your-host]/api/
http(s)://[your-host]/mcp/
/playground/
is used to access Playground/docs/
is used to access Docs/mcp/
is used to acceess MCP Server/api/
is used by MS SQL CRL Functions