Skip to main content
Version: Next

Configuration

This guide covers how to configure Bison for your specific environment and requirements.

Helm Chart Configuration​

Bison is configured primarily through Helm values. You can customize the installation by providing a values.yaml file or using --set flags.

Key Configuration Parameters​

ParameterDescriptionDefaultExample
auth.enabledEnable authenticationfalsetrue
auth.admin.usernameAdmin usernameadminadmin
auth.admin.passwordAdmin password (must be non-default when auth.enabled=true)""changeme
apiServer.replicaCountAPI server replicas (safe to raise: scheduler uses leader election)23
apiServer.image.repositoryAPI server imageghcr.io/supermarioyl/bison/api-server-
apiServer.image.tagAPI server image tag(chart appVersion)latest
apiServer.autoscaling.enabledEnable HPA for the API server (then replicaCount is ignored)falsetrue
apiServer.podDisruptionBudget.enabledKeep min replicas available during node drainsfalsetrue
webUI.replicaCountWeb UI replicas23
webUI.image.repositoryWeb UI imageghcr.io/supermarioyl/bison/web-ui-
webUI.image.tagWeb UI image tag(chart appVersion)latest
webUI.autoscaling.enabledEnable HPA for the Web UIfalsetrue
networkPolicy.enabledRestrict api-server ingress to web-ui pods + release namespacefalsetrue
dependencies.opencost.apiUrlOpenCost API endpointhttp://opencost.opencost.svc.cluster.local:9003Custom URL

Example Custom Values​

Create a custom-values.yaml file:

# Authentication
auth:
enabled: true
admin:
username: admin
password: MySecurePassword123

# API Server
apiServer:
replicaCount: 3
image:
tag: 0.0.12
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 512Mi

# Web UI
webUI:
replicaCount: 3
image:
tag: 0.0.12
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi

# OpenCost Integration
dependencies:
opencost:
enabled: true
apiUrl: http://opencost.opencost.svc.cluster.local:9003

# Node Selection (optional)
nodeSelector:
node-role.kubernetes.io/control-plane: ""

# Tolerations (optional)
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule

Install with custom values:

helm install bison oci://ghcr.io/supermarioyl/charts/bison \
--version 0.0.12 \
--namespace bison-system \
--create-namespace \
--values custom-values.yaml

Billing Configuration​

Billing settings are configured through the Web UI or API after installation.

Access Billing Configuration​

  1. Via Web UI:

    • Navigate to Settings > Billing Configuration
    • Set pricing for CPU, Memory, GPU, and other resources
    • Configure currency and billing intervals
  2. Via API:

    curl -X POST http://localhost:8080/api/v1/billing/config \
    -H "Content-Type: application/json" \
    -d '{
    "enabled": true,
    "currency": "USD",
    "pricing": {
    "cpu": 0.05,
    "memory": 0.01,
    "nvidia.com/gpu": 2.50
    },
    "billingInterval": "hourly"
    }'

Billing Parameters​

ParameterDescriptionExample
enabledEnable/disable billingtrue
currencyCurrency for billingUSD, CNY, EUR
pricing.cpuCPU price per core-hour0.05
pricing.memoryMemory price per GB-hour0.01
pricing["nvidia.com/gpu"]GPU price per GPU-hour2.50
billingIntervalBilling aggregation periodhourly, daily
lowBalanceThresholdWarning threshold (%)20
suspendThresholdAuto-suspend threshold (%)5

Example Billing Configuration​

{
"enabled": true,
"currency": "USD",
"pricing": {
"cpu": 0.05,
"memory": 0.01,
"nvidia.com/gpu": 2.50,
"nvidia.com/mig-1g.5gb": 0.50,
"nvidia.com/mig-2g.10gb": 1.00
},
"billingInterval": "hourly",
"lowBalanceThreshold": 20,
"suspendThreshold": 5,
"alertChannels": ["webhook", "dingtalk"]
}

Team Configuration​

Creating Teams​

Teams can be created through the Web UI or API:

Via Web UI:

  1. Navigate to Teams page
  2. Click Create Team
  3. Set team name, quota, and initial balance

Via API:

curl -X POST http://localhost:8080/api/v1/teams \
-H "Content-Type: application/json" \
-d '{
"name": "ml-team",
"description": "Machine Learning Team",
"quota": {
"cpu": "20",
"memory": "64Gi",
"nvidia.com/gpu": "4"
},
"balance": 1000.00
}'

Team Quotas​

Team quotas define resource limits:

quota:
cpu: "20" # 20 CPU cores
memory: "64Gi" # 64 GB RAM
nvidia.com/gpu: "4" # 4 GPUs
storage: "500Gi" # 500 GB storage

Team Balance Management​

Set initial balance and configure auto-recharge:

{
"balance": 1000.00,
"autoRecharge": {
"enabled": true,
"amount": 500.00,
"schedule": "monthly",
"threshold": 100.00
}
}

Alert Configuration​

Configure multi-channel alerts for low balance and quota warnings.

Webhook Alerts​

{
"type": "webhook",
"enabled": true,
"url": "https://your-webhook-endpoint.com/alerts",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
},
"template": {
"title": "Bison Alert",
"message": "Team {{.TeamName}} balance is {{.Balance}}"
}
}

DingTalk Alerts​

{
"type": "dingtalk",
"enabled": true,
"webhook": "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN",
"secret": "YOUR_SECRET"
}

WeChat Work Alerts​

{
"type": "wechat",
"enabled": true,
"corpid": "YOUR_CORP_ID",
"corpsecret": "YOUR_CORP_SECRET",
"agentid": 1000001
}

OpenCost Integration​

Configure OpenCost connection:

Check OpenCost Connectivity​

# Test OpenCost API
kubectl port-forward -n opencost svc/opencost 9003:9003
curl http://localhost:9003/healthz

# Test allocation API
curl http://localhost:9003/allocation/compute?window=1d

Update OpenCost URL​

If OpenCost is deployed in a different namespace or with a different service name:

helm upgrade bison oci://ghcr.io/supermarioyl/charts/bison \
--version 0.0.12 \
--set dependencies.opencost.apiUrl=http://my-opencost.custom-namespace.svc:9003 \
--set dependencies.opencost.enabled=true \
--namespace bison-system

Authentication & OIDC​

Enable authentication and integrate with your SSO provider:

Basic Authentication​

auth:
enabled: true
admin:
username: admin
password: SecurePassword123

OIDC Integration​

auth:
enabled: true
oidc:
enabled: true
issuerURL: https://your-oidc-provider.com
clientID: bison-client-id
clientSecret: your-client-secret
redirectURL: https://bison.example.com/callback

Environment Variables​

Additional configuration can be provided via environment variables:

VariableDescriptionDefault
KUBECONFIGPath to kubeconfig fileIn-cluster config
OPENCOST_URLOpenCost API URLhttp://opencost.opencost.svc.cluster.local:9003
AUTH_ENABLEDEnable authenticationfalse
ADMIN_USERNAMEAdmin usernameadmin
ADMIN_PASSWORDAdmin password. Must not be admin when AUTH_ENABLED=true — the server refuses to start with the default.admin (dev only)
JWT_SECRETJWT signing key. Required (non-default) when AUTH_ENABLED=true — startup is refused otherwise.(dev default)
CORS_ALLOWED_ORIGINSComma-separated CORS allowlist; empty allows all origins(empty)
LEADER_ELECTION_ENABLEDRun the billing / auto-recharge / alert scheduler under a Kubernetes lease so it executes on exactly one replica (safe to scale apiServer.replicaCount)true
LOG_LEVELLogging levelinfo

The billing interval is configured in the billing settings (hours), not via an environment variable.

Set environment variables in Helm values:

apiServer:
env:
- name: LOG_LEVEL
value: debug
- name: BILLING_INTERVAL
value: 5m

Advanced Configuration​

Custom Resource Pricing​

Price any Kubernetes resource:

{
"pricing": {
"cpu": 0.05,
"memory": 0.01,
"nvidia.com/gpu": 2.50,
"amd.com/gpu": 2.00,
"ephemeral-storage": 0.001,
"custom.io/fpga": 5.00
}
}

Multi-Cluster Support​

Deploy Bison in each cluster with shared billing:

# Cluster A
apiServer:
clusterName: prod-us-west

# Cluster B
apiServer:
clusterName: prod-us-east

Next Steps​