feat(lifecycle): add MinIO subchart with secure credential architecture for log archival (v0.8.0)#32
Merged
vigneshrajsb merged 4 commits intomainfrom Mar 3, 2026
Merged
Conversation
7 tasks
Adds MinIO as an optional Bitnami subchart to the lifecycle umbrella chart, enabling S3-compatible object storage for build and deploy log archival. When enabled, completed job logs are persisted in MinIO before the k8s Job pods are evicted or TTL-expired, allowing the UI to retrieve archived logs even after the live pods are gone. Changes: - Chart.yaml: add minio 14.8.5 subchart dependency (disabled by default) - Chart.yaml: bump chart version to 0.7.0 to trigger publish - values.yaml: add minio: section with defaults (20Gi persistence, 100m/256Mi requests) - templates/configmap.yaml: expose MINIO_ENDPOINT, MINIO_PORT, MINIO_BUCKET, MINIO_USE_SSL env vars when minio.enabled=true To enable: set minio.enabled=true and configure minio.auth.rootUser/rootPassword as secrets. The lifecycle app reads logArchival.enabled from global_config to gate actual archival calls. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…O subchart - Add secret-objectstore.yaml to manage MinIO/S3 credentials as a Kubernetes Secret instead of plaintext values - Add objectStoreSecretName and minioSvcEndpoint helper functions - Replace MINIO_* configmap keys with OBJECT_STORE_* keys and add SECRET_OBJECT_STORE_NAME; guard config behind minio.enabled - Add objectStore top-level values block for type/bucket/region/endpoint - Remove plaintext rootUser/rootPassword from minio.auth; wire existingSecret to the new object store secret - Add minio.fullnameOverride to allow custom service name resolution - Change configmap hook to pre-install,pre-upgrade - Upgrade MinIO subchart from 14.8.5 to 17.0.21 with bitnamilegacy images
… v0.8.0 - deployments.yaml: add envFrom secretRef for secrets.objectStore so OBJECT_STORE_ACCESS_KEY/SECRET_KEY are injected into all pods automatically - Chart.yaml: bump version to 0.8.0 (main landed 0.7.0) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9cb808e to
0a23f00
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Build and deploy job logs are permanently lost when k8s Job pods are evicted or TTL-expired (~24h). This PR adds MinIO as an optional in-cluster S3-compatible object store so logs can be archived at job completion time and retrieved even after live pods are gone. It also supports AWS S3 via IRSA for production environments.
Changes
Chart.yamlminio 17.0.21Bitnami subchart dependency (disabled by default); bump chart version → 0.8.0values.yamlobjectStore:section (type, endpoint, port, bucket, SSL, region); addsecrets.objectStoresection; addminio:subchart values; wireminio.auth.existingSecretto shared secrettemplates/secret-objectstore.yamlOBJECT_STORE_ACCESS_KEYandOBJECT_STORE_SECRET_KEY; shared by both the app and MinIO viaexistingSecrettemplates/configmap.yamlOBJECT_STORE_*env vars (no credentials); guarded byminio.enabledflag; addSECRET_OBJECT_STORE_NAME; hook changed topre-install,pre-upgrade; S3 mode validates requiredregiontemplates/deployments.yamlenvFrom: secretRefforsecrets.objectStore— injects credentials into all pods automaticallytemplates/_helpers.tpl..helper.objectStoreSecretNameand..helper.minioSvcEndpointhelpersCredential architecture
Credentials are not in the ConfigMap. They live exclusively in a Kubernetes Secret:
<release>-objectstore)OBJECT_STORE_TYPEOBJECT_STORE_ACCESS_KEYOBJECT_STORE_ENDPOINTOBJECT_STORE_SECRET_KEYOBJECT_STORE_PORTOBJECT_STORE_BUCKETOBJECT_STORE_USE_SSLSECRET_OBJECT_STORE_NAMEThe same secret is referenced by
minio.auth.existingSecret— MinIO and the app share one credential source with no duplication.How it works
minio.enabled: false). When disabled, the ConfigMap emits noOBJECT_STORE_*vars — no broken env vars pointing at a non-existent service.resource-policy: keep). Setsecrets.objectStore.accessKey/secretKeyin your override values or let the chart generate random values.objectStore.type: s3+objectStore.regionfor AWS S3 via IRSA — no static credentials needed.logArchival.enabledinglobal_configbefore making any object store calls — enabling the subchart alone is safe.Rollout
Then activate archival via global_config:
{ "logArchival": { "enabled": true, "retentionDays": 14 } }Test plan
helm templatewith defaults (minio.enabled=false) — noOBJECT_STORE_*vars in ConfigMaphelm template --set minio.enabled=true— ConfigMap hasOBJECT_STORE_*(no credentials), Secret hasOBJECT_STORE_ACCESS_KEY/SECRET_KEY, deployments haveenvFrom: secretRefhelm template --set objectStore.type=s3 --set objectStore.region=us-east-1— ConfigMap has S3 vars onlyhelm template --set objectStore.type=s3— fails withobjectStore.region is requirederrorRunning, bucketlifecycle-logsauto-created, app pods have credentials available as env vars🤖 Generated with Claude Code