An operator that manages Castware components.
- Generate an api key in console
- Set the environment variable
API_KEYwith the generated key - Set the
API_URLenvironment variable to the api url of the environment where you generated the api key - Run
make run-local
Sample custom resources for cluster and component are generated in local/samples.
- Run
make updeploy
Ignore the error about the missing castware-operator-controller-manager deployment.
How to run castware-operator in local kind cluster using local chart ./charts/castai-castware-operator
-
Create Kind cluster:
kind create cluster --name castware-operator
-
Set required environment variables:
export API_KEY="your-api-key-from-console" export API_URL="https://api.cast.ai" # or your environment URL export API_KEY_BASE64=$(echo -n "$API_KEY" | base64)
-
Install operator in Kind cluster:
./local/install-local.sh
This script will:
- Build the operator binary (
make build) - Build Docker image (
make docker-build) - Load image into Kind cluster
- Install Helm chart with local image
- Create default Cluster and Component resources
- Build the operator binary (
After making code changes, quickly reload the operator without full reinstall:
./local/reload-operator.shThis script will:
- Rebuild operator binary and Docker image
- Load new image into Kind cluster
- Restart the operator deployment
- Wait for rollout to complete
Benefits:
- ~30 seconds vs ~2 minutes for full reinstall
- Preserves existing CRs (Cluster and Components)
- No need to delete/recreate resources
# Watch pods
kubectl get pods -n castai-agent -w
# View operator logs
kubectl logs -n castai-agent -l app.kubernetes.io/name=castware-operator -f
# Check Cluster CR status
kubectl get cluster -n castai-agent -o yaml
# Check Helm release status
helm status castware-operator -n castai-agent# Uninstall Helm release
helm uninstall castware-operator -n castai-agent
# Delete Kind cluster
kind delete cluster --name castware-operatorkubectl apply -f local/registry.yaml
kubectl wait --for=condition=ready pod -l app=chartmuseum -n registry --timeout=60skubectl port-forward -n registry svc/chartmuseum 5001:8080 &helm repo add castai-helm http://localhost:5001/helm-charts
helm repo updatecd charts
# Package the chart (update version in Chart.yaml first if needed)
helm package ./castai-castware-operator
# Push to ChartMuseum
curl --data-binary "@castware-operator-<version_number>.tgz" http://localhost:5001/helm-charts/api/charts
# Verify
curl -s http://localhost:5001/helm-charts/api/charts | jq 'keys'# Add public repo
helm repo add castai-public https://castai.github.io/helm-charts
helm repo update
# Pull and push to local registry
helm pull castai-public/castai-agent --version 0.127.0
helm pull castai/castai-spot-handler --version 0.29.0
curl --data-binary "@castai-agent-0.127.0.tgz" http://localhost:5001/helm-charts/api/charts
curl --data-binary "@castai-spot-handler-0.29.0.tgz" http://localhost:5001/helm-charts/api/charts - Push at least two versions of
castware-operatorto the local registry - Install the operator with the older version:
helm upgrade --install castware-operator castai-helm/castware-operator \ --namespace castai-agent --create-namespace \ --set defaultCluster.helmRepoURL="http://chartmuseum.registry.svc.cluster.local:8080/helm-charts" \ --version "0.1.0" (...) - The operator will use the in-cluster URL (
chartmuseum.registry.svc.cluster.local:8080) for self-upgrade - Trigger upgrade via CAST AI action or manually update the Cluster CR