Install Ververica Platform on Minikube
Install Ververica Platform 3.1.1 on a minikube cluster on an AWS EC2 instance for evaluation, with MySQL as the metadata database and MinIO as S3-compatible blob storage.
On this page
This guide installs Ververica Platform 3.1.1 on a single-node minikube cluster on an AWS EC2 instance. MySQL runs as the metadata database and MinIO as S3-compatible blob storage, both inside the cluster. To install Ververica Platform on your own Kubernetes cluster, database, and blob storage, see Getting Started: Self-managed v3.x.
This setup stores credentials in plain text, runs a single replica of every component, and opens the web console without a login. Use it for evaluation and testing only, and limit access to the instance to your own IP address.
Prerequisites
- An AWS EC2
m5.4xlargeinstance (16 vCPUs, 64 GB of memory) running an Amazon Linux 2023 AMI. To run larger Flink jobs, use anm5.8xlarge(32 vCPUs, 128 GB of memory). For the resources Ververica Platform needs, see System Requirements. - An x86_64 (amd64) AMI and instance type.
- An inbound rule for port 8080 in the instance's security group, limited to your own IP address.
- Credentials for
registry.ververica.cloud. The Ververica Platform images are private. Contact Ververica Customer Support to get image pull access.
Install the Tools
Connect to the instance over SSH and run all commands in this guide as root (sudo su). Install kubectl, minikube, Helm, and Docker:
1# Install kubectl
2curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
3sudo install -o root -g root -m 0755 kubectl /bin/kubectl
4
5# Install minikube
6curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
7sudo install minikube-linux-amd64 /bin/minikube
8
9# Install helm
10curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
11chmod 700 get_helm.sh
12sudo HELM_INSTALL_DIR=/bin ./get_helm.sh
13
14# Install docker
15sudo yum update -y
16sudo yum install -y docker
17sudo service docker startStart Minikube
1sudo minikube start --memory=40G --cpus=12 --forceVerverica Platform 3 supports Kubernetes 1.24 to 1.34. The latest minikube release might start a newer Kubernetes version. To stay in the supported range, add --kubernetes-version=v1.34.0 to the command.
Create the Namespaces and Registry Secrets
Create a namespace for the platform (vvp-system) and one for your Flink deployments (vvp-deploy), and an image pull secret in each:
1kubectl create ns vvp-system
2kubectl create ns vvp-deploy
3
4kubectl -n vvp-system create secret docker-registry ververica-registry \
5 --docker-username=<username> \
6 --docker-password=<password> \
7 --docker-server=registry.ververica.cloud
8kubectl -n vvp-deploy create secret docker-registry ververica-registry \
9 --docker-username=<username> \
10 --docker-password=<password> \
11 --docker-server=registry.ververica.cloudDeploy MySQL
Create the secret that holds the MySQL root password:
1kubectl -n vvp-system create secret generic mysql-secret --from-literal=mysql-root-password='admin123'Save the following manifest as mysql.yaml. It runs MySQL 8.0 with lower_case_table_names=1, which Ververica Platform requires.
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: mysql-config
5 namespace: vvp-system
6data:
7 my.cnf: |
8 [mysqld]
9 lower_case_table_names=1
10 default_authentication_plugin=mysql_native_password
11---
12apiVersion: v1
13kind: PersistentVolumeClaim
14metadata:
15 name: mysql-pvc
16 namespace: vvp-system
17spec:
18 accessModes:
19 - ReadWriteOnce
20 resources:
21 requests:
22 storage: 5Gi
23 storageClassName: standard
24---
25apiVersion: apps/v1
26kind: Deployment
27metadata:
28 name: mysql
29 namespace: vvp-system
30spec:
31 replicas: 1
32 selector:
33 matchLabels:
34 app: mysql
35 template:
36 metadata:
37 labels:
38 app: mysql
39 spec:
40 containers:
41 - name: mysql
42 image: mysql:8.0
43 args:
44 - "--lower-case-table-names=1"
45 - "--default-authentication-plugin=mysql_native_password"
46 ports:
47 - containerPort: 3306
48 env:
49 - name: MYSQL_ROOT_PASSWORD
50 valueFrom:
51 secretKeyRef:
52 name: mysql-secret
53 key: mysql-root-password
54 volumeMounts:
55 - name: mysql-data
56 mountPath: /var/lib/mysql
57 - name: mysql-config
58 mountPath: /etc/mysql/conf.d
59 readinessProbe:
60 exec:
61 command: ["bash","-lc","mysqladmin ping -h 127.0.0.1 -uroot -p$MYSQL_ROOT_PASSWORD"]
62 initialDelaySeconds: 20
63 periodSeconds: 10
64 livenessProbe:
65 exec:
66 command: ["bash","-lc","mysqladmin ping -h 127.0.0.1 -uroot -p$MYSQL_ROOT_PASSWORD"]
67 initialDelaySeconds: 60
68 periodSeconds: 20
69 volumes:
70 - name: mysql-data
71 persistentVolumeClaim:
72 claimName: mysql-pvc
73 - name: mysql-config
74 configMap:
75 name: mysql-config
76---
77apiVersion: v1
78kind: Service
79metadata:
80 name: mysql
81 namespace: vvp-system
82spec:
83 selector:
84 app: mysql
85 ports:
86 - name: mysql
87 port: 3306
88 targetPort: 3306
89 type: ClusterIPApply it and wait until MySQL is ready:
1kubectl apply -f mysql.yaml
2kubectl -n vvp-system rollout status deploy/mysqlDeploy MinIO
The official MinIO container images are no longer publicly available. This guide installs the MinIO Helm chart with the images of pgsty, a community-maintained, S3-compatible fork of MinIO. Ververica Platform works with any S3-compatible object storage.
Save the following values as values-minio.yaml. They create the vvp bucket that Ververica Platform uses as its blob storage.
1image:
2 repository: docker.io/pgsty/minio
3 tag: RELEASE.2026-08-04T00-00-00Z
4
5mcImage:
6 repository: docker.io/pgsty/mc
7 tag: RELEASE.2026-09-16T00-00-00Z
8
9mode: standalone
10replicas: 1
11
12rootUser: admin
13rootPassword: password
14
15buckets:
16 - name: vvp
17 policy: none
18
19environment:
20 MINIO_API_CORS_ALLOW_ORIGIN: "*"
21 CONSOLE_SECURE_HEADERS: "off"
22
23resources:
24 requests:
25 memory: 512Mi
26 cpu: 250m
27 limits:
28 memory: 1Gi
29 cpu: 1000mInstall the chart:
1helm --namespace vvp-system upgrade --install minio minio \
2 --repo https://charts.min.io/ \
3 --version 5.4.0 \
4 --values values-minio.yamlInstall Ververica Platform
Save the following values as values-vvp.yaml. They connect Ververica Platform to MySQL and MinIO, and the vvp.globalDeploymentDefaults block gives every new deployment small resource requests and the MinIO endpoint and credentials, so Flink jobs can reach MinIO.
1global:
2 database:
3 host: mysql.vvp-system.svc.cluster.local
4 port: 3306
5 user: root
6 password: admin123
7
8 blobStorage:
9 baseUri: s3i://vvp
10 s3:
11 endpoint: http://minio.vvp-system.svc:9000
12 accessKeyId: admin
13 secretAccessKey: password
14
15 authentication:
16 single-user:
17 enabled: true
18 username: admin
19 secureCookies: false
20
21 image:
22 registry: registry.ververica.cloud
23 imagePullSecretName: ververica-registry
24
25 rbac:
26 additionalNamespaces:
27 - vvp-deploy
28
29vvp:
30 globalDeploymentDefaults: |
31 spec:
32 state: RUNNING
33 template:
34 spec:
35 resources:
36 jobmanager:
37 cpu: 0.5
38 memory: 1G
39 taskmanager:
40 cpu: 0.5
41 memory: 1G
42 flinkConfiguration:
43 state.backend: filesystem
44 taskmanager.memory.managed.fraction: 0.0
45 high-availability: none
46 s3.access-key: 'admin'
47 s3.secret-key: 'password'
48 s3.endpoint: "http://minio.vvp-system.svc:9000"
49 s3.path.style.access: "true"
50 metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter
51 execution.checkpointing.interval: 10s
52 execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATIONInstall the chart:
1helm upgrade --install ververica-platform \
2 oci://registry.ververica.cloud/platform-charts/ververica-platform \
3 --version 3.1.1 \
4 --namespace vvp-system \
5 --values values-vvp.yamlUntil you install a license, the vvp-appmanager-0 and vvp-gateway-0 pods restart with No license found or misconfigured. This is expected. Wait until the Application Manager logs your installation token, then print it:
1until kubectl logs vvp-appmanager-0 -n vvp-system 2>/dev/null | grep -q "installation token"; do sleep 10; done
2kubectl logs vvp-appmanager-0 -n vvp-system | grep -A2 "installation token"Email this token to license_request@ververica.com to receive your license.
Install the License
Save the license you receive as license-vvp.yaml, with the license JSON on a single line under global.vvp.license.data:
1global:
2 vvp:
3 license:
4 data: {"kind":"License","apiVersion":"v1","metadata":{...},"spec":{...}}Before you upgrade, run the following commands. Without them, the upgrade fails with an invalid ownership metadata error:
1kubectl -n vvp-system annotate secret vvp-license-fingerprint \
2 meta.helm.sh/release-name=ververica-platform \
3 meta.helm.sh/release-namespace=vvp-system --overwrite
4kubectl -n vvp-system label secret vvp-license-fingerprint \
5 app.kubernetes.io/managed-by=Helm --overwriteUpgrade the release with the license:
1helm upgrade --install ververica-platform \
2 oci://registry.ververica.cloud/platform-charts/ververica-platform \
3 --version 3.1.1 \
4 --namespace vvp-system \
5 --values values-vvp.yaml \
6 -f license-vvp.yamlRestart the Application Manager and the gateway to apply the license:
1kubectl -n vvp-system delete pod vvp-appmanager-0 vvp-gateway-0After a few minutes, all pods in vvp-system are Running and ready:
1kubectl -n vvp-system get podsOpen the Web Console
Forward the gateway service on all interfaces of the instance:
1kubectl port-forward svc/api-gateway 8080:8080 -n vvp-system --address 0.0.0.0The port forward stops when the terminal closes. To keep it running in the background until the next reboot:
1nohup kubectl port-forward svc/api-gateway 8080:8080 -n vvp-system --address 0.0.0.0 > /var/log/vvp-port-forward.log 2>&1 &Open http://<EC2_INSTANCE_DNS>:8080 in your browser, where <EC2_INSTANCE_DNS> is the public DNS name of the instance, shown in the EC2 console.
Next Steps
- Create a deployment target for the
vvp-deploynamespace, as described in Getting Started: Self-managed v3.x. - Deploy your first job with one of the Quick Start Guides.
Clean Up
To remove the cluster and everything installed in it, terminate the EC2 instance.