Helm 3 stores each release revision as a Secret of type helm.sh/release.v1 in the namespace the release is installed into, named sh.helm.release.v1.RELEASE.vN. The payload is the rendered manifest, gzipped and base64 encoded.
This has two operational consequences. A very large chart, typically one that vendors CRDs, can exceed the size limit the API server enforces for a single object and fail with Request entity too large or etcdserver: request is too large on install, and the fix is to move CRDs to the crds/ directory, which Helm applies without storing in the release. Second, anyone with read access to Secrets in the namespace can read the full rendered manifest, including any Secret values the chart generated.
Helm keeps the last ten revisions by default and prunes older ones; --history-max on helm upgrade changes that. Deleting these Secrets by hand makes the release invisible to Helm while the workloads keep running, which is a recoverable but unpleasant state.