Flux Bootstrap

Ziel

Dieses Dokument beschreibt die initiale Installation von FluxCD mittels Flux Operator sowie die Anbindung eines Git-Repositories an einen Cluster.

Voraussetzungen

  • Kubernetes Cluster verfügbar

  • Kubectl konfiguriert

  • Helm installiert

  • Repository vorhanden

  • GPG-Schlüssel für SOPS vorhanden

Variablen

export GITHUB_TOKEN=FIXME
export KEY_FP=78F9A6BF5A56051C803F55A80C55F3BC10960BBA
export CLUSTER_NAME=FIXME

Installation des Flux Operators

helm install flux-operator \
  oci://ghcr.io/controlplaneio-fluxcd/charts/flux-operator \
  --namespace flux-system \
  --create-namespace

Erstellung der FluxInstance

apiVersion: fluxcd.controlplane.io/v1
kind: FluxInstance
metadata:
  name: flux
  namespace: flux-system
  annotations:
    fluxcd.controlplane.io/reconcileEvery: "1h"
    fluxcd.controlplane.io/reconcileTimeout: "5m"
spec:
  distribution:
    version: "2.x"
    registry: "ghcr.io/fluxcd"
    artifact: "oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests"
  components:
    - source-controller
    - kustomize-controller
    - helm-controller
    - notification-controller
    - image-reflector-controller
    - image-automation-controller
    - source-watcher
  cluster:
    type: kubernetes
    multitenant: false
    networkPolicy: true
    domain: cluster.local
  sync:
    kind: GitRepository
    url: https://codeberg.org/tamay/fluxcd.git
    ref: refs/heads/main
    path: clusters/$CLUSTER_NAME
    pullSecret: flux-system

Git Credentials

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: flux-system
  namespace: flux-system
type: Opaque
data:
  password: $(printf $GITHUB_TOKEN | base64 -w0)
  username: Z2l0
EOF

SOPS GPG Schlüssel

gpg --export-secret-keys --armor "${KEY_FP}" |
kubectl create secret generic sops-gpg \
  --namespace=flux-system \
  --from-file=sops.asc=/dev/stdin

Verifikation

Prüfen ob Flux erfolgreich installiert wurde:

kubectl get fluxinstances -A

kubectl get pods -n flux-system

flux get all -A

Die Kustomizations und GitRepositories sollten den Status Ready besitzen.