Kubernetes and Helm
The Helm deployment runs one on-prem container per pod. Each pod holds the API, the processing workers, and the runtime models.
For a single host, see Docker Compose instead.
Prerequisites
- Kubernetes 1.19 or newer
kubectlconfigured for the target cluster- At least one Linux AMD64 worker node
- Helm 3
- A license key and application ID
- The image tag for the release you're deploying
The reference chart is in the on-prem-ops repository:
git clone https://github.com/microblink/on-prem-ops.git
The chart is under deploy/helm/blinkid-verify/.
Inspect and validate it before installing:
helm show values ./deploy/helm/blinkid-verify
helm lint ./deploy/helm/blinkid-verify
Create the license secret
apiVersion: v1
kind: Secret
metadata:
name: microblink-license
type: Opaque
stringData:
LICENSE_KEY: <license-key>
LICENSE_APPLICATION_ID: <application-id>
Apply it in the namespace where the chart will be installed:
kubectl apply -f license-secret.yaml
Configure the release
auth:
license:
secretName: microblink-license
createSecret: false
blinkIdVerify:
replicaCount: 1
image:
repository: us-docker.pkg.dev/document-verification-public/on-prem/core
tag: 4000.0.2
resources:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "4"
memory: 8Gi
nodeSelector:
kubernetes.io/arch: amd64
env:
DOCVER_WORKFLOW: ExtractAndVerify
WORKER_COUNT: "2"
MicroblinkInflightLimit: "2"
MicroblinkQueueLimit: "1"
Set tag to the version for the release you're deploying.
Keep DOCVER_WORKFLOW: ExtractAndVerify unless you're running an extraction-only deployment.
See Environment variables for every supported setting and its default.
The image default for MicroblinkQueueLimit is 0.
The chart uses 1 to absorb one short Kubernetes routing burst per pod without creating a large internal backlog.
The chart values also configure the Service, Ingress, probes, scheduling, security contexts, writable temporary volumes, extra environment variables, and additional secret imports.
Security and writable storage
The chart defaults run the container as non-root UID 65534, with a read-only root filesystem, all Linux capabilities dropped, privilege escalation disabled, and the runtime-default seccomp profile.
The pod filesystem group lets that user write to the mounted temporary volumes.
Kubernetes API token mounting is disabled, because the product doesn't call the Kubernetes API.
Writable emptyDir volumes are mounted at /tmp and /var/tmp.
Optional size limits are available under blinkIdVerify.volumes, and file logging adds a bounded /var/log volume when enabled.
The chart's default pod termination grace period is 30 seconds.
Keep it longer than MICROBLINK_SHUTDOWN_GRACE_SECONDS, which defaults to 10 seconds, so the container can stop all managed processes before Kubernetes sends SIGKILL.
See Health and shutdown for the container-side behavior.
Install the chart
helm install microblink-self-hosted ./deploy/helm/blinkid-verify --values values.yaml
Check the release and its pods:
helm status microblink-self-hosted
kubectl get pods --selector app.kubernetes.io/instance=microblink-self-hosted
The chart configures liveness and readiness checks using /health/live and /health/ready.
Access the API
The chart creates a Service on port 8080.
To test it directly:
kubectl port-forward service/microblink-self-hosted-blinkid-verify 8080:8080
curl --fail http://localhost:8080/health/ready
Then send a request:
curl --fail --location --output sample-front.jpg https://storage.googleapis.com/microblink-data-public/microblink-api/test-set/blinkid/SGP_ID_FRONT_new/SGP_ID_FRONT_sample.jpg
curl --fail --location --output sample-back.jpg https://storage.googleapis.com/microblink-data-public/microblink-api/test-set/blinkid/SGP_ID_BACK_new/SGP_ID_BACK_sample.jpg
curl --request POST --form "imageFirstSide=@sample-front.jpg" --form "imageSecondSide=@sample-back.jpg" http://localhost:8080/api/v3/verify
If the release overrides the generated resource names, find the Service by release label:
kubectl get service --selector app.kubernetes.io/instance=microblink-self-hosted
Connect the Service to your existing ingress or gateway when the API must be reachable outside the cluster. The chart can also create an Ingress when its Ingress values are enabled.
Logging
Standard output and standard error are enabled by default, and should be collected by the cluster logging system.
Set the following only when files under /var/log are also required:
blinkIdVerify:
logFiles:
enabled: true
Enabling it mounts another emptyDir.
Configure blinkIdVerify.volumes.varLog.sizeLimit to bound local disk use.
See Logging for the generated filenames.
Update the release
Set the intended image tag and apply the updated values:
helm upgrade microblink-self-hosted ./deploy/helm/blinkid-verify --values values.yaml
Review the changelog for configuration or API changes before updating.
To return to the previous revision:
helm history microblink-self-hosted
helm rollback microblink-self-hosted <revision>
Capacity
Set blinkIdVerify.resources, blinkIdVerify.replicaCount, and WORKER_COUNT using the results of a representative load test.
WORKER_COUNT is capacity, not a throughput guarantee: raising it gives each pod more simultaneous processing slots, but every worker also consumes CPU and memory.
Keep MicroblinkQueueLimit small, and add replicas for sustained load.