From bcb9c3003ffec465626f2ca2cc5ea71755bc2604 Mon Sep 17 00:00:00 2001 From: Ludovic Piot Date: Mon, 9 Jun 2025 17:05:51 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Add=20R01=20chapter=20about=20te?= =?UTF-8?q?st-ROCKY=20tenant=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- k8s/M6-rocky-cluster-role.yaml | 10 + k8s/M6-rocky-test-kustomization.yaml | 8 + k8s/M6-rocky-test-patch.yaml | 7 + slides/images/M6-R01-config-files.png | Bin 0 -> 75275 bytes .../M6-R01-flux_configure-ROCKY-deployment.md | 265 ++++++++++++++++++ slides/m6.yml | 3 +- 6 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 k8s/M6-rocky-cluster-role.yaml create mode 100644 k8s/M6-rocky-test-kustomization.yaml create mode 100644 k8s/M6-rocky-test-patch.yaml create mode 100644 slides/images/M6-R01-config-files.png create mode 100644 slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md diff --git a/k8s/M6-rocky-cluster-role.yaml b/k8s/M6-rocky-cluster-role.yaml new file mode 100644 index 00000000..a2ab2f47 --- /dev/null +++ b/k8s/M6-rocky-cluster-role.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + namespace: rocky-test + name: rocky-full-access +rules: +- apiGroups: ["", extensions, apps] + resources: [deployments, replicasets, pods, services, ingresses, statefulsets] + verbs: [get, list, watch, create, update, patch, delete] # You can also use [*] diff --git a/k8s/M6-rocky-test-kustomization.yaml b/k8s/M6-rocky-test-kustomization.yaml new file mode 100644 index 00000000..ccaf2d90 --- /dev/null +++ b/k8s/M6-rocky-test-kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../../base/rocky +patches: + - path: M6-rocky-test-patch.yaml + target: + kind: Kustomization diff --git a/k8s/M6-rocky-test-patch.yaml b/k8s/M6-rocky-test-patch.yaml new file mode 100644 index 00000000..b70fbb4e --- /dev/null +++ b/k8s/M6-rocky-test-patch.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 +kind: Kustomization +metadata: + name: rocky + namespace: rocky-test +spec: + path: ./k8s/plain diff --git a/slides/images/M6-R01-config-files.png b/slides/images/M6-R01-config-files.png new file mode 100644 index 0000000000000000000000000000000000000000..9d839043c95363c33d5051b24e951b43d994910d GIT binary patch literal 75275 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 literal 0 HcmV?d00001 diff --git a/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md b/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md new file mode 100644 index 00000000..17eb0f7f --- /dev/null +++ b/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md @@ -0,0 +1,265 @@ +# R01- Configuring **_🎸ROCKY_** deployment with Flux + +The **_⚙️OPS_** team manages 2 distinct envs: _**⚗️TEST**_ et _**🚜PROD**_ +Thanks to _Kustomize_ + 1. it creates a **_base_** common config + 2. this common config is overwritten with a _**⚗️TEST**_ _tenant_-specific configuration + 3. the same applies with a _**🚜PROD**_-specific configuration + +> 💡 This seems complex, but no worries: Flux's CLI handles the essentials. + +--- + +## Creating the **_🎸ROCKY_**-dedicated _tenant_ in _**⚗️TEST**_ env + +- Using the `flux` _CLI_, we create the file configuring the **_🎸ROCKY_** team's dedicated _tenant_… +- … this file takes place in the `base` common configuration for both envs + +.lab[ + +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ + mkdir -p ./tenants/base/rocky && \ + flux create tenant rocky \ + --with-namespace=rocky-test \ + --cluster-role=rocky-full-access \ + --export > ./tenants/base/rocky/rbac.yaml +``` + +] + +--- + +### 📂 ./tenants/base/rocky/rbac.yaml + +Let's see our file… + +3 resources are created: + +- `Namespace`, +- a `ServiceAccount` and +- a `ClusterRoleBinding` + +`Flux` impersonates as this `ServiceAccount` when it applies any resources found in this tenant-dedicated source(s) +By default, the `ServiceAccount` is bound to a `ClusterRole` named `cluster-admin` + +It means that, any team that maintain the sourced `Github` repository is able to apply Kubernetes resources as `cluster-admin` +A not that much isolated tenant! 😕 + +That's why the **_⚙️OPS_** team forces a binding to a specific `ClusterRole` +Let's create this ClusterRole permissions! + +--- + +## _namespace_ isolation for **_🎸ROCKY_** + + +.lab[ + +- Here is a `ClusterRole` with permissions restricted to the dedicated `Namespace` +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ + cp ~/container.training/k8s/M6-rocky-cluster-role.yaml ./tenants/base/rocky/ +``` + +] + +--- + +## Creating `Github` source in Flux for **_🎸ROCKY_** app repository + +A specific _branch_ of the `Github` repository is monitored by the `Flux` source + +.lab[ + +- ⚠️ you may change the **repository URL** to the one of your own clone +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ flux create source git rocky-app \ + --namespace=rocky-test \ + --url=https://github.com/Musk8teers/container.training-spring-music/ \ + --branch=rocky --export > ./tenants/base/rocky/sync.yaml +k8s@shpod:~/fleet-config-using-flux-XXXXX$ flux create kustomization rocky \ + --namespace=rocky-test \ + --service-account=rocky \ + --source=GitRepository/rocky-app \ + --path="./k8s/" --export >> ./tenants/base/rocky/sync.yaml +k8s@shpod:~/fleet-config-using-flux-XXXXX$ cd ./tenants/base/rocky/ && \ + kustomize create --autodetect && cd - +``` + +] + +--- + +### 📂 Flux config files + +Let's review our `Flux` configuration files + +.lab[ + +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ + cat ./tenants/base/rocky/sync.yaml && \ + cat ./tenants/base/rocky/kustomization.yaml +``` + +] + +--- + +## Adding a kustomize patch for _**⚗️TEST**_ cluster deployment + +Remember! +The `Flux` tenant-dedicated configuration is looking for this file `.tenants/test/rocky/kustomization.yaml` +It has been configured here: `clusters/CLOUDY/tenants.yaml` + +All the files we just created are located in `.tenants/base/rocky` (remember the DRY strategy) + +So we have to create a specific kustomization in the right location + +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ + mkdir -p ./tenants/test/rocky && \ + cp ~/container.training/k8s/M6-rocky-test-patch.yaml ./tenants/test/rocky/ && \ + cp ~/container.training/k8s/M6-rocky-test-kustomization.yaml ./tenants/test/rocky/kustomization.yaml +``` + +--- + +### Synchronizing Flux config with its Github repo + +Locally, our `Flux` config repo is ready +The ops team has to push it to `Github` + +.lab[ + +```bash +k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ + git add . && \ + git commit -m':wrench: :construction_worker: add ROCKY tenant configuration' && \ + git push +``` + +] + +--- + +class: pic + +![rocky config files](images/M6-R01-config-files.png) + +--- + +class: extra-details + +### Flux resources for ROCKY tenant 1/2 + +.lab[ + +```bash +k8s@shpod:~$ flux get all -A +NAMESPACE NAME REVISION SUSPENDED + READY MESSAGE +flux-system gitrepository/flux-system main@sha1:8ffd72cf False + True stored artifact for revision 'main@sha1:8ffd72cf' +rocky-test gitrepository/rocky-app rocky@sha1:ffe9f3fe False + True stored artifact for revision 'rocky@sha1:ffe9f3fe' +(…) +``` + +] + +--- + +class: extra-details + +### Flux resources for ROCKY tenant 2/2 + +.lab[ + +```bash +k8s@shpod:~$ flux get all -A +(…) +NAMESPACE NAME REVISION SUSPENDED + READY MESSAGE +flux-system kustomization/flux-system main@sha1:8ffd72cf False + True Applied revision: main@sha1:8ffd72cf +flux-system kustomization/tenant-prod False + False kustomization path not found: stat /tmp/kustomization-1164119282/tenants/prod: no such file or directory +flux-system kustomization/tenant-test main@sha1:8ffd72cf False + True Applied revision: main@sha1:8ffd72cf +rocky-test kustomization/rocky False + False StatefulSet/db dry-run failed (Forbidden): statefulsets.apps "db" is forbidden: User "system:serviceaccount:rocky-test:rocky" cannot patch resource "statefulsets" in API group "apps" at the cluster scope +``` + +] + +And here is our 2nd Flux error(s)! 😅 + +--- + +class: extra-details + +### Flux Kustomization, mutability, … + +🔍 Notice that none of the expected resources is created: +the whole kustomization is rejected, even if the `StatefulSet` is this only resource that fails! + +🔍 Flux Kustomization uses the dry-run feature to templatize the resources and then applying patches onto them +Good but some resources are not completely mutable, such as `StatefulSets` + +We have to fix the mutation by applying the change without having to patch the resource. + +🔍 Simply add the `spec.targetNamespace: rocky-test` to the `Kustomization` named `rocky` + +--- + +class: extra-details + +## And then it's deployed + +You should see the following resources in the `rocky-test` namespace + +.lab[ + +```bash +k8s@shpod-578d64468-tp7r2 ~/$ k get all -n rocky-test +NAME READY STATUS RESTARTS AGE +pod/db-0 1/1 Running 0 47s +pod/web-6c677bf97f-c7pkv 0/1 Running 1 (22s ago) 47s +pod/web-6c677bf97f-p7b4r 0/1 Running 1 (19s ago) 47s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/db ClusterIP 10.32.6.128 5432/TCP 48s +service/web ClusterIP 10.32.2.202 80/TCP 48s + +NAME READY UP-TO-DATE AVAILABLE AGE +deployment.apps/web 0/2 2 0 47s + +NAME DESIRED CURRENT READY AGE +replicaset.apps/web-6c677bf97f 2 2 0 47s + +NAME READY AGE +statefulset.apps/db 1/1 47s +``` + +] + +--- + +## Upgrading ROCKY app + +The Git source named `rocky-app` is pointing at +- a Github repository named [https://github.com/Musk8teers/container.training-spring-music/] +- on its branch named `rocky` + +This branch deploy the v1.0.0 of the _Web_ app: +`spec.template.spec.containers.image: ghcr.io/musk8teers/container.training-spring-music:1.0.0` + +What happens if we upgrade this branch to deploy `v1.0.1` of the _Web_ app? + +--- + +## tenant **_🏭PROD_** + +**_🏭PROD_** tenant is still waiting for its `Flux` configuration, but don't bother for it right now. diff --git a/slides/m6.yml b/slides/m6.yml index 446b1797..385c37ba 100644 --- a/slides/m6.yml +++ b/slides/m6.yml @@ -18,6 +18,7 @@ exclude: content: - k8s/M6-START-a-company-scenario.md - k8S/M6-T02-flux-install.md - # - k8s/M6-R01-flux_configure-ROCKY-deployment.md + - k8s/M6-T03-installing-tenants.md + - k8s/M6-R01-flux_configure-ROCKY-deployment.md # - k8S/M6-T01-TEST-cluster-creation.md # - k8S/M6-T02-1-flux-overview.md