1
0
mirror of https://github.com/funkypenguin/geek-cookbook/ synced 2025-12-13 01:36:23 +00:00

Improve topolvm docs (fixes #251)

Signed-off-by: David Young <davidy@funkypenguin.co.nz>
This commit is contained in:
David Young
2023-01-24 15:32:02 +13:00
parent 7e36429c5d
commit eafc804e29

View File

@@ -37,70 +37,67 @@ vgcreate VG-topolvm /dev/sdb
### Namespace ### Namespace
We need a namespace to deploy our HelmRelease and associated ConfigMaps into. Per the [flux design](/kubernetes/deployment/flux/), I create this example yaml in my flux repo at `bootstrap/namespaces/namespace-topolvm.yaml`: We need a namespace to deploy our HelmRelease and associated ConfigMaps into. Per the [flux design](/kubernetes/deployment/flux/), I create this example yaml in my flux repo:
??? example "Example NameSpace (click to expand)" ```yaml title="/bootstrap/namespaces/namespace-topolvm.yaml"
```yaml apiVersion: v1
apiVersion: v1 kind: Namespace
kind: Namespace metadata:
metadata: name: topolvm-system
name: topolvm-system ```
```
### HelmRepository ### HelmRepository
Next, we need to define a HelmRepository (*a repository of helm charts*), to which we'll refer when we create the HelmRelease. We only need to do this once per-repository. In this case, we're using the official [TopoLVM helm chart](https://github.com/topolvm/topolvm/tree/main/charts/topolvm), so per the [flux design](/kubernetes/deployment/flux/), I create this example yaml in my flux repo at `bootstrap/helmrepositories/helmrepository-topolvm.yaml`: Next, we need to define a HelmRepository (*a repository of helm charts*), to which we'll refer when we create the HelmRelease. We only need to do this once per-repository. In this case, we're using the official [TopoLVM helm chart](https://github.com/topolvm/topolvm/tree/main/charts/topolvm), so per the [flux design](/kubernetes/deployment/flux/), I create this example yaml in my flux repo:
??? example "Example HelmRepository (click to expand)" ```yaml title="/bootstrap/helmrepositories/helmrepository-topolvm.yaml"
```yaml apiVersion: source.toolkit.fluxcd.io/v1beta1
apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository
kind: HelmRepository metadata:
metadata: name: topolvm
name: topolvm namespace: flux-system
namespace: flux-system spec:
spec: interval: 15m
interval: 15m url: https://topolvm.github.io/topolvm
url: https://topolvm.github.io/topolvm ```
```
### Kustomization ### Kustomization
Now that the "global" elements of this deployment (*Namespace and HelmRepository*) 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 `/topolvm`. I create this example Kustomization in my flux repo at `bootstrap/kustomizations/kustomization-topolvm.yaml`: Now that the "global" elements of this deployment (*Namespace and HelmRepository*) 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 `/topolvm`. I create this example Kustomization in my flux repo:
??? example "Example Kustomization (click to expand)" ```yaml title="/bootstrap/kustomizations/kustomization-topolvm.yaml"
```yaml apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 kind: Kustomization
kind: Kustomization metadata:
metadata: name: topolvm--topolvm-system
name: topolvm--topolvm-system namespace: flux-system
namespace: flux-system spec:
spec: interval: 15m
interval: 15m path: ./topolvm-system
path: ./topolvm-system prune: true # remove any elements later removed from the above path
prune: true # remove any elements later removed from the above path timeout: 2m # if not set, this defaults to interval duration, which is 1h
timeout: 2m # if not set, this defaults to interval duration, which is 1h sourceRef:
sourceRef: kind: GitRepository
kind: GitRepository name: flux-system
name: flux-system validation: server
validation: server healthChecks:
healthChecks: - apiVersion: apps/v1
- apiVersion: apps/v1 kind: Deployment
kind: Deployment name: topolvm-controller
name: topolvm-controller namespace: topolvm-system
namespace: topolvm-system - apiVersion: apps/v1
- apiVersion: apps/v1 kind: DaemonSet
kind: DaemonSet name: topolvm-lvmd-0
name: topolvm-lvmd-0 namespace: topolvm-system
namespace: topolvm-system - apiVersion: apps/v1
- apiVersion: apps/v1 kind: DaemonSet
kind: DaemonSet name: topolvm-node
name: topolvm-node namespace: topolvm-system
namespace: topolvm-system - apiVersion: apps/v1
- apiVersion: apps/v1 kind: DaemonSet
kind: DaemonSet name: topolvm-scheduler
name: topolvm-scheduler namespace: topolvm-system
namespace: topolvm-system ```
```
!!! question "What's with that screwy name?" !!! question "What's with that screwy name?"
> Why'd you call the kustomization `topolvm--topolvm-system`? > Why'd you call the kustomization `topolvm--topolvm-system`?
@@ -109,20 +106,19 @@ Now that the "global" elements of this deployment (*Namespace and HelmRepository
### ConfigMap ### ConfigMap
Now we're into the topolvm-specific YAMLs. First, we create a ConfigMap, containing the entire contents of the helm chart's [values.yaml](https://github.com/topolvm/topolvm/blob/main/charts/topolvm/values.yaml). Paste the values into a `values.yaml` key as illustrated below, indented 4 spaces (*since they're "encapsulated" within the ConfigMap YAML*). I create this example yaml in my flux repo at `topolvm/configmap-topolvm-helm-chart-value-overrides.yaml`: Now we're into the topolvm-specific YAMLs. First, we create a ConfigMap, containing the entire contents of the helm chart's [values.yaml](https://github.com/topolvm/topolvm/blob/main/charts/topolvm/values.yaml). Paste the values into a `values.yaml` key as illustrated below, indented 4 spaces (*since they're "encapsulated" within the ConfigMap YAML*). I create this example yaml in my flux repo:
??? example "Example ConfigMap (click to expand)" ```yaml title="/topolvm/configmap-topolvm-helm-chart-value-overrides.yaml"
```yaml apiVersion: v1
apiVersion: v1 kind: ConfigMap
kind: ConfigMap metadata:
metadata: creationTimestamp: null
creationTimestamp: null name: topolvm-helm-chart-value-overrides
name: topolvm-helm-chart-value-overrides namespace: topolvm-system
namespace: topolvm data:
data: values.yaml: |-
values.yaml: |- # paste chart values.yaml (indented) here and alter as required>
# paste chart values.yaml (indented) here and alter as required> ```
```
--8<-- "kubernetes-why-full-values-in-configmap.md" --8<-- "kubernetes-why-full-values-in-configmap.md"
@@ -146,32 +142,31 @@ lvmd:
### HelmRelease ### HelmRelease
Lastly, having set the scene above, we define the HelmRelease which will actually deploy TopoLVM into the cluster, with the config we defined above. I save this in my flux repo as `topolvm/helmrelease-topolvm.yaml`: Lastly, having set the scene above, we define the HelmRelease which will actually deploy TopoLVM into the cluster, with the config we defined above. I save this in my flux repo:
??? example "Example HelmRelease (click to expand)" ```yaml title="/topolvm/helmrelease-topolvm.yaml"
```yaml apiVersion: helm.toolkit.fluxcd.io/v2beta1
apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease
kind: HelmRelease metadata:
metadata: name: topolvm
name: topolvm namespace: topolvm-system
namespace: topolvm-system spec:
chart:
spec: spec:
chart: chart: topolvm
spec: version: 3.x
chart: topolvm sourceRef:
version: 3.x kind: HelmRepository
sourceRef: name: topolvm
kind: HelmRepository namespace: flux-system
name: topolvm interval: 15m
namespace: flux-system timeout: 5m
interval: 15m releaseName: topolvm
timeout: 5m valuesFrom:
releaseName: topolvm - kind: ConfigMap
valuesFrom: name: topolvm-helm-chart-value-overrides
- kind: ConfigMap valuesKey: values.yaml # This is the default, but best to be explicit for clarity
name: topolvm-helm-chart-value-overrides ```
valuesKey: values.yaml # This is the default, but best to be explicit for clarity
```
--8<-- "kubernetes-why-not-config-in-helmrelease.md" --8<-- "kubernetes-why-not-config-in-helmrelease.md"