Deploy the solution on premises
Deploy Unity Virtual Private Cloud on premises using the vpctl tool
Read time 5 minutesLast updated a day ago
Before deployment, check the prerequisites. The deployment on premises uses the vpctl tool to manage the entire release lifecycle. If all prerequisites are met, the deployment takes 30 to 60 minutes. This time doesn't include the subsequent administration tasks, such as setting up an identity provider for single sign-on (SSO).
Follow these steps to deploy Virtual Private Cloud to your Kubernetes cluster.
1. Configure the registry credentials
Before you can pull releases, configure your ORAS registry credentials. This is a one-time setup. Run the interactive configuration:For non-interactive setup and credential verification, see Configure registry credentials.vpctl configure
2. Initialize the manifest file
The manifest filemanifest.yamlmanifest.yamlThe interactive prompts ask for the platform, the release version, the source and target registries, the application domain, the Kubernetes namespace, the autoscaling settings, the monitoring options, the sizing profile, the Traefik service type, and the ArgoCD settings (if applicable).vpctl manifest init
Validate the manifest
To validate your manifest against the built-in schema before continuing, run this command:This command checks the required fields, the allowed values, and the cross-field rules (for example,vpctl manifest validate
maxReplicas >= minReplicasConfigure the manifest file
The manifest file controls the entire deployment. Here is a minimal skeleton:For the full schema, all configurable sections (networking, kubernetes, transformations, monitoring, authentication, infrastructure), and theplatform: onpremreleaseVersion: 0.11.0artifactSync: sourceRepository: uccmpprivatecloud.azurecr.ioconfiguration: networking: appDomain: example.com ingress: traefik: type: LoadBalancer kubernetes: namespace: asset-solutions docker: repository: <your-registry-url> namespace: <your-registry-namespace> imagePullSecret: regcred infrastructure: sizing: medium
deployment.helmChartModedeployment.argocd3. Pull the release
Download the release package from the registry. The system reads the version from the manifest automatically:The system downloads the release archive and extracts it tovpctl release pull --clean-output
./extracted-release--version4. Sync the artifacts
Before deploying, sync the Docker images and the ORAS artifacts from the Unity source registry to your private registry. If you opted in to theremote4.1 Authenticate to both registries
You must authenticate to the source and target registries before syncing:docker login uccmpprivatecloud.azurecr.iodocker login <your-registry-url>
4.2 Run the preflight check
Verify your credentials before running a full sync:This command syncs one Docker image, one ORAS artifact, and (ifvpctl artifact sync preflight
helmChartModeremote4.3 Sync the Docker images
Preview the sync commands first, then run the sync:vpctl artifact sync images --dry-runvpctl artifact sync images
4.4 Sync the ORAS artifacts
ORAS artifacts include OCI artifacts used by Helm charts. The sync reads authentication from the Docker credential store (~/.docker/config.jsonvpctl artifact sync oras --dry-runvpctl artifact sync oras
4.5 Sync the OCI Helm charts (preview, remote chart mode only)
If your manifest includes the settingdeployment.helmChartMode: remotelocalFor all flags (includingvpctl artifact sync charts --dry-runvpctl artifact sync charts
--skip-existing--cleanup--name--concurrency5. Generate and deploy the secrets
Generate the secrets
To generate secrets:- Create a secrets import file based on the provided example: .
secrets.import.example.yaml
-
Generate the Kubernetes secret manifests:
By default, automatically-generated passwords are alphanumeric only. This limitation is to avoid breaking connection strings.vpctl secret generate --import secrets.import.yaml --use-defaults -
Optionally, persist the generated values for reuse on later runs:
This command writes the generated values back tovpctl secret generate --import secrets.import.yaml --use-defaults --persist. Subsequent runs reuse the persisted values, which keeps your deployments consistent across upgrades.secrets.import.yaml
Deploy the secrets
Preview the deployment, then deploy the secrets to your cluster:For all flags, refer to vpctl secret.vpctl secret deploy --dry-runvpctl secret deploy
6. Generate and deploy the charts
Choose your deployment method: Helm or ArgoCD.Option A: Helm deployment
Generate the Helm charts:Preview the deployment first:vpctl release generate --clean-output
For a first-time deployment, deploy the release in waves, starting with the lowest wave, for example,vpctl release deploy --dry-run
-3To deploy all charts at once:vpctl release deploy --wave -3vpctl release deploy --wave -2vpctl release deploy --wave -1vpctl release deploy --wave 0
vpctl release deploy
Verify the deployment
To check the status of the deployments:Ensure that all pods eventually move to the Running state. If a pod isn't running, describe it and check its logs to find the issue.kubectl get pods --all-namespaces --watch
Option B: ArgoCD deployment
If thedeployment.argocdArgoCD deploys from a Git repository. Commit the generated charts:vpctl release generate --format argocd --clean-output
Preview and run the deployment:git add generated-charts/git commit -m "Add release charts"git push
For allvpctl release deploy --format argocd --dry-runvpctl release deploy --format argocd
release generaterelease deploy7. Configure the DNS and certificates
Configure DNS records and TLS certificates for your domain to make the solution secure and accessible.-
Register a fully qualified domain name (FQDN) for the frontend, for example, .
example.com -
Point the DNS record to the external IP or hostname of the Traefik load balancer. To find this information, run this command:
kubectl get svc -n <namespace> traefik
- Configure a TLS certificate for the domain. You can use the Traefik ingress annotations in the manifest to reference your certificate, or configure it through your load balancer.