Skip to main content

Deployment on Kubernetes

Step-by-step guide for deploying the Milestone data collection agent on a customer-managed Kubernetes cluster.

1. Prerequisites

1.1 Kubernetes Cluster and Namespace

  • Kubernetes cluster version ≥ 1.24
  • Helm 3.10+ on the workstation running the install
  • A dedicated namespace — suggested: milestone-dca
  • Namespace-admin access for whoever runs helm install

KEDA lets workers scale to zero when idle and burst during collection. Install cluster-wide:

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda -n keda-system --create-namespace

Verify:

kubectl get pods -n keda-system
kubectl get crd scaledobjects.keda.sh

1.3 Pre-Engagement: Send Us Your Cluster Details

Run these and send output to Milestone before the install:

kubectl get sc
kubectl get crd scaledobjects.keda.sh
kubectl get crd servicemonitors.monitoring.coreos.com
kubectl get priorityclass
kubectl version --short

1.4 StorageClasses

Two StorageClasses required:

  • ReadWriteOnce (RWO) — for coordinator local state. E.g. gp3 (AWS), pd-standard (GCP). Set via persistence.storageClass.
  • ReadWriteMany (RWX) — for shared worker storage. E.g. efs-sc (AWS), filestore-csi (GCP). Set via distributed.sharedStorage.storageClass.

1.5 Container Image

Option A (recommended): Mirror evno/milestone-data-collection-agent:<tag> to your internal registry and create an imagePullSecret.

Option B: Whitelist registry-1.docker.io for DockerHub egress.

1.6 Egress Allowlist

DCA pods need outbound HTTPS (port 443) to:

  • Container image registry
  • upload.mstone.ai (default upload destination)
  • Your Git provider APIs
  • *.atlassian.net (if using Jira)
  • GenAI tool endpoints: cursor.com, api.anthropic.com, api.github.com/copilot, api.openai.com

1.7 Node Capacity

At peak: ~34 CPU / 70 GiB memory:

  • 4— git-heavy workers — 32 CPU / 64 GiB req / 128 GiB limit
  • Baseline — ~2 CPU / 6 GiB req / 12 GiB limit
  • +30% rolling update headroom

1.8 Credentials and Configuration

Create the secret before install:

kubectl create secret generic milestone-dca-tokens \
--namespace milestone-dca \
--from-literal=github-token='ghp_...' \
--from-literal=presign-api-key='...'

1.9 Optional: Prometheus Integration

If you run Prometheus Operator, ServiceMonitor is registered automatically. If not, disable it:

serviceMonitor:
enabled: false