Install Server
Deploy the Admiral control plane in demo or production mode
This guide walks through deploying the Admiral server using the official Helm chart. Start with demo mode to get a working instance in minutes, then see Server Deployment for production planning.
Architecture overview
An Admiral deployment consists of these components:
| Component | Role | Demo mode | Production |
|---|---|---|---|
| Admiral Server | API, console, and orchestration engine | Helm-managed | Helm-managed |
| PostgreSQL | Platform state and metadata | Built-in subchart | External managed instance |
| Object Storage | Artifact and bundle persistence | Built-in MinIO subchart | External S3, S3-compatible, or GCS |
| Dex | OIDC authentication provider | Built-in (bundled templates) | External IdP (Okta, Azure AD, etc.) |
| Ingress | HTTP routing and TLS termination | NGINX via KinD | Your cluster's ingress or Gateway API |
Demo mode deployment
Demo mode provisions all dependencies as in-cluster services using a single demo-values.yaml file. It's designed for evaluation, local development, and learning the platform.
What you'll get
- A single-node Kubernetes cluster via KinD
- Admiral Server with debug logging and profiling enabled
- PostgreSQL and MinIO running as Helm subcharts
- Dex configured with a static demo user
- NGINX ingress routing everything through
http://admiral.127.0.0.1.nip.io
Automated setup
The fastest path is the included make dev target, which runs the full setup script:
git clone https://github.com/admiral-platform/admiral-helm.git
cd admiral-helm
make devThis single command:
- Creates a KinD cluster named
admiral(or reuses an existing one) - Installs the NGINX ingress controller
- Builds Helm chart dependencies (PostgreSQL, MinIO)
- Installs Admiral with
demo-values.yaml
When it completes, you'll see:
===========================================
Admiral is ready!
===========================================
URL: http://admiral.127.0.0.1.nip.io
Demo credentials:
Email: admin@example.com
Password: shipitnowThe ingress controller may take 1–2 minutes to become fully ready after the script completes. If the URL doesn't load immediately, wait and retry.
Manual setup
If you prefer to run each step yourself or need to customize the process:
Create the KinD cluster
kind create cluster --name admiral --config kind/cluster.yamlThe cluster config maps ports 80 and 443 from the container to your host and labels the node as ingress-ready:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.32.3
labels:
ingress-ready: "true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCPInstall the NGINX ingress controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl rollout status deployment ingress-nginx-controller \
--namespace ingress-nginx \
--timeout=120sBuild chart dependencies
helm dependency build charts/admiralThis pulls the PostgreSQL and MinIO subcharts into charts/admiral/charts/.
Install Admiral
helm upgrade --install admiral charts/admiral \
-f charts/admiral/demo-values.yaml \
--namespace default \
--wait \
--timeout 5mDemo values explained
The demo-values.yaml file enables all built-in components with lightweight resource limits:
# Ingress: routes traffic through NGINX on a nip.io hostname
ingress:
enabled: true
className: nginx
host: admiral.127.0.0.1.nip.io
# Server: debug logging and profiling for development
server:
logLevel: debug
enablePprof: true
# Database: built-in PostgreSQL with minimal storage
postgresql:
enabled: true
auth:
password: "shipitnow"
persistence: 512Mi
# Object storage: built-in MinIO with minimal storage
minio:
enabled: true
rootPassword: "shipitnow"
persistence: 512Mi
# Authentication: Dex with a static demo user
oauth2:
demoPassword: "shipitnow"
dex:
enabled: true
resources:
requests:
cpu: 25m
memory: 32Mi
# Server resource limits
admiral:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 256MiSign in
- Open http://admiral.127.0.0.1.nip.io in your browser
- Click Log in with Email
- Enter the demo credentials:
- Email:
admin@example.com - Password:
shipitnow
- Email:
If you didn't set oauth2.demoPassword explicitly, the chart auto-generates a random password. Retrieve it with:
kubectl get secret admiral-oauth2 \
-o jsonpath='{.data.dex-demo-password}' | base64 -d; echoVerify the deployment
Check that all pods are running:
kubectl get podsYou should see pods for Admiral Server, PostgreSQL, MinIO, and Dex, all in Running status.
Verify the API is responding:
curl -s http://admiral.127.0.0.1.nip.io/healthzTear down
When you're done evaluating:
make dev-downOr manually:
kind delete cluster --name admiralWhat's next
- Bootstrap your first cluster. Connect a Kubernetes cluster to Admiral by deploying the cluster agent.
- Server Deployment. Plan and configure a production-grade deployment with external services.
- Authentication Model. Understand how OIDC, tokens, and access control work together.