mirror of
https://github.com/funkypenguin/geek-cookbook/
synced 2025-12-13 01:36:23 +00:00
Add Velero and snapshot controller for backups
Signed-off-by: David Young <davidy@funkypenguin.co.nz>
This commit is contained in:
28
_includes/kubernetes-flux-check.md
Normal file
28
_includes/kubernetes-flux-check.md
Normal file
@@ -0,0 +1,28 @@
|
||||
## Install {{ page.meta.slug }}!
|
||||
|
||||
Commit the changes to your flux repository, and either wait for the reconciliation interval, or force a reconcilliation using `flux reconcile source git flux-system`. You should see the kustomization appear...
|
||||
|
||||
```bash
|
||||
~ ❯ flux get kustomizations {{ page.meta.kustomization_name }}
|
||||
NAME READY MESSAGE REVISION SUSPENDED
|
||||
{{ page.meta.kustomization_name }} True Applied revision: main/70da637 main/70da637 False
|
||||
~ ❯
|
||||
```
|
||||
|
||||
The helmrelease should be reconciled...
|
||||
|
||||
```bash
|
||||
~ ❯ flux get helmreleases -n {{ page.meta.helmrelease_namespace }} {{ page.meta.helmrelease_name }}
|
||||
NAME READY MESSAGE REVISION SUSPENDED
|
||||
{{ page.meta.helmrelease_name }} True Release reconciliation succeeded v{{ page.meta.helm_chart_version }} False
|
||||
~ ❯
|
||||
```
|
||||
|
||||
And you should have happy pods in the {{ page.meta.helmrelease_namespace }} namespace:
|
||||
|
||||
```bash
|
||||
~ ❯ k get pods -n {{ page.meta.helmrelease_namespace }} -l release={{ page.meta.helmrelease_name }}
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
{{ page.meta.helmrelease_name }}-7c94b7446d-nwsss 1/1 Running 0 5m14s
|
||||
~ ❯
|
||||
```
|
||||
33
_includes/kubernetes-flux-helmrelease.md
Normal file
33
_includes/kubernetes-flux-helmrelease.md
Normal file
@@ -0,0 +1,33 @@
|
||||
### HelmRelease
|
||||
|
||||
Lastly, having set the scene above, we define the HelmRelease which will actually deploy {{ page.meta.helmrelease_name }} into the cluster. We start with a basic HelmRelease YAML, like this example:
|
||||
|
||||
```yaml title="/{{ page.meta.helmrelease_namespace }}/helmrelease-{{ page.meta.helmrelease_name }}.yaml"
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: {{ page.meta.helmrelease_name }}
|
||||
namespace: {{ page.meta.helmrelease_namespace }}
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: {{ page.meta.helmrelease_namespace }}
|
||||
version: {{ page.meta.helm_chart_version }} # auto-update to semver bugfixes only (1)
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: {{ page.meta.helm_chart_repo_name }}
|
||||
namespace: flux-system
|
||||
interval: 15m
|
||||
timeout: 5m
|
||||
releaseName: {{ page.meta.helmrelease_namespace }}
|
||||
values: # paste contents of upstream values.yaml below, indented 4 spaces (2)
|
||||
```
|
||||
|
||||
1. I like to set this to the semver minor version of the upstream chart, so that I'll inherit bug fixes but not any new features (*since I'll need to manually update my values to accommodate new releases anyway*)
|
||||
2. Paste the full contents of the upstream [values.yaml]({{ page.meta.values_yaml_url }}) here, indented 4 spaces under the `values:` key
|
||||
|
||||
If we deploy this helmrelease as-is, we'll inherit every default from the upstream chart. That's probably hardly ever what we want to do, so my preference is to take the entire contents of the helm chart's [values.yaml]({{ page.meta.values_yaml_url }}), and to paste these (*indented*), under the `values` key. This means that I can then make my own changes in the context of the entire values.yaml, rather than cherry-picking just the items I want to change, to make future chart upgrades simpler.
|
||||
|
||||
--8<-- "kubernetes-why-not-full-values-in-configmap.md"
|
||||
|
||||
Then work your way through the values you pasted, and change any which are specific to your configuration.
|
||||
14
_includes/kubernetes-flux-helmrepository.md
Normal file
14
_includes/kubernetes-flux-helmrepository.md
Normal file
@@ -0,0 +1,14 @@
|
||||
### HelmRepository
|
||||
|
||||
We're going to install a helm chart from the [{{ page.meta.helm_chart_repo_name }}]({{ page.meta.helm_chart_repo_url }}) repository, so I create the following in my flux repo (*assuming it doesn't already exist*):
|
||||
|
||||
```yaml title="/bootstrap/helmrepositories/helmrepository-{{ page.meta.helm_chart_repo_name }}.yaml"
|
||||
apiVersion: source.toolkit.fluxcd.io/v1beta1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: {{ page.meta.helm_chart_repo_name }}
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 15m
|
||||
url: {{ page.meta.helm_chart_repo_url }}
|
||||
```
|
||||
26
_includes/kubernetes-flux-kustomization.md
Normal file
26
_includes/kubernetes-flux-kustomization.md
Normal file
@@ -0,0 +1,26 @@
|
||||
### Kustomization
|
||||
|
||||
Now that the "global" elements of this deployment (*just the HelmRepository in this case*) have been defined, we do some "flux-ception", and go one layer deeper, adding another Kustomization, telling flux to deploy any YAMLs found in the repo at `/{{ page.meta.helmrelease_namespace }}/`. I create this example Kustomization in my flux repo:
|
||||
|
||||
```yaml title="/bootstrap/kustomizations/kustomization-{{ page.meta.kustomization_name }}.yaml"
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: {{ page.meta.kustomization_name }}
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 30m
|
||||
path: ./{{ page.meta.helmrelease_namespace }}
|
||||
prune: true # remove any elements later removed from the above path
|
||||
timeout: 10m # if not set, this defaults to interval duration, which is 1h
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: flux-system
|
||||
healthChecks:
|
||||
- apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
name: {{ page.meta.helmrelease_name }}
|
||||
namespace: {{ page.meta.helmrelease_namespace }}
|
||||
```
|
||||
|
||||
--8<-- "premix-cta-kubernetes.md"
|
||||
12
_includes/kubernetes-flux-namespace.md
Normal file
12
_includes/kubernetes-flux-namespace.md
Normal file
@@ -0,0 +1,12 @@
|
||||
## Preparation
|
||||
|
||||
### Namespace
|
||||
|
||||
We need a namespace to deploy our HelmRelease and associated YAMLs into. Per the [flux design](/kubernetes/deployment/flux/), I create this example yaml in my flux repo at `/bootstrap/namespaces/namespace-{{ page.meta.helmrelease_namespace }}.yaml`:
|
||||
|
||||
```yaml title="/bootstrap/namespaces/namespace-{{ page.meta.helmrelease_namespace }}.yaml"
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: {{ page.meta.helmrelease_namespace }}
|
||||
```
|
||||
Reference in New Issue
Block a user