This chart was created as a drop-in replacement for the Bitnami Memcached chart, using only free and open-source components.
- Image: Official
memcached:1.6.39-alpinefrom Docker Hub - Exporter:
prom/memcached-exporter:v0.15.4from Docker Hub - Service: Headless service by default for StatefulSet pattern
- No Dependencies: Removed Bitnami common library
helm install my-memcached ./memcachedThis creates:
- 1 Memcached pod
- Headless service for direct pod access
- ServiceAccount with minimal permissions
helm install memcached-dev ./memcached \
--set replicaCount=1 \
--set resources.requests.memory=128Mi \
--set resources.requests.cpu=100mhelm install memcached-prod ./memcached \
--values values-production.yaml \
--namespace memcached \
--create-namespacehelm install memcached ./memcached \
--set metrics.enabled=true \
--set metrics.serviceMonitor.enabled=true \
--set metrics.serviceMonitor.additionalLabels.prometheus=kube-prometheushelm install memcached ./memcached \
--set extraArgs[0].name=max-memory \
--set extraArgs[0].value=1024This sets Memcached to use 1GB of memory.
helm install memcached ./memcached \
--set replicaCount=3 \
--set podAntiAffinityPreset=hard \
--set resources.requests.memory=512Mihelm install memcached ./memcached \
--set image.registry=my-registry.com \
--set image.repository=my-memcached \
--set image.tag=custom-tagThe headless service provides direct access to each pod:
<release-name>-memcached-headless.<namespace>.svc.cluster.local:11211
Example with release name my-cache in namespace default:
my-cache-memcached-headless.default.svc.cluster.local:11211
# Run a test pod
kubectl run -it --rm memcached-client --image=memcached:1.6.39-alpine -- sh
# Inside the pod, test connection
telnet my-cache-memcached-headless.default.svc.cluster.local 11211
# Try some commands
set test 0 0 5
hello
get test
quit- Export data if needed (Memcached is a cache, typically okay to lose)
- Delete Bitnami release:
helm uninstall old-memcached
- Install this chart:
helm install memcached ./memcached -f my-values.yaml
- Scale down Bitnami deployment:
kubectl scale statefulset old-memcached --replicas=0
- Install this chart with same release name
- Update application connection strings if needed
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: 30skubectl port-forward svc/memcached 9150:9150
curl http://localhost:9150/metricsImport Grafana dashboard ID: 37 (Memcached Overview)
kubectl get pods -l app.kubernetes.io/name=memcachedkubectl logs -l app.kubernetes.io/name=memcachedkubectl get svc -l app.kubernetes.io/name=memcached
kubectl describe svc memcached-headlesskubectl exec -it memcached-0 -- shIssue: Pods not starting
# Check events
kubectl describe pod memcached-0
# Common causes:
# - Resource limits too low
# - Image pull issues
# - Security context conflictsIssue: Cannot connect to Memcached
# Verify service endpoints
kubectl get endpoints memcached-headless
# Test from another pod
kubectl run -it --rm test-pod --image=busybox -- telnet memcached-headless 11211Add Memcached command-line arguments:
extraArgs:
- name: max-memory
value: "2048"
- name: conn-limit
value: "2048"
- name: threads
value: "8"
- name: max-item-size
value: "2m"Already configured with best practices:
- Non-root user (UID 11211)
- Read-only root filesystem
- Dropped capabilities
- No privilege escalation
Create a PDB for production:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: memcached-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app.kubernetes.io/name: memcachedhelm uninstall memcachedTo also delete PVCs if persistence was enabled:
kubectl delete pvc -l app.kubernetes.io/name=memcachedFor issues and questions:
- Check the README.md for full configuration options
- Review values.yaml for all available parameters
- Consult official Memcached documentation: https://memcached.org/