CleanStart Helm charts directly replace Bitnami charts with known differences and testing checklists for each swap. CleanStart images are 100% API-compatible with Bitnami but offer 10x smaller images, FIPS compliance, real-time vulnerability scanning, and cryptographic attestations.
Quick Compatibility Matrix
Application | Bitnami Chart | CleanStart Replacement | Image Reduction | FIPS Ready | Drop-In Ready |
|---|---|---|---|---|---|
Apache | bitnami/apache | cleanstart/apache | 80% smaller | ✅ | ✅ |
NGINX | bitnami/nginx | cleanstart/nginx | 75% smaller | ✅ | ✅ |
PostgreSQL | bitnami/postgresql | cleanstart/postgresql | 70% smaller | ✅ | ✅ |
MySQL | bitnami/mysql | cleanstart/mysql | 65% smaller | ✅ | ✅ |
Redis | bitnami/redis | cleanstart/redis | 80% smaller | ✅ | ✅ |
MongoDB | bitnami/mongodb | cleanstart/mongodb | 75% smaller | ✅ | ✅ |
Kafka | bitnami/kafka | cleanstart/kafka | 70% smaller | ✅ | ✅ |
RabbitMQ | bitnami/rabbitmq | cleanstart/rabbitmq | 72% smaller | ✅ | ✅ |
Apache: Bitnami → CleanStart
Before (Bitnami)
helm install my-apache bitnami/apache \ --set auth.username=user \ --set auth.password=password123 \ --set containerSecurityContext.enabled=trueAfter (CleanStart)
helm install my-apache cleanstart/apache \ --set auth.username=user \ --set auth.password=password123 # Security context already enabled by default!Testing Checklist
Perform a Network Test with curl http://SERVICE_IP/, which should return the Apache welcome page. Verify Module Loading by running kubectl exec POD -- apachectl -M to check that mod_ssl, mod_rewrite, and mod_proxy are loaded. Test Configuration by mounting a ConfigMap with .htaccess and httpd.conf overrides and verifying it loads correctly. Compare Performance to ensure response times are faster due to the Alpine base image. Verify the Security Context by running kubectl exec POD -- id to confirm it's running as UID 65532. Test Storage by running kubectl exec POD -- ls -la /var/www/html if using persistent volumes.
Known Differences include the Base OS (Debian for Bitnami, Alpine for CleanStart, resulting in 80 percent smaller images). The UID differs (1001 for Bitnami, 65532 for CleanStart, which may affect filesystem permissions). Included modules differ (many for Bitnami, essential only for CleanStart, requiring custom module additions if needed). Package managers differ (apt for Bitnami, apk for CleanStart with different package names). Init systems differ (systemd for Bitnami, OpenRC for CleanStart, though startup behavior is identical).
PostgreSQL: Bitnami → CleanStart
Before (Bitnami)
helm install postgres bitnami/postgresql \ --set auth.username=myuser \ --set auth.password=mypassword \ --set auth.database=mydb \ --set persistence.size=10GiAfter (CleanStart)
helm install postgres cleanstart/postgresql \ --set auth.username=myuser \ --set auth.password=mypassword \ --set auth.database=mydb \ --set persistence.size=10Gi # Literally identical interface!Testing Checklist
Perform a Connection Test by running a test pod with psql and connecting to the database with psql -h postgres.default.svc.cluster.local -U myuser -d mydb -c "SELECT 1", which should return 1. Verify Database Functions by running CREATE TABLE, INSERT, and SELECT commands to ensure basic SQL operations work. Test Replication by checking that pods include a primary (postgres-0) and replicas (postgres-1, postgres-2), verifying WAL replication in logs. Verify Backup by checking that backup files appear in the destination (e.g., gsutil ls gs://my-backup-bucket) on the expected schedule. Test Restore by performing a pg_dump backup and verifying that standard psql restore commands work. Verify Security by running kubectl exec postgres-0 -- id, which should return uid=65532(appuser) gid=65532(appuser).
values.yaml Differences
# Bitnami (optional security config)securityContext: enabled: true runAsNonRoot: true runAsUser: 1001 # CleanStart (always secure, not configurable)# Security context hardcoded to:# - runAsNonRoot: true# - runAsUser: 65532# - capabilities: dropped ALL# - readOnlyRootFilesystem: trueResult: You can DELETE all securityContext blocks from Bitnami values — CleanStart handles it automatically.
MySQL: Bitnami → CleanStart
Before (Bitnami)
helm install mysql bitnami/mysql \ --set auth.rootPassword=rootpass \ --set auth.database=myapp \ --set auth.username=appuser \ --set auth.password=apppassAfter (CleanStart)
helm install mysql cleanstart/mysql \ --set auth.rootPassword=rootpass \ --set auth.database=myapp \ --set auth.username=appuser \ --set auth.password=apppassTesting Checklist
Perform a Connection Test using the mysql client to connect to the database running mysql -h mysql.default.svc.cluster.local -u appuser -papppass myapp -e "SELECT 1". Test SQL Commands by running mysql -u root -prootpass -e "SHOW DATABASES" to verify database operations. Verify Replication by checking that pods show mysql-0 as the primary and mysql-1, mysql-2 as secondaries. Verify Binary Logging by running mysql -u root -prootpass -e "SHOW MASTER STATUS" to confirm replication is enabled.
Known Differences
Feature | Bitnami | CleanStart | Impact |
|---|---|---|---|
Version | 8.0.x | 8.0.x (same) | None |
Base image | Debian | Alpine | 65% smaller |
Default charset | utf8mb4 | utf8mb4 | None |
InnoDB buffer pool | Auto-tuned | Auto-tuned | None |
Redis: Bitnami → CleanStart
Before (Bitnami)
helm install redis bitnami/redis \ --set auth.enabled=true \ --set auth.password=redispass \ --set replica.replicaCount=2After (CleanStart)
helm install redis cleanstart/redis \ --set auth.enabled=true \ --set auth.password=redispass \ --set replica.replicaCount=2Testing Checklist
Perform a Connection Test using redis-cli with redis-cli -h redis-master.default.svc.cluster.local -a redispass PING, which should return PONG. Test SET/GET operations by setting a key, retrieving it, and verifying the value. Verify Replication by running redis-cli -a redispass INFO replication and checking that the master shows the correct number of connected slaves. Verify Sentinel health (if enabled) by running redis-cli -p 26379 SENTINEL masters. Check Persistence by verifying that RDB snapshot files exist in /data with ls -la /data.
Known Differences
Feature | Bitnami | CleanStart | Impact |
|---|---|---|---|
Memory model | Same | Same | None |
Persistence | RDB/AOF | RDB/AOF (same) | None |
Sentinel | Supported | Supported | None |
Cluster mode | Supported | Supported | None |
Kafka: Bitnami → CleanStart
Before (Bitnami)
helm install kafka bitnami/kafka \ --set broker.replicaCount=3 \ --set zookeeper.enabled=true \ --set persistence.size=10GiAfter (CleanStart)
helm install kafka cleanstart/kafka \ --set broker.replicaCount=3 \ --set zookeeper.enabled=true \ --set persistence.size=10GiTesting Checklist
Check Broker Health by examining logs for "started" message indicating successful broker initialization. Create a Test Topic with 3 partitions and replication factor of 2. Test Producer/Consumer functionality by producing messages to the topic and consuming them from the beginning. Verify Broker Replication by describing the topic and confirming that all brokers are in the In-Sync Replicas (ISR) list. Verify Zookeeper Health by running the broker API versions command to confirm the Zookeeper connection is working.
Template values.yaml Comparison
Identical Between Bitnami and CleanStart
# These fields work identicallyauth: username: myuser password: mypassword persistence: enabled: true size: 10Gi storageClassName: default replica: replicaCount: 2 persistence: size: 10Gi service: type: ClusterIP port: 5432 metrics: enabled: trueFields to REMOVE (CleanStart Handles Automatically)
Remove the following fields from Bitnami values since CleanStart handles them automatically: securityContext fields (enabled, runAsNonRoot, runAsUser) since CleanStart always has secure context enabled with non-root running as UID 65532. podSecurityPolicy settings since CleanStart is compliant by default. containerSecurityContext configuration since it's always enabled.
Fields That Might Need Adjustment
# Check these - may differ by application:resources: # CleanStart defaults are tighter - adjust if needed requests: memory: "256Mi" # May be too low for production cpu: "100m" readinessProbe: # Defaults differ - test and verify initialDelaySeconds: 10 periodSeconds: 5Migration Playbook
Step 1: Backup Current Data by exporting all resources in the namespace and creating a database backup with the stateful service's backup command.
Step 2: Uninstall Bitnami Release using helm uninstall RELEASE_NAME -n NAMESPACE --keep-history to preserve the release history for potential rollback.
Step 3: Keep the PVC by ensuring the Persistent Volume Claim remains after helm uninstall so your data is preserved.
Step 4: Install CleanStart Chart using the values from the Bitnami installation but specifying the existing PVC claim with --set persistence.existingClaim=EXISTING_PVC_NAME.
Step 5: Verify Data Integrity by checking logs and running verification commands to ensure the data has been correctly migrated and the service is functioning properly.
Step 6: Update Clients by checking if service names changed (usually they don't) and updating any client applications if DNS names differ.
Zero-Downtime Migration (Optional)
For mission-critical services, implement a zero-downtime migration by first running parallel deployments temporarily with both Bitnami and CleanStart running simultaneously. Replicate data from the Bitnami instance to the new CleanStart instance. Switch traffic to CleanStart by patching the service selector to point to the CleanStart pods. Finally, uninstall the Bitnami release after confirming successful operation.
Rollback Procedure
If issues occur after migration, revert to the previous release using helm rollback RELEASE_NAME -n NAMESPACE. Monitor the rollback process by watching the statefulset status. Verify data integrity by running verification commands on the rolled-back pods.
Size Comparison Examples
PostgreSQL 15.2
Aspect | Bitnami | CleanStart | Reduction |
|---|---|---|---|
Image size | 250MB | 75MB | 70% |
Pull time (10Mbps) | 200s | 60s | 3.3x faster |
Storage (3 nodes) | 750MB | 225MB | 3x less |
Monthly egress (50 pulls) | 12.5GB | 3.75GB | 3.3x less |
Total Kubernetes Cluster Benefit
Storage saved: 50% (fewer large images), Network bandwidth: 60% reduction, Pull latency: 3-4x faster deployment, and Security: Real-time vulnerability updates vs. annual Bitnami patches.
Reference
For detailed Bitnami Helm chart value mappings and migration configuration options, see Helm Chart Reference.
