Prerequisites
Installing Validio on Customer VPC requires knowledge of:
- Kubernetes: how to install, configure, and monitor resources on AWS, GCP or Azure.
- Helm: how to install and configure helm charts on Kubernetes.
- All nodes must be in the same AWS availability zone, GCP zone or Azure zone.
- Persistent volume provisioning enabled, to create Kubernetes PVC resources.
- We also recommend a configured load balancer or ingress controller, such as:
- kubectl CLI tool and set the
kubectlcontext to the destination cluster. - Helm version 3.8.0 or later with Helm OCI support.
Installation
Complete the following steps to install your VPC deployment. Also, you can refer to VPC Deployment Examples.1. Create namespace
Create the namespace you want to use for your configuration. In our examples, we usevalidio.
Bash
2. Add the docker-registry secret
Create aKubernetes Secret to pull the docker images required by the helm chart. This requires the JSON file provided by Validio.
First, set the VALIDIO_SECRET environment variable to point to your JSON file:
Bash
Kubernetes Secret:
Bash
3. Install the helm chart
The helm chart installation requires the
validio-values.yaml file. For details, refer to configuration and examples.Bash
4. Configure the validio-values.yaml file
The Helm chart supports the following keys in the validio-values.yaml file:
If the default value is
false or true, the value type is bool. For all others, the value type is String.<service>.resources.* keys supports both CPU and Memory resources, specified only as <service>.resource.*.
Available keys for each service:
YAML
The following are memory and CPU recommendations:
- Memory: set a limit with
<service>.resources.limits.memory. Kubernetes terminates a container that exceeds its memory limit, so the limit caps how much a service can consume. - CPU: set a request with
<service>.resources.requests.cpuand leave the limit unset. The request reserves capacity when the pod is scheduled, and with no limit in place a service can use spare CPU on the node instead of being throttled. - CPU limits: if your platform policy requires one, set
<service>.resources.limits.cputo1000m. That is five times the suggested request, so it bounds worst-case use without throttling normal load.
Each service runs as a single replicaEvery Validio service runs as exactly one replica and can’t be scaled horizontally. The Helm chart has no replica count or autoscaling setting, and you shouldn’t scale the deployments or statefulsets beyond one replica by any other means. To give a service more capacity, raise its
<service>.resources.* values instead.affinity, tolerations or nodeSelector that is possible on all our services. Here is an example of how it would be done:
YAML
<service>.probes.*. Available keys are listed below, note that they are enabled by default and the commented values are the default values, so no need to make any changes if you are happy with the default values.
YAML
Migrator jobs and init containers
Two Kubernetes Jobs run database migrations:ve-migrator for the Validation Engine and surface-migrator for Surface. The Jobs run when you install Validio, and when you upgrade to a release that includes a new version of the Validation Engine or Surface. A helm upgrade that only changes values in your validio-values.yaml file doesn’t run them. Before Diver, Ingress, Pipelines, and Surface start, an init container in each of their pods waits for the migrations to finish. Ingress also runs one init container for each custom database driver that you configure.
The migrator Jobs have no default resources. If your cluster enforces resource quotas, requires resource requests on every container, or only schedules pods on tainted nodes, set the resources and pod placement for the Jobs as well:
YAML
Bash
If a migrator Job fails, the services don’t start. Check the Job logs with
kubectl -n validio logs job/<job-name>. For alerting on failed Jobs, refer to Monitoring VPC Deployments.
Sizing for large catalogs
The suggested resource values in the table above suit catalogs of up to about 10,000 assets. Larger catalogs mainly increase the memory that Surface and Postgres use and the storage that Postgres uses. Ingress and Pipelines stay well within their suggested limits, even with more than a million assets. Diver only needs more headroom in the Large tier. Use the following tiers as a starting point, then adjust them based on the memory usage that you observe. For more information, refer to Monitoring VPC Deployments.
Postgres storage also grows with the number of validators and the amount of history, not only with catalog size. If your storage class supports volume expansion, you can increase
postgres.storage.capacity later.
Manage the Diver encryption key
The Diver service encrypts the credentials and integration secrets that Validio stores. By default, the Helm chart generates a single encryption key that can’t be changed. From Validio 11.1, you can supply your own encryption keys and rotate them with theve.diver.encryptionKeys keys.
Validio never has access to your encryption keys and can’t recover data encrypted with a key that you lose. Include the key Secret in your backups. For more information, refer to Backing up VPC Deployments.
Create the key Secret
You create and manage the key Secret yourself, for example by syncing it from your secret manager. The Helm chart never generates it. The Secret holds one entry per key. To generate a key:Bash
diver-encryption-keys with one key entry named v1:
Bash
Enable rotatable keys
- Create the key Secret in the release namespace.
-
Add the following to your
validio-values.yamlfile:YAML - Upgrade the Helm release.
ve.diver.encryptionKeys.key names. Leave your existing encryption key configuration unchanged, and keep the original key for as long as you have backups taken before this change. Restoring one of those backups needs the original key.
Rotate the key
- Add a new entry to the key Secret, for example
v2. Keep the existing entries. - Set
ve.diver.encryptionKeys.keyto the name of the new entry. - Upgrade the Helm release. Diver restarts and re-encrypts all stored secrets with the new key.
ve.diver.encryptionKeys.key before the updated Secret has reached the Diver pod, Diver restarts until the new entry is available. This usually takes less than a minute.
Verify the key in use
After you enable rotatable keys or change the key, check the Diver logs for one of the following messages:Re-encrypted stored secrets with the configured encryption key: Diver re-encrypted your data with the new key.Stored secrets already use the configured encryption key: Diver found your data already encrypted with the configured key. Diver logs this on every later start.
Keep old keys
Don’t delete a key entry while backups taken under that key still exist. To restore such a backup, the key Secret must contain the entry that was in use when the backup was taken. This also applies to the original encryption key that Diver used before you enabled rotatable keys. Keep it for as long as you have backups taken before that point, even after you have rotated to a new key.Sign in to the Validio platform
The first time you sign in to the Validio platform, you must use the admin credentials created in the Kubernetes Secret.Bash
surface.ingress.host key. For example, https://validio.example.com/
If you did not configure an ingress, use port-forward to forward the Validio platform to your localhost:
Bash