|
1 | 1 | # Homelab: Kubernetes Home Cluster - Applications
|
2 | 2 |
|
3 |
| -[](https://github.com/muhlba91/homelab-kubernetes-home-applications/actions/workflows/pipeline.yml) |
4 |
| -[](LICENSE.md) |
| 3 | +[](https://github.com/muhlba91/homelab-home-cluster-applications/actions/workflows/pipeline.yml) |
| 4 | +[](LICENSE.md) |
5 | 5 |
|
6 |
| -This repository contains applications deployed on the `home-cluster` via [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) using [GitOps](https://opengitops.dev). |
| 6 | +This repository contains applications deployed on the `home-cluster` via [Flux](https://fluxcd.io) using [GitOps](https://opengitops.dev). |
7 | 7 |
|
8 | 8 | ---
|
9 | 9 |
|
10 | 10 | ## Bootstrapping
|
11 | 11 |
|
12 |
| -A Kubernetes cluster needs to be bootstrapped with the [Cilium CNI](https://cilium.io) and ArgoCD with an `Application` pointing to this repository. |
| 12 | +A Kubernetes cluster needs to be bootstrapped with the [Cilium CNI](https://cilium.io) and Flux pointing to this repository. |
13 | 13 |
|
14 |
| -For [ksops](https://github.com/viaduct-ai/kustomize-sops) and ArgoCD to decrypt the initial secrets for configuring the [External Secrets Operator](http://external-secrets.io) using [Doppler](http://doppler.com), a [Google Cloud Service Account](https://cloud.google.com/docs/authentication#service-accounts) with access to the correct KMS key needs to be set in the `argocd` namespace. You can check out [`infrastructure/charts/argocd/values.yaml`](infrastructure/charts/argocd/values.yaml) on how this secret is passed to ArgoCD. |
| 14 | +For [ksops](https://github.com/viaduct-ai/kustomize-sops) and ArgoCD to decrypt the initial secrets for configuring the [External Secrets Operator](http://external-secrets.io) using [Doppler](http://doppler.com), a [Google Cloud Service Account](https://cloud.google.com/docs/authentication#service-accounts) with access to the correct KMS key needs to be set in the `flux` namespace. |
15 | 15 |
|
16 |
| -ArgoCD will then manage Cilium, itself, and all applications as defined in this repository. |
| 16 | +***Attention:*** some applications will be automatically deployed, others not (yet). |
17 | 17 |
|
18 | 18 | ---
|
19 | 19 |
|
20 |
| -## ArgoCD App-of-Apps |
| 20 | +## App-of-Apps |
21 | 21 |
|
22 |
| -The repository layout follows ArgoCD's [app-of-apps pattern](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/). |
| 22 | +The repository follows the app-of-apps pattern. |
23 | 23 |
|
24 |
| -The first ArgoCD `Application` being defined needs to reference [`app-of-apps/values.yaml`](app-of-apps/values.yaml) and the environment specific `values-<ENVIRONMENT>.yaml` files. |
| 24 | +The first Flux `Kustomization` being defined needs to reference [`app-of-apps/`](app-of-apps/). |
25 | 25 |
|
26 |
| -These are bootstrapping the main ArgoCD projects and applications, referring to the respective `<PROJECT>/applications/values[-<ENVIRONMENT>].yaml` files: |
| 26 | +These are bootstrapping the main Flux applications, referring to the respective `<PROJECT>/applications/` kosutomizations: |
27 | 27 |
|
28 |
| -- [`infrastructure`](#infrastructure): core cluster infrastructure, like Cilium and ArgoCD |
29 |
| -- [`core`](#core-applications): core applications, like [cert-manager](http://cert-manager.io) and [traefik](https://traefik.io) |
| 28 | +- [`infrastructure`](#infrastructure): core cluster infrastructure |
| 29 | +- [`core`](#core-applications): core applications |
30 | 30 | - [`applications`](#user-applications): (user) applications running on the cluster/network
|
31 | 31 | - [`home-assistant`](#home-assistant): [Home Assistant](http://home-assistant.io) related applications
|
32 | 32 |
|
33 |
| -Each of these applications follows the app-of-apps pattern again using subcharts defined in the respective `charts` directory. |
34 |
| - |
35 |
| -### Additional Helm Value Files |
36 |
| - |
37 |
| -In addition to the included `values[-<ENVIRONMENT].yaml` files, ArgoCD `Application`s load additonal Helm value files from an external repository defined with `global.spec.values.repoURL`. |
38 |
| - |
39 |
| -For example, values only defined in the external repository are ingress domains. |
40 |
| - |
41 |
| -## Library Charts |
42 |
| - |
43 |
| -### Applications |
44 |
| - |
45 |
| -To support bootstrapping these app-of-apps `Application`s, the library chart [applications](library/charts/applications) creates the ArgoCD `Project` and `Application` definitions based on the provided values. |
| 33 | +Each of these applications follows the app-of-apps pattern again using sub-kustomizations defined in the respective application directories. |
46 | 34 |
|
47 | 35 | ---
|
48 | 36 |
|
49 | 37 | ## Hosted Services
|
50 | 38 |
|
51 | 39 | ### Infrastructure
|
52 | 40 |
|
53 |
| -The following applications are defined in [`infrastructure/charts`](infrastructure/charts). |
| 41 | +The following applications are defined in [`infrastructure/`](infrastructure/). |
54 | 42 |
|
55 |
| -- [x] [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) - Manages the applications deployed on the cluster using GitOps. |
56 | 43 | - [x] [Cilium](https://cilium.io) - Provides the cluster CNI.
|
57 |
| -- [x] [CSI NFS Driver](https://github.com/kubernetes-csi/csi-driver-nfs/tree/master) - Exposes the NAS' NFS storage as a Kubernetes `StorageClass`. |
58 |
| -- [x] [Descheduler](https://github.com/kubernetes-sigs/descheduler) - Finds pods to be evicted for optimizing node usage. |
59 |
| -- [x] [External Secrets Operator](http://external-secrets.io) - Synchronizes secrets from external stores to Kubernetes `Secret` objects. |
| 44 | +- [ ] [CSI NFS Driver](https://github.com/kubernetes-csi/csi-driver-nfs/tree/master) - Exposes the NAS' NFS storage as a Kubernetes `StorageClass`. |
60 | 45 | - [x] [MetalLB](https://metallb.universe.tf) - Provides a Kubernetes network load balancer to expose Kubernetes `Service`s.
|
61 | 46 | - [x] [Longhorn](https://longhorn.io) - Exposes local storage to Kubernetes `StorageClass`es.
|
62 |
| - |
63 |
| -#### Kustomizations |
64 |
| - |
65 |
| -- [x] [External Secrets Stores](infrastructure/kustomizations/external-secrets-stores) - Deploys the required `ClusterSecretStore`s and Doppler [Service Tokens](https://docs.doppler.com/docs/service-tokens) as Kubernetes `Secret`s. |
| 47 | +- [x] [External Secrets Operator](http://external-secrets.io) - Synchronizes secrets from external stores to Kubernetes `Secret` objects. |
| 48 | + - [x] [External Secrets Stores](infrastructure/external-secrets/) - Deploys the required `ClusterSecretStore`s and Doppler [Service Tokens](https://docs.doppler.com/docs/service-tokens) as Kubernetes `Secret`s. |
| 49 | +- [x] [Traefik](https://traefik.io) - Exposes Kubernetes `Ingress` resources to the "outside world". |
66 | 50 |
|
67 | 51 | ### Core Applications
|
68 | 52 |
|
69 |
| -The following applications are defined in [`core/charts`](core/charts). |
| 53 | +The following applications are defined in [`core/`](core/). |
70 | 54 |
|
71 | 55 | - [x] [cert-manager](https://cert-manager.io) - Certificate management using ACME Let's Encrypt.
|
72 | 56 | - [x] [External DNS with Google Cloud DNS integration](https://github.com/kubernetes-sigs/external-dns) - Creates DNS records in Google Cloud DNS domains for publicly reachable services.
|
73 |
| -- [x] [Traefik](https://traefik.io) - Exposes Kubernetes `Ingress` resources to the "outside world". |
74 | 57 |
|
75 | 58 | ### (User) Applications
|
76 | 59 |
|
77 |
| -The following applications are defined in [`applications/charts`](applications/charts). |
| 60 | +The following applications are defined in [`applications/`](applications/). |
78 | 61 |
|
79 | 62 | - [x] [AdGuard](https://adguard.com/en/adguard-home/overview.html) - DNS server with ad filtering/blocking capabilities.
|
80 | 63 | - [x] [CoreDNS](https://coredns.io) - DNS resolver for internal, local only, domains.
|
81 | 64 | - [x] [dnsmasq](https://thekelleys.org.uk/dnsmasq/doc.html) - IPv4 and IPv6 DHCP server.
|
82 | 65 | - [x] [External DNS with CoreDNS/etcd integration](https://github.com/kubernetes-sigs/external-dns) - Creates DNS records in CoreDNS/etcs for internal, local only, reachable services.
|
83 | 66 | - [x] External Services - Deploys Kubernetes `Service`s and `Ingress`es to local endpoints, and existing services outside of the cluster.
|
84 | 67 | - [x] [Grafana](http://grafana.com) - Visualization of metrics, and other data.
|
85 |
| -- [x] [MinIO](https://min.io) - Local object storage. |
| 68 | +- [ ] [MinIO](https://min.io) - Local object storage. |
86 | 69 |
|
87 | 70 | ### Home Assistant
|
88 | 71 |
|
89 |
| -The following applications are defined in [`home-assistant/charts`](home-assistant/charts). |
| 72 | +The following applications are defined in [`home-assistant/`](home-assistant/). |
90 | 73 |
|
91 | 74 | - [x] [ecowitt2mqtt](https://github.com/bachya/ecowitt2mqtt) - Forwards data received from ecowitt devices to the MQTT broker.
|
92 | 75 | - [x] [EMQX](https://www.emqx.io) - A MQTT broker.
|
@@ -128,5 +111,5 @@ No (cluster-wide) backup and restore has been implemented as of yet.
|
128 | 111 |
|
129 | 112 | ## Continuous Integration and Automations
|
130 | 113 |
|
131 |
| -- [GitHub Actions](https://docs.github.com/en/actions) are linting and templating all Helm charts. |
132 |
| -- [Renovate Bot](https://github.com/renovatebot/renovate) is updating Helm (sub)charts and used container images in the `values.yaml` files, and GitHub Actions. |
| 114 | +- [GitHub Actions](https://docs.github.com/en/actions) are linting all YAML files. |
| 115 | +- [Renovate Bot](https://github.com/renovatebot/renovate) is updating Helm releases and used container images in the `values.yaml` files, and GitHub Actions. |
0 commit comments