From 61a0cb5434ae475b8a716c2e23e1cdcee6c732f9 Mon Sep 17 00:00:00 2001 From: tahahawa Date: Tue, 15 Apr 2025 15:40:00 -0400 Subject: [PATCH 1/3] Create ADR template --- adr/000-ADR-Template.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 adr/000-ADR-Template.md diff --git a/adr/000-ADR-Template.md b/adr/000-ADR-Template.md new file mode 100644 index 0000000..b9592cb --- /dev/null +++ b/adr/000-ADR-Template.md @@ -0,0 +1,33 @@ +# Architecture Decision Record: \ + +Name: \ + +Initial Date: \ + +Last Updated Date: \ + +## Status + +Proposed/Pending/Accepted/Implemented + +## Context + +The problem, background, the "why" behind this decision/discussion + +## Decision + +Proposed solution to the problem + +## Rationale + +Reasoning behind the decision + +## Consequences + +Pros/Cons of chosen solution + +## Alternatives considered + +Pros/Cons of various proposed solutions considered + +## Additional Notes -- 2.39.5 From 564c00660bb697e6c1b0a4b0b13864a9242b2e30 Mon Sep 17 00:00:00 2001 From: tahahawa Date: Tue, 15 Apr 2025 15:54:22 -0400 Subject: [PATCH 2/3] WIP --- adr/009-helm-and-kustomize-handling.md | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 adr/009-helm-and-kustomize-handling.md diff --git a/adr/009-helm-and-kustomize-handling.md b/adr/009-helm-and-kustomize-handling.md new file mode 100644 index 0000000..eacd876 --- /dev/null +++ b/adr/009-helm-and-kustomize-handling.md @@ -0,0 +1,52 @@ +# Architecture Decision Record: Helm and Kustomize Handling + +Name: Taha Hawa + +Initial Date: 2025-04-15 + +Last Updated Date: 2025-04-15 + +## Status + +Proposed + +## Context + +We need to find a way to handle Helm charts and deploy them to a Kubernetes cluster. Helm has a lot of extra functionality that we may or may not need. Kustomize handles Helm charts by inflating them and applying them as vanilla Kubernetes yaml. How should Harmony handle it? + +## Decision + +In order to move quickly and efficiently, Harmony should handle Helm charts similarly to how Kustomize does: invoke Helm to inflate/render the charts with the needed inputs, and deploy the rendered artifacts to Kubernetes as if it were vanilla manifests. + +## Rationale + + +## Consequences + +Pros: +- Much easier (and faster) than implementing all of Helm's featureset +- Re-use code from K8sResource already present in Harmony +- Harmony retains more control over how the deployment goes after rendering (i.e. can act like Kustomize, or leverage Kustomize itself to modify deployments after rendering/inflation) +- Reduce (unstable) surface of dealing with Helm binary + +Cons: +- Lose some Helm functionality +- Potential lose some compatibility with Helm + +## Alternatives considered + +- Implement Helm fully + - Pros: + - Retain full compatibility with Helm as a tool + - Retain full functionality of Helm + - Cons: + - Longer dev time + - More complex integration + - Dealing with larger (unstable) surface of Helm as a binary +- Leverage Kustomize to deal with Helm charts + - Pros: + - + - Cons: + - + +## Additional Notes -- 2.39.5 From 26d945f54a0862b6c5eecf5fd08baf4d34ae7ede Mon Sep 17 00:00:00 2001 From: tahahawa Date: Tue, 15 Apr 2025 18:11:58 -0400 Subject: [PATCH 3/3] Finish ADR proposal --- adr/009-helm-and-kustomize-handling.md | 43 ++++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/adr/009-helm-and-kustomize-handling.md b/adr/009-helm-and-kustomize-handling.md index eacd876..dbebb8a 100644 --- a/adr/009-helm-and-kustomize-handling.md +++ b/adr/009-helm-and-kustomize-handling.md @@ -20,33 +20,42 @@ In order to move quickly and efficiently, Harmony should handle Helm charts simi ## Rationale +A lot of Helm's features aren't strictly necessary and would add unneeded overhead. This is likely the fastest way to go from zero to deployed. Other tools (e.g. Kustomize) already do this. Kustomize has tooling for patching and modifying k8s manifests before deploying, and Harmony should have that power too, even if it's not what Helm typically intends. + +Perhaps in future also have a Kustomize resource in Harmony? Which could handle Helm charts for Harmony as well/instead. ## Consequences -Pros: +**Pros**: + - Much easier (and faster) than implementing all of Helm's featureset -- Re-use code from K8sResource already present in Harmony +- Can potentially re-use code from K8sResource already present in Harmony - Harmony retains more control over how the deployment goes after rendering (i.e. can act like Kustomize, or leverage Kustomize itself to modify deployments after rendering/inflation) - Reduce (unstable) surface of dealing with Helm binary -Cons: +**Cons**: + - Lose some Helm functionality -- Potential lose some compatibility with Helm +- Potentially lose some compatibility with Helm ## Alternatives considered -- Implement Helm fully - - Pros: - - Retain full compatibility with Helm as a tool - - Retain full functionality of Helm - - Cons: - - Longer dev time - - More complex integration - - Dealing with larger (unstable) surface of Helm as a binary -- Leverage Kustomize to deal with Helm charts - - Pros: - - - - Cons: - - +- ### Implement Helm resouce/client fully in Harmony + - **Pros**: + - Retain full compatibility with Helm as a tool + - Retain full functionality of Helm + - **Cons**: + - Longer dev time + - More complex integration + - Dealing with larger (unstable) surface of Helm as a binary +- ### Leverage Kustomize to deal with Helm charts + - **Pros**: + - Already has a good, minimal inflation solution built + - Powerful post-processing/patching + - Can integrate with `kubectl` + - **Cons**: + - Unstable binary tool/surface to deal with + - Still requires Helm to be installed as well as Kustomize + - Not all Helm features supported ## Additional Notes -- 2.39.5