From 97ff18e1c05eb9eeb8d0953c123afbd18c306c5c Mon Sep 17 00:00:00 2001 From: marcel-dempers Date: Sat, 11 Mar 2023 20:57:26 +1100 Subject: [PATCH] flux updates --- kubernetes/fluxcd/README.md | 40 +++++++++---------- .../apps/example-app-1/imagepolicy.yaml | 11 ----- .../apps/example-app-1/imagerepository.yaml | 10 ----- .../repositories/example-app-1/src/app.py | 2 +- .../repositories/example-app-2/src/app.py | 6 +++ .../repositories/example-app-2/src/dockerfile | 8 ++++ 6 files changed, 35 insertions(+), 42 deletions(-) delete mode 100644 kubernetes/fluxcd/repositories/config/apps/example-app-1/imagepolicy.yaml delete mode 100644 kubernetes/fluxcd/repositories/config/apps/example-app-1/imagerepository.yaml create mode 100644 kubernetes/fluxcd/repositories/example-app-2/src/app.py create mode 100644 kubernetes/fluxcd/repositories/example-app-2/src/dockerfile diff --git a/kubernetes/fluxcd/README.md b/kubernetes/fluxcd/README.md index e590f24..569d38d 100644 --- a/kubernetes/fluxcd/README.md +++ b/kubernetes/fluxcd/README.md @@ -8,14 +8,6 @@ In this guide we we''ll need a Kubernetes cluster for testing. Let's create one kind create cluster --name fluxcd --image kindest/node:v1.23.5 ``` -See cluster up and running: - -``` -kubectl get nodes -NAME STATUS ROLES AGE VERSION -fluxcd-control-plane Ready control-plane,master 2m12s v1.23.5 -``` - ## Run a container to work in ### run Alpine Linux: @@ -34,13 +26,6 @@ curl -sLO https://storage.googleapis.com/kubernetes-release/release/`curl -s htt chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl -# install helm - -curl -o /tmp/helm.tar.gz -LO https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz -tar -C /tmp/ -zxvf /tmp/helm.tar.gz -mv /tmp/linux-amd64/helm /usr/local/bin/helm -chmod +x /usr/local/bin/helm - ``` ### test cluster access: @@ -134,18 +119,32 @@ https://fluxcd.io/flux/guides/repository-structure/ ## build our app -``` -cd kubernetes/fluxcd/repositories/example-app-1/src +Let's say we have a microservice called `example-app-1` and it has its own GitHub repo somewhere.
+For demo, it's code is under `kubernetes/fluxcd/repositories/example-app-1/` +``` +# go to our "git repo" +cd kubernetes/fluxcd/repositories/example-app-1 +# check the files +ls + +cd src docker build . -t example-app-1:0.0.1 #load the image to our test cluster so we dont need to push to a registry kind load docker-image example-app-1:0.0.1 --name fluxcd ``` -## deploy our app +## setup our gitops pipeline + +Now we will also have a "config" GitHub repo where configuration files for GitOps live. ``` +cd kubernetes/fluxcd + +# tell flux where our Git repo is and where the YAML is +# this is once off +# flux will monitor the example-app-1 Git repo for when any infrastructure changes, it will sync kubectl -n default apply -f repositories/config/apps/example-app-1/gitrepository.yaml kubectl -n default apply -f repositories/config/apps/example-app-1/kustomization.yaml @@ -160,18 +159,19 @@ kubectl port-forward svc/example-app-1 80:80 ``` +Now we have setup CD, let's take a look at CI
+ ## changes to our app Once we make changes to our `app.py` we can build a new image with a new tag
``` -cd kubernetes/fluxcd/repositories/example-app-1/src - docker build . -t example-app-1:0.0.2 #load the image to our test cluster so we dont need to push to a registry kind load docker-image example-app-1:0.0.2 --name fluxcd +# update our kubernetes deployment YAML image tag # git commit & git push to branch! ``` diff --git a/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagepolicy.yaml b/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagepolicy.yaml deleted file mode 100644 index 062a334..0000000 --- a/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagepolicy.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: image.toolkit.fluxcd.io/v1beta2 -kind: ImagePolicy -metadata: - name: example-app-1 - namespace: default -spec: - imageRepositoryRef: - name: example-app-1 - policy: - semver: - range: 0.0.x \ No newline at end of file diff --git a/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagerepository.yaml b/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagerepository.yaml deleted file mode 100644 index 584f833..0000000 --- a/kubernetes/fluxcd/repositories/config/apps/example-app-1/imagerepository.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: image.toolkit.fluxcd.io/v1beta2 -kind: ImageRepository -metadata: - name: example-app-1 - namespace: default -spec: - image: docker.io/aimvector/example-app-1 - interval: 1m0s - secretRef: - name: dockerhub-credential \ No newline at end of file diff --git a/kubernetes/fluxcd/repositories/example-app-1/src/app.py b/kubernetes/fluxcd/repositories/example-app-1/src/app.py index ce26a53..6f5332f 100644 --- a/kubernetes/fluxcd/repositories/example-app-1/src/app.py +++ b/kubernetes/fluxcd/repositories/example-app-1/src/app.py @@ -3,4 +3,4 @@ app = Flask(__name__) @app.route("/") def hello(): - return "Hello World! v1.0.0.1" \ No newline at end of file + return "Hello World! v1.0.0.2" \ No newline at end of file diff --git a/kubernetes/fluxcd/repositories/example-app-2/src/app.py b/kubernetes/fluxcd/repositories/example-app-2/src/app.py new file mode 100644 index 0000000..ce26a53 --- /dev/null +++ b/kubernetes/fluxcd/repositories/example-app-2/src/app.py @@ -0,0 +1,6 @@ +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello World! v1.0.0.1" \ No newline at end of file diff --git a/kubernetes/fluxcd/repositories/example-app-2/src/dockerfile b/kubernetes/fluxcd/repositories/example-app-2/src/dockerfile new file mode 100644 index 0000000..350b381 --- /dev/null +++ b/kubernetes/fluxcd/repositories/example-app-2/src/dockerfile @@ -0,0 +1,8 @@ +FROM python:3.7.3-alpine3.9 as base + +RUN pip install Flask==2.0.3 + +WORKDIR /app +COPY app.py /app/ +ENV FLASK_APP=app.py +CMD flask run -h 0.0.0 -p 5000