4.4 KiB
The Flux tutorial makes things very complicated. In essence, all Flux is is a tool that pulls a git repo, and does kubectl apply -k; there should be a much easier way to set it up.
Install Flux
Export your GITEA_TOKEN:
export GITEA_TOKEN=THERE_IS_SOME_TOKEN_HERE
Bootstrap the repo:
❯ flux bootstrap gitea \
--token-auth=true \
--owner=charles \
--repository=flux-5pi5 \
--branch=main \
--path=./ \
--personal \
--hostname=git.tipsy.codes
This will create the repo in Gitea for you, and define a basic structure:
❯ tree
.
└── cluster
└── flux-system
├── gotk-components.yaml
├── gotk-sync.yaml
└── kustomization.yaml
From here, in the simplest way, you can just start deploying applications.
First deployment
In the most simple form, Flux will pick up any kustomization in the path pointed to by '--path'. Since we set it to '.', adding something should be as simple as dropping it into that folder.
❯ git clone ssh://git@git.tipsy.codes:2222/charles/flux-5pi5.git
❯ cd flux-5pi5
❯ cat <<EOF > nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
EOF
Then commit, push, and reconcile:
❯ git add .
❯ git commit -am 'add: nginx deployment'
[main e1e40fb] add: nginx deployment
1 file changed, 19 insertions(+)
create mode 100644 nginx.yaml
❯ git push
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 478 bytes | 478.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To ssh://git.tipsy.codes:2222/charles/flux-5pi5.git
43161d8..e1e40fb main -> main
If you are impatient, you can trigger a reconciliation with:
flux reconcile source git flux-system
Watch it rollout with:
watch flux get all -A
Then you should be good to go!
❯ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-647677fc66-cltgn 1/1 Running 0 6m31s
nginx-deployment-647677fc66-r6lxj 1/1 Running 0 6m31s
Some simple things to make it better
Use kustomizations
If we use kustomizations, we can track the reconciliation of sets of things.
Here is a simple example:
❯ head -n 99999 nginx.yaml nginx/*
==> nginx.yaml <==
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: nginx-kustomization
namespace: flux-system
spec:
interval: 10m
path: "./nginx"
prune: true
sourceRef:
kind: GitRepository
name: flux-system
targetNamespace: default
wait: true
==> nginx/deployment.yaml <==
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
==> nginx/kustomization.yaml <==
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: default
resources:
- deployment.yaml
The first file (nginx.yaml) tells Flux to look into a specific folder, with an update interval and some other settings. The other files are the kustomization; check the Kubernetes docs for that.