Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
250 commits
Select commit Hold shift + click to select a range
d9791b2
wip
punkwalker Jun 3, 2025
401b45e
wip
punkwalker Jun 3, 2025
1dda815
add external-dns addon
punkwalker Jun 3, 2025
48a0e73
add cert-manager and argocd ingress
punkwalker Jun 3, 2025
74af5b7
disable redis for argocd
punkwalker Jun 3, 2025
ce0fb32
enable redis for argocd
punkwalker Jun 3, 2025
5e4d49b
add letsencrypt ClusterIssuer for cert-manager
punkwalker Jun 3, 2025
12d47d4
specify ingress specific values for argocd
punkwalker Jun 3, 2025
7818dbe
add keycloak addon
punkwalker Jun 4, 2025
ce22be5
refactor hub addons from Apps to AppSet
punkwalker Jun 5, 2025
2a61636
move github token externalsecret to argocd manifests
punkwalker Jun 6, 2025
0303b01
match ServerSideApply on github-token external secret
punkwalker Jun 6, 2025
2e29ed2
match argocd and external secret to AppSets
punkwalker Jun 6, 2025
63fcf4c
add keycloak addon
punkwalker Jun 6, 2025
a5e42cd
update ExternalSecrets to avoid Diffs
punkwalker Jun 6, 2025
f64bd3e
add keycloak config job to create users
punkwalker Jun 7, 2025
14ed10e
add argocd keycloak sso config job
punkwalker Jun 8, 2025
884d6cb
add backstage addon
punkwalker Jun 10, 2025
6a0fe7d
fix dataFromn extraction of backstage postres password
punkwalker Jun 10, 2025
37b0adf
fix dataFromn extraction of backstage postres password
punkwalker Jun 10, 2025
e472ed5
fix dataFromn extraction of backstage postres password
punkwalker Jun 10, 2025
9d75d97
fix backstage postgres sts
punkwalker Jun 10, 2025
6a9245c
fix backstage app config
punkwalker Jun 10, 2025
12cc78c
fix backstage env vars secret
punkwalker Jun 10, 2025
0d230d6
fix backstage db config
punkwalker Jun 10, 2025
d05a342
fix backstage argo workflow URL
punkwalker Jun 10, 2025
5f9661c
fix backstage rback template
punkwalker Jun 10, 2025
c23141a
add backstage ingress
punkwalker Jun 10, 2025
5604b73
add backstage ingress
punkwalker Jun 10, 2025
41f754f
update uninstall.sh
punkwalker Jun 10, 2025
f25effc
move backstage PVC to sts
punkwalker Jun 10, 2025
7beeda4
move backstage PVC to sts
punkwalker Jun 10, 2025
81dd746
restucture directories
punkwalker Jun 10, 2025
960ba6f
add keycloak password generation using eso
punkwalker Jun 11, 2025
ca65b91
fix keycloak external secret
punkwalker Jun 11, 2025
6249c1e
fix keycloak external secret
punkwalker Jun 11, 2025
b8a4859
fix keycloak external secret
punkwalker Jun 11, 2025
777f128
fix keycloak external secret
punkwalker Jun 11, 2025
f310e41
fix keycloak external secret
punkwalker Jun 11, 2025
d852a27
fix keycloak external secret
punkwalker Jun 11, 2025
c834184
fix backstage github integration secret
punkwalker Jun 11, 2025
e1c4fe3
fix backstage github integration secret
punkwalker Jun 11, 2025
c326f9b
disable argocd dex server
punkwalker Jun 11, 2025
18b873a
refactor install and uninstall script
punkwalker Jun 11, 2025
6ff47de
fix keycloak user password
punkwalker Jun 11, 2025
d0ea903
add argo workflows addon
punkwalker Jun 12, 2025
65859cd
fix cluster secret annotations
punkwalker Jun 12, 2025
863d407
fix cluster secret annotations
punkwalker Jun 12, 2025
09f8e21
fix argo workflow ingress
punkwalker Jun 12, 2025
6602ab4
fix argo workflow oidc config
punkwalker Jun 12, 2025
a79b6db
fix argo workflow oidc config
punkwalker Jun 12, 2025
7327591
add argo workflows admin rbac
punkwalker Jun 12, 2025
7005956
fix argo workflow external secret
punkwalker Jun 12, 2025
964d4c6
enable keycloak backchannel
punkwalker Jun 12, 2025
0bcc0e5
disable keycloak backchannel
punkwalker Jun 12, 2025
fbbfb47
set up order in keycloak resources
punkwalker Jun 12, 2025
e34141b
refactor appset chart deployment logic
punkwalker Jun 12, 2025
f5ea639
remove namespace resource from backstage chart
punkwalker Jun 12, 2025
c2aa344
enable preserveResourcesOnDeletion on AppSets
punkwalker Jun 12, 2025
a82cb2c
enable pathRouting option
punkwalker Jun 13, 2025
635b606
fix addon values file
punkwalker Jun 13, 2025
511704c
fix appset chart indent and addons values
punkwalker Jun 13, 2025
3fcf81a
fix ingress-nginx values
punkwalker Jun 13, 2025
86bb32f
fix ingress-nginx values
punkwalker Jun 13, 2025
1e4eb0c
fix ingress-nginx values
punkwalker Jun 13, 2025
d1759ce
fix annotations map for ingresses
punkwalker Jun 13, 2025
a06f7b3
add external-dns service annotation on ingress-nginx
punkwalker Jun 13, 2025
df7aa16
refactor bootstrapping logic
punkwalker Jun 16, 2025
b873cd4
refactor bootstrapping logic
punkwalker Jun 16, 2025
052269a
support path-routing on argocd
punkwalker Jun 17, 2025
f92b374
support path-routing on argocd
punkwalker Jun 17, 2025
2ce1768
support path-routing on argocd
punkwalker Jun 17, 2025
9893cba
support path-routing on argocd
punkwalker Jun 17, 2025
d9c8beb
fix appset chart
punkwalker Jun 17, 2025
29e459e
fix appset chart
punkwalker Jun 17, 2025
a62c12b
fix appset chart
punkwalker Jun 17, 2025
7c10ef7
fix appset chart
punkwalker Jun 17, 2025
01d3200
fix argo-cd-path-routing
punkwalker Jun 17, 2025
cf18ba8
fix cert-manager addon for path routing
punkwalker Jun 17, 2025
31b15d8
delay ingress creation for argocd until default cert is provisioned
punkwalker Jun 17, 2025
e8c3d31
fix argocd valuesObject
punkwalker Jun 17, 2025
1529c52
fix argocd valuesObject
punkwalker Jun 17, 2025
f0fa842
fix argocd valuesObject
punkwalker Jun 17, 2025
ae09b3a
fix argocd valuesObject
punkwalker Jun 17, 2025
c9149f0
refactor bootstrapping logic
punkwalker Jun 17, 2025
db900e0
refactor keycloak addon for path routing
punkwalker Jun 17, 2025
34cfc9d
fix keyloak internal url
punkwalker Jun 17, 2025
0345b02
fix keyloak internal url
punkwalker Jun 17, 2025
968ac4e
fix keyloak sso config job
punkwalker Jun 17, 2025
02a304a
fix argocd internal url in keycloak sso job
punkwalker Jun 17, 2025
be12896
refactor argocd oidc config
punkwalker Jun 17, 2025
0009741
refactor backstage addon for path routing
punkwalker Jun 17, 2025
42196f1
add sync wave to nginx service
punkwalker Jun 18, 2025
d7ca8ec
fix backstage ingress values
punkwalker Jun 18, 2025
173d031
fix backstage chart
punkwalker Jun 18, 2025
2b57258
support relative path on backstage
punkwalker Jun 18, 2025
037988a
support relative path on backstage
punkwalker Jun 18, 2025
0bdee0a
support relative path on backstage
punkwalker Jun 18, 2025
2ebe7f0
support relative path on backstage
punkwalker Jun 18, 2025
c399c2b
support relative path on backstage
punkwalker Jun 18, 2025
3306b88
support relative path on backstage
punkwalker Jun 18, 2025
4e07b83
update backstage image
punkwalker Jun 18, 2025
f865030
update backstage image
punkwalker Jun 18, 2025
622df4c
fix backstage keycloak integration
punkwalker Jun 18, 2025
dbeba30
fix backstage argocd integration
punkwalker Jun 18, 2025
4e42f47
fix backstage frontend URL
punkwalker Jun 18, 2025
ed23c5b
fix keycloak redirect url for backstage
punkwalker Jun 18, 2025
2363468
support relative path on argo workflows
punkwalker Jun 18, 2025
699238a
change external dns policy to sync to ensure it can add/remove records
punkwalker Jun 19, 2025
ca61e44
add crossplane addon
punkwalker Jun 19, 2025
7a4a322
fix keycloak cert namespace
punkwalker Jun 19, 2025
3160b94
remove enable-environment-configs flag from crossplane
punkwalker Jun 19, 2025
4478d54
restructure crossplane directory
punkwalker Jun 19, 2025
c8cddb9
add commonAnnotations to kustomization for xrd in crossplane addon
punkwalker Jun 19, 2025
d82890e
remove reduntant directories
punkwalker Jun 19, 2025
d58b989
fix backstage app config keycloak config
punkwalker Jun 19, 2025
4787635
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
4f7b128
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
4e45233
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
f628b81
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
4b2fef0
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
51cfc72
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
96a874f
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
8b5e79b
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
ae58d30
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
5847a2d
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
febbc4b
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
6bc18f9
fix argo workflows ingress for path routing
punkwalker Jun 19, 2025
142a6b3
make argocd install all resources from packages/crossplane/manifests …
punkwalker Jun 19, 2025
39337f7
make argocd install all resources from packages/crossplane/manifests …
punkwalker Jun 19, 2025
9a9e5a3
fix crossplane aws DeploymentRuntimeConfig
punkwalker Jun 19, 2025
856144d
fix crossplane aws DeploymentRuntimeConfig selector
punkwalker Jun 19, 2025
11a5c99
fix crossplane aws DeploymentRuntimeConfig selector
punkwalker Jun 19, 2025
88adb0d
fix provider-aws-s3 runtimeConfigRef
punkwalker Jun 19, 2025
1c62a50
specify serviceAccountName in DeploymentRuntimeConfig for crossplane …
punkwalker Jun 19, 2025
0415849
add generic ServiceAccount for provider-aws
punkwalker Jun 19, 2025
36f2085
fix generic ServiceAccount for provider-aws
punkwalker Jun 20, 2025
564420a
remove sync wave from crossplane custom manifests
punkwalker Jun 20, 2025
b83ba60
add sync wave from crossplane custom manifests
punkwalker Jun 20, 2025
c877806
remove crossplane custom manifests
punkwalker Jun 20, 2025
7d2a0a4
change password constraints for keycloak user
punkwalker Jun 20, 2025
dc9a555
add crossplane provider chart and refactor crossplane compositions
punkwalker Jun 23, 2025
e143d44
move cluster issuer to cert-manager extraObjects in helm values file
punkwalker Jun 23, 2025
1f46ccb
clean values.yamls of addons
punkwalker Jun 23, 2025
2a9a060
clean values.yamls of addons
punkwalker Jun 23, 2025
09940f0
remove selectors from addons
punkwalker Jun 23, 2025
4d520ac
fix AWS LBC Cluster name substitution
punkwalker Jun 23, 2025
89f8cf6
fix Argo Workflow values in AppSet
punkwalker Jun 23, 2025
d8bcd4c
fix crossplane registry url
punkwalker Jun 24, 2025
f8a02c5
refactor addons
punkwalker Jun 24, 2025
5af8122
add webhook url to backstage GH app
punkwalker Jun 24, 2025
ece6c2b
add backstage templates
punkwalker Jun 24, 2025
6a4e88a
fix backstage template location
punkwalker Jun 24, 2025
61e257e
add ARGOCD Password to backstage
punkwalker Jun 24, 2025
285a5af
add GH app for org and fix backstage skeleton
punkwalker Jun 24, 2025
391eeb6
add eksctl cluster creation
punkwalker Jun 24, 2025
a9181de
add eksctl cluster creation for auto mode
punkwalker Jun 24, 2025
bf11489
disable aws lbc for auto mode
punkwalker Jun 24, 2025
1eb4e70
remove reduntant directories
punkwalker Jun 24, 2025
1e2ca5f
remove sync wave from argocd ingress
punkwalker Jun 25, 2025
12a3aea
specify storageclass for keycloak pvc
punkwalker Jun 25, 2025
c6a9e35
specify storageclass for backstage pvc
punkwalker Jun 25, 2025
4cb016f
enable ServerSideDiff for crossplane-compositions
punkwalker Jun 25, 2025
4739bce
enable ServerSideDiff for crossplane-compositions
punkwalker Jun 25, 2025
d3dadb3
add sync wave for argocd ingress
punkwalker Jun 25, 2025
eb74c04
add sync wave for argocd ingress
punkwalker Jun 25, 2025
698834e
refactor scripts
punkwalker Jun 26, 2025
8c72161
refactor externalsecrets and add auto mode eksctl cluster config
punkwalker Jun 26, 2025
1b42897
fix terraform template
punkwalker Jun 26, 2025
7422935
fix terraform external secret IAM policy and config file
punkwalker Jun 26, 2025
d875290
fix config file
punkwalker Jun 26, 2025
0d9bdd3
fix config file
punkwalker Jun 26, 2025
3226caa
fix config file
punkwalker Jun 27, 2025
ed8951e
add note about path_routing value in config file
punkwalker Jun 27, 2025
c98cacb
fix argocd github app external secret
punkwalker Jun 27, 2025
a837395
add AWS LBC pod identity in terraform
punkwalker Jun 27, 2025
ef7c133
fix keycloak external secret
punkwalker Jun 27, 2025
4a9f5f3
fix backstage external secret
punkwalker Jun 27, 2025
7811daa
fix backstage external secret
punkwalker Jun 27, 2025
fd3b6f3
update cluster creation readme
punkwalker Jun 27, 2025
b13eb3f
update cluster creation readme
punkwalker Jun 27, 2025
9b0ff0a
update cluster creation readme
punkwalker Jun 27, 2025
7c06051
disable aws lbc for auto mode
punkwalker Jun 27, 2025
94c48ae
add gp3 ebs storagclass
punkwalker Jun 27, 2025
9b25724
dyanmic installation of AWS LBC based on cluster secret label for aut…
punkwalker Jun 27, 2025
31c0209
fix idpbuilder argocd addon values
punkwalker Jun 27, 2025
056f26a
fix argocd addon values
punkwalker Jun 27, 2025
1b34191
start main README
punkwalker Jun 27, 2025
ab9ad2c
start main README
punkwalker Jun 28, 2025
f31dc8b
start main README
punkwalker Jun 28, 2025
bd1d5f5
start main README
punkwalker Jun 28, 2025
e29a9cf
start main README
punkwalker Jun 28, 2025
d2d774d
fix idpbuilder argocd addon values
punkwalker Jun 28, 2025
b165776
add sync wave to gp3 ebs storagclass
punkwalker Jun 28, 2025
74339d8
fix utils.sh
punkwalker Jun 28, 2025
0e32889
temporarily switch to letsencrypt staging api
punkwalker Jun 28, 2025
be86c07
revert letsencrypt staging api
punkwalker Jun 28, 2025
1ffd23b
fix external-dns valuesObject
punkwalker Jul 1, 2025
677e607
allow external-dns filter zone based on ID
punkwalker Jul 1, 2025
1f1759e
update comments in config.yaml
punkwalker Jul 1, 2025
a959a60
disable ServerSideDiff for crossplane compositions
punkwalker Jul 1, 2025
58f9e97
enable ServerSideDiff for crossplane compositions
punkwalker Jul 1, 2025
6b0a350
fix backstage github integration secret
punkwalker Jul 1, 2025
985befd
fix backstage template for app with bucket
punkwalker Jul 1, 2025
b6e0302
update readme with getting started instructions
punkwalker Jul 2, 2025
31989ba
update readme with getting started instructions
punkwalker Jul 2, 2025
22ed190
update template location of backstage
punkwalker Jul 2, 2025
892e7c1
update template location of backstage
punkwalker Jul 2, 2025
02e2e0c
update readme with cleanup instructions
punkwalker Jul 2, 2025
b6c31d1
update readme with cleanup instructions
punkwalker Jul 2, 2025
ea6b055
update readme with cleanup instructions
punkwalker Jul 2, 2025
4aeb6bd
update eksctl readme
punkwalker Jul 2, 2025
5b02df6
update eksctl readme
punkwalker Jul 2, 2025
d036735
add installation flow readme
punkwalker Jul 2, 2025
6e40747
update troubleshooting guide
punkwalker Jul 2, 2025
e90986d
update readmes and scripts
punkwalker Jul 3, 2025
0d5b6ff
update readmes
punkwalker Jul 3, 2025
14764cb
move flow diagram to main Readme
punkwalker Jul 3, 2025
c5c9a07
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
2e4c9ad
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
97342da
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
c932de5
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
14e3cb3
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
5ef0469
reconcile boostrap logic and remove reduntant files
punkwalker Jul 3, 2025
c0e217e
clean values file
punkwalker Jul 18, 2025
28c8a23
minor updates
csantanapr Jul 21, 2025
7273cf0
add helm repo update
csantanapr Jul 21, 2025
993d15a
Merge pull request #4 from csantanapr-cnoe-demos/review-ref-impl-v2
punkwalker Jul 21, 2025
ae77c52
Review ref impl v2 (#5)
csantanapr Jul 21, 2025
e617663
add backstage official helm chart
punkwalker Jul 21, 2025
833cac7
add backstage official helm chart
punkwalker Jul 21, 2025
510607d
add backstage k8s-config secret
punkwalker Jul 21, 2025
464384d
fix backstage values file
punkwalker Jul 21, 2025
318fa33
fix backstage values file
punkwalker Jul 21, 2025
498c5a1
fix backstage values file
punkwalker Jul 21, 2025
cb75f27
fix backstage values for envs
punkwalker Jul 21, 2025
379683b
remove custom backstage-app chart
punkwalker Jul 21, 2025
3f8cde7
update main ReadMe and remove idpbuilder reference
punkwalker Jul 21, 2025
a16cc3f
update idpbuilder installation doc
punkwalker Jul 24, 2025
b6294f7
add installation seqeunce explaination
punkwalker Jul 24, 2025
b77610c
add create-cluster-eksctl.sh
punkwalker Jul 24, 2025
229d838
fix grammar
punkwalker Jul 24, 2025
a71de01
add auto mode support for terraform and add create-cluster.sh
punkwalker Jul 24, 2025
5e96d89
add s3 upbound provider compositions
punkwalker Jul 24, 2025
03f42bd
fix s3 compositions
punkwalker Jul 25, 2025
151cecc
fix s3 compositions
punkwalker Jul 25, 2025
c46f101
change values in config.yaml with placeholders
punkwalker Jul 25, 2025
2a9141d
restructure directory structure for website
punkwalker Jul 29, 2025
c1b2dea
update readmes
punkwalker Jul 29, 2025
406684a
Merge branch 'main' into restructure-docs
punkwalker Jul 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add installation seqeunce explaination
Signed-off-by: Pankaj Walke <[email protected]>
  • Loading branch information
punkwalker committed Jul 24, 2025
commit b6294f72ec7726d0e7dc3f420a2cede7708fcfdd
93 changes: 54 additions & 39 deletions docs/installation_flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,77 @@ This document describes the installation flow for the CNOE AWS Reference Impleme

## Overview

The CNOE AWS Reference Implementation uses a GitOps approach to deploy and manage addons on an EKS cluster. The installation process uses `helm` or `idpbuilder` to bootstrap the EKS cluster with Argo CD and other addons.
The CNOE AWS Reference Implementation uses a GitOps approach to deploy and manage addons on an EKS cluster. The installation process uses `helm` to bootstrap the EKS cluster. Detailed installation sequence is described below.

## Installation Process

The installation process follows these steps:
1. **User Approval**
- User start by executing `scipts/install.sh` script which displays details such as target EKS cluster and AWS Region etc. It also requests approval from the user to proceed with installation.

1. **Configuration Setup**:
- The `config.yaml` file is used to configure the installation
- AWS Secrets Manager secrets are created to store configuration and GitHub App credentials using `create-config-secrets.sh` script

2. **Local Environment Preparation**:
+ Using plain shell script:
- `install.sh` script reads the `config.yaml` and based on the specified cluster name, performs helm installation on EKS cluster.
+ Using idpbuilder:
- `install-using-idpbuilder.sh` script reads the `config.yaml` and based on the specified cluster name, builds a Argo CD cluster secret from eks kubeconfig.
- `idpbuilder` creates a local Kind cluster with Argo CD, Gitea and Argo CD cluster secret for EKS cluster.
- This local environment serves as a bootstrap mechanism for the remote EKS cluster using Argo CD in Kind cluster.
2. **Setup Configuration**:
- AWS Secrets Manager secrets are created to store configuration and GitHub App credentials using `create-config-secrets.sh` script. These secrets are fetched into the cluster by External Secret Operator.
- The `config.yaml` file is used to configure the installation.
- `install.sh` script reads the `config.yaml` and based on the specified cluster name, fetches kubeconfig of EKS cluster using AWS CLI. This kubeconfig is used for helm installation by overriding default kubeconfig.

3. **EKS Cluster Bootstrap**:
+ Using plain shell script:
- The script performs helm installation of Argo CD and External Secret Operator on the EKS cluster. It will use the temporary kubeconfig for accessing EKS cluster.
+ Using idpbuilder:
- `idpbuilder` applies Argo CD applications from the root of `packages` directory to the local Kind cluster, mainly `boostrap.yaml` and `addons-appset.yaml`.
- Argo CD in the Kind cluster installs Argo CD and External Secret Operator on the EKS cluster. It will use AWS credentials to authenticate with EKS cluster.
- The script first performs helm installation of Argo CD and External Secret Operator (ESO) on the EKS cluster. It will use the temporary kubeconfig for accessing EKS cluster. The values used for installation are static values from `packages/<adddon-name>/values.yaml` which are same files used by addons later.
- Then the script applies custom manifests for these addons from directory `packages/<adddon-name>/manifests/`. For, ESO this directory contains the AWS Secret Manager ClusterStore manifest and for Argo CD, it contains manifests for External Secrets of in-cluster Argo CD secret and Github App Argo CD repository credentials. These External Secrets use AWS Secret Manager ClusterStore.
- Then ESO will create corresponding kubernetes secrets for Argo CD cluster secret and repository credntials by fetching values from AWS Secret Manager which were created earlier.

4. **Addons Deployment**:
- The `addons-appset.yaml` creates an ApplicationSet in the EKS cluster's Argo CD
- This ApplicationSet creates individual Argo CD applicationSet for each addon using [cluster generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Cluster/).
- Addons are installed in a specific order to handle dependencies
- The scripts will wait 10 and install AppSet chart on EKS cluster which create an ApplicationSets for all the enabled addons based on values in `packages/addons/values.yaml`.
- Each ApplicationSet will use [Argo CD Cluster Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Cluster/) to create respective Argo CD Application. The Cluster Generator will generate one Argo CD Application for each enabled addon as there is only one Argo CD cluster secret.
- Altough the Argo CD Applications for each addon are create but each addon will take some time to reach Healthy state due to dependencies explained in [dependecy section](#addons-dependencies).

5. **Addon Configuration**:
- Addons are configured using helm values
- Static values are stored `packages/<addon-name>/values.yaml`
- Dynamic values from Argo CD cluster secret labels/annotations which depend on configuration from AWS Secrets Manager.

6. **Monitoring and Verification**:
7. **Monitoring and Verification**:
- The installation script waits for all Argo CD applications to become healthy
- Addons can be accessed through the configured domain based on path routing settings

## Addons Dependencies
Following is the order for addons reaching healthy state when using Path Routing.
```mermaid
---
title: Dependency Between Addons
---

flowchart LR
ESO["ESO"] --> ArgoCD["ArgoCD"]
ArgoCD --> AWSLB["AWS Load Balancer Controller"] & ExternalDNS["External DNS"] & CertManager["Cert Manager"] & Crossplane["Crossplane"] & CrossplaneComp["Crossplane Compositions"] & Keycloak["Keycloak"]
AWSLB --> NGINX["NGINX"]
ExternalDNS --> Backstage["Backstage"] & ArgoWorkflows["Argo Workflows"]
CertManager --> Backstage & ArgoWorkflows
NGINX --> Backstage & ArgoWorkflows
Keycloak --> Backstage & ArgoWorkflows

linkStyle 0 stroke:#2962FF
linkStyle 1 stroke:#00C853,fill:none
linkStyle 2 stroke:#00C853,fill:none
linkStyle 3 stroke:#00C853,fill:none
linkStyle 4 stroke:#00C853,fill:none
linkStyle 5 stroke:#00C853,fill:none
linkStyle 6 stroke:#00C853,fill:none
linkStyle 7 stroke:#E1BEE7,fill:none
linkStyle 8 stroke:#FF6D00,fill:none
linkStyle 9 stroke:#FFD600,fill:none
linkStyle 10 stroke:#FF6D00,fill:none
linkStyle 11 stroke:#FFD600,fill:none
linkStyle 12 stroke:#FF6D00,fill:none
linkStyle 13 stroke:#FFD600,fill:none
linkStyle 14 stroke:#FF6D00,fill:none
linkStyle 15 stroke:#FFD600,fill:none
```
- The colors of edged in this diagram indicate the parallel progress of addons to reach healthy state. As seen the diagram, All the addons will reach the Healthy state parallely except Cert Manager, Keycloak, Backstage and Argo Workflows.
- Both Backstage and Argo Workflow addon depend on Healthy status of External DNS, Cert-Manager, NGINX and Keycloak.
- This sequenctial order for these addons is due to dependecy of Keycloak Client creation for Backstage and Argo Workflows and both these addons also need to reach Keycloak using external URL to verify SSO configuration. Therefore, both Backstage and Argo Workflows will stay unhealthy until keycloak reached healthy state.
- The Keycloak client creation is doen using a Job pod _(`packages/keycloak/manifests/user-sso-config-job.yaml`)_. This job pod creates the Keycloak clients for Argo CD, Backstage and Argo Workflows. It also creates the kubernetes secret `keycloak-clients` containing client secrets.
- Once the client creation is successful, The ClusterSecretStore _(`packages/keycloak/manifests/keycloak-cluster-secret-store.yaml`)_ is created so that ESO can create kubernetes secrets for Client Secrets in Backstage and Argo Workflows namespace.
- When the kubernetes secrets for Keyclaok Client Secrets are created in Backstage and Argo Workflows namespace, these addons will reach Healthy state.

## Uninstallation Process

The uninstallation process follows these steps:
Expand All @@ -58,20 +90,3 @@ The uninstallation process follows these steps:
3. **CRD Cleanup (Optional)**:
- Custom Resource Definitions can be cleaned up using the `cleanup-crds.sh` script
- This is optional and useful when you want to completely remove all traces of the installation

## Key Components

1. **helm** _(if using `install.sh`)_: Bootstraps EKS cluster through helm chart installation.
2. **idpbuilder** _(if using `install-using-idpbuilder.sh`)_: Creates a local Kind cluster with Argo CD and Gitea, which bootstraps the EKS cluster
3. **Argo CD**: Manages the deployment of addons on the EKS cluster using GitOps
4. **External Secret Operator**: Manages secrets from AWS Secrets Manager
5. **Addons**: Various tools and services that make up the Internal Developer Platform

## AWS Resources

The installation relies on these AWS resources:

1. **EKS Cluster**: The Kubernetes cluster where the platform is deployed
2. **AWS Secrets Manager**: Stores configuration and GitHub App credentials
3. **IAM Roles**: For pod identity associations required by various addons
4. **Route53**: For DNS management via External DNS
76 changes: 76 additions & 0 deletions docs/installation_with_idpbuilder.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,3 +269,79 @@ This script will only remove resources other than CRDs from the EKS cluster so t
```
./scripts/cleanup-crds.sh
```

# Installation Flow

This document describes the installation flow for the CNOE AWS Reference Implementation.

## Overview

The CNOE AWS Reference Implementation uses a GitOps approach to deploy and manage addons on an EKS cluster. The installation process uses `helm` to bootstrap the EKS cluster with Argo CD and other addons. Detailed installation sequence is described below.

## Installation Sequence

1. **Configuration Setup**:
- The `config.yaml` file is used to configure the installation
- AWS Secrets Manager secrets are created to store configuration and GitHub App credentials using `create-config-secrets.sh` script

2. **Local Environment Preparation**:
+ Using plain shell script:
- `install.sh` script reads the `config.yaml` and based on the specified cluster name, performs helm installation on EKS cluster.
+ Using idpbuilder:
- `install-using-idpbuilder.sh` script reads the `config.yaml` and based on the specified cluster name, builds a Argo CD cluster secret from eks kubeconfig.
- `idpbuilder` creates a local Kind cluster with Argo CD, Gitea and Argo CD cluster secret for EKS cluster.
- This local environment serves as a bootstrap mechanism for the remote EKS cluster using Argo CD in Kind cluster.

3. **EKS Cluster Bootstrap**:
+ Using plain shell script:
- The script performs helm installation of Argo CD and External Secret Operator on the EKS cluster. It will use the temporary kubeconfig for accessing EKS cluster.
+ Using idpbuilder:
- `idpbuilder` applies Argo CD applications from the root of `packages` directory to the local Kind cluster, mainly `boostrap.yaml` and `addons-appset.yaml`.
- Argo CD in the Kind cluster installs Argo CD and External Secret Operator on the EKS cluster. It will use AWS credentials to authenticate with EKS cluster.

4. **Addons Deployment**:
- The `addons-appset.yaml` creates an ApplicationSet in the EKS cluster's Argo CD
- This ApplicationSet creates individual Argo CD applicationSet for each addon using [cluster generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Cluster/).
- Addons are installed in a specific order to handle dependencies

5. **Addon Configuration**:
- Addons are configured using helm values
- Static values are stored `packages/<addon-name>/values.yaml`
- Dynamic values from Argo CD cluster secret labels/annotations which depend on configuration from AWS Secrets Manager.

6. **Monitoring and Verification**:
- The installation script waits for all Argo CD applications to become healthy
- Addons can be accessed through the configured domain based on path routing settings

## Uninstallation Process

The uninstallation process follows these steps:

1. **Remove idpbuilder Local Cluster**:
- The local Kind cluster created by idpbuilder is deleted

2. **Remove Addons**:
- Addons are removed in a specific order to handle dependencies
- ApplicationSets are deleted with orphan deletion policy
- PVCs for stateful applications are cleaned up

3. **CRD Cleanup (Optional)**:
- Custom Resource Definitions can be cleaned up using the `cleanup-crds.sh` script
- This is optional and useful when you want to completely remove all traces of the installation

## Key Components

1. **helm** _(if using `install.sh`)_: Bootstraps EKS cluster through helm chart installation.
2. **idpbuilder** _(if using `install-using-idpbuilder.sh`)_: Creates a local Kind cluster with Argo CD and Gitea, which bootstraps the EKS cluster
3. **Argo CD**: Manages the deployment of addons on the EKS cluster using GitOps
4. **External Secret Operator**: Manages secrets from AWS Secrets Manager
5. **Addons**: Various tools and services that make up the Internal Developer Platform

## AWS Resources

The installation relies on these AWS resources:

1. **EKS Cluster**: The Kubernetes cluster where the platform is deployed
2. **AWS Secrets Manager**: Stores configuration and GitHub App credentials
3. **IAM Roles**: For pod identity associations required by various addons
4. **Route53**: For DNS management via External DNS