fluxcd update restructure repo

This commit is contained in:
marcel-dempers 2023-03-20 22:08:00 +11:00
parent f8e77439aa
commit 8acc5661ad
14 changed files with 53 additions and 21 deletions

View File

@ -78,7 +78,7 @@ Then we can bootstrap it using the GitHub bootstrap method
flux bootstrap github \ flux bootstrap github \
--owner=marcel-dempers \ --owner=marcel-dempers \
--repository=docker-development-youtube-series \ --repository=docker-development-youtube-series \
--path=kubernetes/fluxcd/repositories/config/clusters/dev-cluster \ --path=kubernetes/fluxcd/repositories/infra-repo/clusters/dev-cluster \
--personal \ --personal \
--branch fluxcd-2022 --branch fluxcd-2022
@ -95,27 +95,42 @@ Check the source code that `flux bootstrap` created
git pull origin <branch-name> git pull origin <branch-name>
``` ```
# Repository structure # Understanding GitOps Repository structures
https://fluxcd.io/flux/guides/repository-structure/ Generally, in GitOps you have a dedicated repo for infrastructure templates. </br>
Your infrastructure will "sync" from the this repo </br>
* Mono Repo ```
developer +-----------+ +----------+
| | | CI |
----------> | REPO(code)|---> | PIPELINE |
+-----------+ +----------+
| commit
v
+----------+ sync +----------+
| INFRA |-------> |INFRA |
| (k8s) | |REPO(yaml)|
+----------+ +----------+
```
Flux repository structure [documentation](https://fluxcd.io/flux/guides/repository-structure/)
* Mono Repo (all k8s YAML in same "infra repo")
* Repo per team * Repo per team
* Repo per app * Repo per app
Take note in this guide the folders under `kubernetes/fluxcd/repositories` represent different GIT repos
``` ```
- apps - repositories
- infra-repo
- example-app-1 - example-app-1
- example-app-2 - example-app-2
- infrastructure
- ingress-nginx
- monitoring
- clusters
-dev-cluster
-prod-cluster
``` ```
## build our app ## build our example apps
Let's say we have a microservice called `example-app-1` and it has its own GitHub repo somewhere. </br> Let's say we have a microservice called `example-app-1` and it has its own GitHub repo somewhere. </br>
For demo, it's code is under `kubernetes/fluxcd/repositories/example-app-1/` For demo, it's code is under `kubernetes/fluxcd/repositories/example-app-1/`
@ -135,7 +150,7 @@ kind load docker-image example-app-1:0.0.1 --name fluxcd
## setup our gitops pipeline ## setup our gitops pipeline
Now we will also have a "config" GitHub repo where configuration files for GitOps live. Now we will also have a "infra-repo" GitHub repo where infrastructure configuration files for GitOps live.
``` ```
cd kubernetes/fluxcd cd kubernetes/fluxcd
@ -143,8 +158,8 @@ cd kubernetes/fluxcd
# tell flux where our Git repo is and where the YAML is # tell flux where our Git repo is and where the YAML is
# this is once off # this is once off
# flux will monitor the example-app-1 Git repo for when any infrastructure changes, it will sync # 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/infra-repo/apps/example-app-1/gitrepository.yaml
kubectl -n default apply -f repositories/config/apps/example-app-1/kustomization.yaml kubectl -n default apply -f repositories/infra-repo/apps/example-app-1/kustomization.yaml
# check our flux resources # check our flux resources
kubectl -n default describe gitrepository example-app-1 kubectl -n default describe gitrepository example-app-1
@ -159,7 +174,7 @@ kubectl port-forward svc/example-app-1 80:80
Now we have setup CD, let's take a look at CI </br> Now we have setup CD, let's take a look at CI </br>
## changes to our app ## changes to our example apps
Once we make changes to our `app.py` we can build a new image with a new tag </br> Once we make changes to our `app.py` we can build a new image with a new tag </br>
@ -175,14 +190,31 @@ kind load docker-image example-app-1:0.0.2 --name fluxcd
If we wait a minute or so we can ` kubectl port-forward svc/example-app-1 80:80` again and see the changes If we wait a minute or so we can ` kubectl port-forward svc/example-app-1 80:80` again and see the changes
## deploy by updating manifest ## automate deploy by updating manifest
So all we did to update our app is to build a new image, push it to our registry and update the image tag in our kubernetes deployment YAML file and `flux` will sync it. </br> So all we did to update our app is to build a new image, push it to our registry and update the image tag in our kubernetes deployment YAML file and `flux` will sync it. </br>
This is generally the role of CI, where `flux` concern is mainly CD. </br> This is generally the role of CI, where `flux` concern is mainly CD. </br>
Here is an example on [how to automate that](https://fluxcd.io/flux/use-cases/gh-actions-manifest-generation/) Here is an example on [how to automate that](https://fluxcd.io/flux/use-cases/gh-actions-manifest-generation/)
## deploy by image scanning ## automate deploy by image scanning
```
docker push
developer +-----------+ +----------+ +-------------+
| | | CI | |IMAGE |
----------> | REPO(code)|---> | PIPELINE | ----->|REGISTRY |
+-----------+ +----------+ +-------------+
^
|sync
|
+----------+ commit +----------+
|INFRA | <-------- | INFRA |
|REPO(yaml)| | (k8s) |
+----------+ +----------+
```
An alternative method is to use your CI to build and push a newly tagged image to your registry (same as first option) and use [Flux image scanner](https://fluxcd.io/flux/guides/image-update/#configure-image-updates) to trigger the rollout instead of automating a commit to your config repo. </br> An alternative method is to use your CI to build and push a newly tagged image to your registry (same as first option) and use [Flux image scanner](https://fluxcd.io/flux/guides/image-update/#configure-image-updates) to trigger the rollout instead of automating a commit to your config repo. </br>