Run agentbloat with Helm
The chart/ installs an agentbloat Deployment, named
after the release, whose pod runs sleep infinity so you can open shells in it.
- Images
- GHCR
ghcr.io/hambn/agentbloat - Docker Hub
docker.io/hambn/agentbloat
- GHCR
- Use case
- Long-lived cluster workspace from a Helm chart
On this page
Prerequisites
- Helm 3 and a Kubernetes cluster.
Open a shell
Shell
helm install agentbloat ./chart
kubectl exec -it deploy/agentbloat -- zsh -lRun cd /workspace, then any agent, and sign in from its prompt.
Values
| Value | Default | Purpose |
|---|---|---|
image.repository |
ghcr.io/hambn/agentbloat |
Image repository. |
image.tag |
ubuntu-browser |
Image tag. Set ubuntu-browser@sha256:<digest> to pin one build. |
image.pullPolicy |
Always |
Pull policy. |
replicaCount |
1 |
Number of pods. Each has its own /workspace. |
command |
["sleep", "infinity"] |
Keeps the pod running for kubectl exec. |
resources |
250m CPU and 512Mi requested; 2 CPU and 4Gi limit | Container resources. |
Workspace
/workspace is an emptyDir that is removed with the pod, and agent logins reset
whenever the container restarts. Edit
chart/templates/deployment.yaml to mount
persistent volumes.
Files
chart/Chart.yamlholds the chart metadata.chart/values.yamlholds the defaults above.chart/templates/deployment.yamldefines the non-root Deployment.
Cleanup
Shell
helm uninstall agentbloatFile contents
chart/Chart.yaml6 lines
apiVersion: v2
name: agentbloat
description: Current AI coding agent CLIs on devbox
type: application
version: 0.2.0
appVersion: "ubuntu-browser"chart/values.yaml15 lines
image:
repository: ghcr.io/hambn/agentbloat
tag: ubuntu-browser
pullPolicy: Always
replicaCount: 1
command: ["sleep", "infinity"]
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "2"
memory: 4Gichart/templates/deployment.yaml43 lines
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
labels:
app.kubernetes.io/name: agentbloat
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: agentbloat
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: agentbloat
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
containers:
- name: agentbloat
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: {{ .Values.command | toJson }}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
- name: workspace
mountPath: /workspace
volumes:
- name: workspace
emptyDir: {}