Open billimek opened 1 year ago
Had some good insight from onedr0p in this thread, and did some experimentation trying an approach with and without kustomization.yaml
s everywhere:
inside ./kube-system
,
external-secrets
├── 1password
│ ├── 1password.yaml
│ ├── clustersecretstore.yaml
│ └── kustomization.yaml
├── chart
│ ├── external-secrets.yaml
│ └── kustomization.yaml
├── ks.yaml
└── kustomization.yaml
... works as intended/expected where the ks.yaml
is a flux kustomization with proper dependency settings.
When trying the same thing without the (IMO redundant kustomization.yamls
),
external-secrets
├── 1password
│ ├── 1password.yaml
│ └── clustersecretstore.yaml
├── chart
│ └── external-secrets.yam
└── ks.yaml
The flux apply ordering is not applied properly. This suggests that having kustomization.yaml
files is a hard requirement.
Over in the flux slack, Kingdon B provided some additional insight (thread).
He noted that, in my case here, there is still the top-level flux kustomization referencing the repo root and as such there are two different flux kustomization's applying both on the external-secrets
directory. This is why things break without the presence of the kustomize.yaml
files, and this makes logical sense.
Given this information, there are likely three approaches to leveraging the flux ordering (dependsOn
) features:
kustomize.yaml
files everywhere - or at least everywhere in trees where you need to control the ordering. This probably really means everywhere though. It appears that most of the k8s-at-home folks have either submitted that this is the way forward or simply copied from each-other this patternSomething about the need to reflect the actual directory/file structure in separate (kustomization.yaml
) really rubs me the wrong way and I would love to find a way around this problem without 'junking up' the repo with this cruft.
Will do deeper experiments with the new test cluster.
Another option that would avoid the necessity to let flux try to handle dependencies all-together, and resulting ugly hacks (IMO), would be to include required CRDs as part of the initial bootstrap process. This would be an extra one-time activity at cluster creation vs long-lasting poor structure.
Initially, CRDs that would be necessary to be in-place before flux installation would be:
Implementation would look like an additional set of steps to apply CRDs at cluster setup time, with extra reference (probably a single kustomization file) with reference to the version of externalized CRDs that could be revved automatically via mend.
For single-cluster home use, the official flux documentation showing an overly-complex mess of 'base', 'production', 'staging' per 'app', 'cluster' and 'infrastructure' seems like overkill to me. It's probably great for multiple different teams running against multiple clusters all sharing the same repo. This example is also dealing with the same complexities and difficulty organizing workloads (IMO).
Furthermore, needing to spew out over 100 nearly identical
kustomize.yaml
files everywhere doesn't seem very 'DRY'.The purpose of this issue is to explore if it is possible to leverage flux in a way that we can maintain a sane (to me) repo directory structure and still leverage features like dependsOn such that we can ensure that CRDs and other items are applied before dependent workloads.
Will likely tackle this as part of #2865