# Kluster setup and IaaC using argoCD


### Initial setup
#### Requirements:
- A running k3s instance
- `sealedsecrets` deployed

#### Installing argo and the app-of-apps
```
kubectl apply -k infrastructure/argocd
```
This will install argocd and its CRDs in a dedicated namespace. The app-of-apps is configured under `kluster-deployments/` and deployed as well. This will bootstrap all other apps, as described in `./kluster-deployments`.

The app-of-apps will bootstrap a fully featured cluster with the following components
- postgres instance with backups
- backup of all nfs PVCs using restic
- traefik (along with metallb as a publicly accessible reverse proxy)
- an nfs-provisioner creating PVCs on-demand
- gitea
- a range of selfhosted apps:
    - nextcloud
    - jellyfin
    - adguard-home
    - homarr
    - homeassistant
    - immich
    - ...

#### Recap
- install sealedsecrets see [README](./infrastructure/sealedsecrets/README.md)
    ```bash
    kubectl apply -k infrastructure/sealedsecrets
    kubectl apply -f infrastructure/sealedsecrets/main.key
    kubectl delete pod -n kube-system -l name=sealed-secrets-controller
    ```
- install argocd
    ```bash
    kubectl apply -k infrastructure/argocd
    ```
- wait...


### Adding an application
todo