diff --git a/k8s/M6-network-policies.yaml b/k8s/M6-network-policies.yaml new file mode 100644 index 00000000..4d87a658 --- /dev/null +++ b/k8s/M6-network-policies.yaml @@ -0,0 +1,35 @@ +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: deny-from-other-namespaces +spec: + podSelector: {} + ingress: + - from: + - podSelector: {} +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: allow-webui +spec: + podSelector: + matchLabels: + app: web + ingress: + - from: [] +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: allow-db +spec: + podSelector: + matchLabels: + app: db + ingress: + - from: + - podSelector: + matchLabels: + app: web diff --git a/k8s/M6-openebs-components.yaml b/k8s/M6-openebs-components.yaml new file mode 100644 index 00000000..d44b3b2b --- /dev/null +++ b/k8s/M6-openebs-components.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.5.1 + pod-security.kubernetes.io/warn: restricted + pod-security.kubernetes.io/warn-version: latest + name: openebs diff --git a/k8s/M6-openebs-kustomization.yaml b/k8s/M6-openebs-kustomization.yaml new file mode 100644 index 00000000..d4db7615 --- /dev/null +++ b/k8s/M6-openebs-kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: openebs +resources: + - M6-openebs-components.yaml + - sync.yaml +configMapGenerator: + - name: openebs-values + files: + - values.yaml=M6-openebs-values.yaml +configurations: + - M6-openebs-kustomizeconfig.yaml diff --git a/k8s/M6-openebs-kustomizeconfig.yaml b/k8s/M6-openebs-kustomizeconfig.yaml new file mode 100644 index 00000000..7c31b227 --- /dev/null +++ b/k8s/M6-openebs-kustomizeconfig.yaml @@ -0,0 +1,6 @@ +nameReference: +- kind: ConfigMap + version: v1 + fieldSpecs: + - path: spec/valuesFrom/name + kind: HelmRelease diff --git a/k8s/M6-openebs-values.yaml b/k8s/M6-openebs-values.yaml new file mode 100644 index 00000000..57f563c9 --- /dev/null +++ b/k8s/M6-openebs-values.yaml @@ -0,0 +1,15 @@ +# helm install openebs --namespace openebs openebs/openebs +# --set engines.replicated.mayastor.enabled=false +# --set lvm-localpv.lvmNode.kubeletDir=/var/lib/k0s/kubelet/ +# --create-namespace +engines: + replicated: + mayastor: + enabled: false +# Needed for k0s install since kubelet install is slightly divergent from vanilla install >:-( +lvm-localpv: + lvmNode: + kubeletDir: /var/lib/k0s/kubelet/ +localprovisioner: + hostpathClass: + isDefaultClass: true diff --git a/slides/k8s/M6-K01-METAL-install.md b/slides/k8s/M6-K01-METAL-install.md new file mode 100644 index 00000000..7372a1b9 --- /dev/null +++ b/slides/k8s/M6-K01-METAL-install.md @@ -0,0 +1,349 @@ +# K01- Installing a Kubernetes cluster from scratch + +We operated a managed cluster from **Scaleway** `Kapsule`. + +It's great! Most batteries are included: + +- storage classes, with an already configured default one +- a default CNI with `Cilium` +
(`Calico` is supported too) +- a _IaaS_ load-balancer that is manageable by `ingress-controllers` +- a management _WebUI_ with the Kubernetes dashboard +- an observability stack with `metrics-server` and the Kubernetes dashboard + +But what about _on premises_ needs? + +--- + +class: extra-details + +## On premises Kubernetes distributions + +The [CNCF landscape](https://landscape.cncf.io/?fullscreen=yes&zoom=200&group=certified-partners-and-providers) currently lists **61!** Kubernetes distributions, today. +Not speaking of Kubernetes managed services from Cloud providers… + +Please, refer to the [`Setting up Kubernetes` chapter in the High Five M2 module](./2.yml.html#toc-setting-up-kubernetes) for more infos about Kubernetes distributions. + +--- + +## Introducing k0s + +Nowadays, some "light" distros are considered good enough to run production clusters. +That's the case for `k0s`. + +It's an open source Kubernetes lightweight distribution. +Mainly relying on **Mirantis**, a long-time software vendor in Kubernetes ecosystem. +(The ones who bought `Docker Enterprise` a long time ago. remember?) + +`k0s` aims to be both + +- a lightweight distribution for _edge-computing_ and development pupose +- an enterprise-grade HA distribution fully supported by its editor +
`MKE4` and `kordent` leverage on `k0s` + +--- + +### `k0s` package + +Its single binary includes: + +- a CRI (`containerd`) +- Kubernetes vanilla control plane components (including both `etcd`) +- a vanilla network stack + - `kube-router` + - `kube-proxy` + - `coredns` + - `konnectivity` +- `kubectl` CLI +- install / uninstall features +- backup / restore features + +--- + +class: pic + +![k0s package](images/M6-k0s-packaging.png) + +--- + +class: extra-details + +### Konnectivity + +You've seen that Kubernetes cluster architecture is very versatile. +I'm referring to the [`Kubernetes architecture` chapter in the High Five M5 module](./5.yml.html#toc-kubernetes-architecture) + +Network communications between control plane components and worker nodes might be uneasy to configure. +`Konnectivity` is a response to this pain. It acts as an RPC proxy for any communication initiated from control plane to workers. + +These communications are listed in [`Kubernetes internal APIs` chapter in the High Five M5 module](https://2025-01-enix.container.training/5.yml.html#toc-kubernetes-internal-apis) + +The agent deployed on each worker node maintains an RPC tunnel with the one deployed on control plane side. + +--- + +class: pic + +![konnectivity architecture](images/M6-konnectivity-architecture.png) + +--- + +## Installing `k0s` + +It installs with a one-liner command + +- either in single-node lightweight footprint +- or in multi-nodes HA footprint + +.lab[ + +- Get the binary + +```bash +docker@m621: ~$ wget https://github.com/k0sproject/k0sctl/releases/download/v0.25.1/k0sctl-linux-amd64 +``` + +] + +--- + +### Prepare the config file + +.lab[ + +- Create the config file + +```bash +docker@m621: ~$ k0sctl init \ + --controller-count 3 \ + --user docker \ + --k0s m621 m622 m623 > k0sctl.yaml +``` + +- change the following field: `spec.hosts[*].role: controller+worker` +- add the following fields: `spec.hosts[*].noTaints: true` + +```bash +docker@m621: ~$ k0sctl apply --config k0sctl.yaml +``` + +] + +--- + +### And the famous one-liner + +.lab[ + +```bash +k8s@shpod: ~$ k0sctl apply --config k0sctl.yaml +``` + +] + +--- + +### Check that k0s installed correctly + +.lab[ + +```bash +docker@m621 ~$ sudo k0s status +Version: v1.33.1+k0s.1 +Process ID: 60183 +Role: controller +Workloads: true +SingleNode: false +Kube-api probing successful: true +Kube-api probing last error: + +docker@m621 ~$ sudo k0s etcd member-list +{"members":{"m621":"https://10.10.3.190:2380","m622":"https://10.10.2.92:2380","m623":"https://10.10.2.110:2380"}} +``` + +] + +--- + +### `kubectl` is included + +.lab[ + +```bash +docker@m621 ~$ sudo k0s kubectl get nodes +NAME STATUS ROLES AGE VERSION +m621 Ready control-plane 66m v1.33.1+k0s +m622 Ready control-plane 66m v1.33.1+k0s +m623 Ready control-plane 66m v1.33.1+k0s + +docker@m621 ~$ sudo k0s kubectl run shpod --image jpetazzo/shpod + +``` + +] + +--- + +class: extra-details + +### Single node install (for info!) + +For testing purpose, you may want to use a single-node (yet `etcd`-geared) install… + +.lab[ + +- Install it + +```bash +docker@m621 ~$ curl -sSLf https://get.k0s.sh | sudo sh +docker@m621 ~$ sudo k0s install controller --single +docker@m621 ~$ sudo k0s start +``` + +- Reset it + +```bash +docker@m621 ~$ sudo k0s start +docker@m621 ~$ sudo k0s reset +``` + +] + +--- + +## Deploying shpod + +.lab[ + +```bash +docker@m621 ~$ sudo k0s kubectl apply -f https://shpod.in/shpod.yaml +docker@m621 ~$ sudo k0s kubectl apply -f https://shpod.in/shpod.yaml +``` +] + +--- + +## Flux install + +We'll install `Flux`. +And replay the all scenario a 2nd time. +Let's face it: we don't have that much time. 😅 + +Since all our install and configuration is `GitOps`-based, we might just leverage on copy-paste and code configuration… +Maybe. + +Let's copy the 📂 `./clusters/CLOUDY` folder and rename it 📂 `./clusters/METAL`. + +--- + +### Modifying Flux config 📄 files + +- In 📄 file `./clusters/METAL/flux-system/gotk-sync.yaml` +
change the `Kustomization` value `spec.path: ./clusters/METAL` + - ⚠️ We'll have to adapt the `Flux` _CLI_ command line + +- And that's pretty much it! + - We'll see if anything goes wrong on that new cluster + +--- + +### Connecting to our dedicated `Github` repo to host Flux config + +.lab[ + +- let's replace `GITHUB_TOKEN` and `GITHUB_REPO` values +- don't forget to change the patch to `clusters/METAL` + +```bash +k8s@shpod:~$ export GITHUB_TOKEN="my-token" && \ + export GITHUB_USER="container-training-fleet" && \ + export GITHUB_REPO="fleet-config-using-flux-XXXXX" + +k8s@shpod:~$ flux bootstrap github \ + --owner=${GITHUB_USER} \ + --repository=${GITHUB_REPO} \ + --team=OPS \ + --team=ROCKY --team=MOVY \ + --path=clusters/METAL +``` +] + +--- + +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + +### Flux deployed our complete stack + +Everything seems to be here but… + +- one database is in `Pending` state + +- our `ingresses` don't work well + +```bash +k8s@shpod ~$ curl --header 'Host: rocky.test.enixdomain.com' http://${myIngressControllerSvcIP} +curl: (52) Empty reply from server +``` + +--- + +### Fixing the Ingress + +The current `ingress-nginx` configuration leverages on specific annotations used by Scaleway to bind a _IaaS_ load-balancer to the `ingress-controller`. +We don't have such kind of things here.😕 + +- We could bind our `ingress-controller` to a `NodePort`. +`ingress-nginx` install manifests propose it here: +
https://github.com/kubernetes/ingress-nginx/deploy/static/provider/baremetal + +- In the 📄file `./clusters/METAL/ingress-nginx/sync.yaml`, +
change the `Kustomization` value `spec.path: ./deploy/static/provider/baremetal` + +--- + +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + +### Troubleshooting the database + +One of our `db-0` pod is in `Pending` state. + +```bash +k8s@shpod ~$ k get pods db-0 -n *-test -oyaml +(…) +status: + conditions: + - lastProbeTime: null + lastTransitionTime: "2025-06-11T11:15:42Z" + message: '0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. + preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.' + reason: Unschedulable + status: "False" + type: PodScheduled + phase: Pending + qosClass: Burstable +``` + +--- + +### Troubleshooting the PersistentVolumeClaims + +```bash +k8s@shpod ~$ k get pvc postgresql-data-db-0 -n *-test -o yaml +(…) + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal FailedBinding 9s (x182 over 45m) persistentvolume-controller no persistent volumes available for this claim and no storage class is set +``` + +No `storage class` is available on this cluster. +We hadn't the problem on our managed cluster since a default storage class was configured and then associated to our `PersistentVolumeClaim`. + +Why is there no problem with the other database? diff --git a/slides/k8s/M6-K03-openebs-install.md b/slides/k8s/M6-K03-openebs-install.md new file mode 100644 index 00000000..0bb25132 --- /dev/null +++ b/slides/k8s/M6-K03-openebs-install.md @@ -0,0 +1,129 @@ +# K03- Installing OpenEBS as our CSI + +`OpenEBS` is a _CSI_ solution capable of hyperconvergence, synchronous replication and other extra features. +It installs with `Helm` charts. + +- `Flux` is able to watch `Helm` repositories and install `HelmReleases` +- To inject its configuration into the `Helm chart` , `Flux` relies on a `ConfigMap` including the `values.yaml` file + +.lab[ + +```bash +k8s@shpod ~$ mkdir -p ./clusters/METAL/openebs/ && \ + cp -pr ~/container.training/k8s/M6-openebs-*.yaml \ + ./clusters/METAL/openebs/ && \ + cd ./clusters/METAL/openebs/ && \ + mv M6-openebs-kustomization.yaml kustomization.yaml && \ + cd - +``` + +] + +--- + +## Creating an `Helm` source in Flux for OpenEBS Helm chart + +.lab[ + +```bash +k8s@shpod ~$ flux create source helm openebs \ + --url=https://openebs.github.io/openebs \ + --interval=3m \ + --export > ./clusters/METAL/openebs/sync.yaml +``` + +] + +--- + +## Creating the `HelmRelease` in Flux + +.lab[ + +```bash +k8s@shpod ~$ flux create helmrelease openebs \ + --namespace=openebs \ + --source=HelmRepository/openebs.flux-system \ + --chart=openebs \ + --values-from=ConfigMap/openebs-values \ + --export >> ./clusters/METAL/openebs/sync.yaml +``` + +] + +--- + +## 📂 Let's review the files + +- `M6-openebs-components.yaml` +
To include the `Flux` resources in the same _namespace_ where `Flux` installs the `OpenEBS` resources, we need to create the _namespace_ **before** the installation occurs + +- `sync.yaml` +
The resources `Flux` uses to watch and get the `Helm chart` + +- `M6-openebs-values.yaml` +
the `values.yaml` file that will be injected into the `Helm chart` + +- `kustomization.yaml` +
This one is a bit special: it includes a [ConfigMap generator](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/configmapgenerator/) + +- `M6-openebs-kustomizeconfig.yaml` +

This one is tricky: in order for `Flux` to trigger an upgrade of the `Helm Release` when the `ConfigMap` is altered, you need to explain to the `Kustomize ConfigMap generator` how the resources are relating with each others. 🤯 + +And here we go! + +--- + +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + +## And the result + +Now, we have a _cluster_ featuring `openEBS`. +But still… The PersistentVolumeClaim remains in `Pending` state!😭 + +```bash +k8s@shpod ~$ kubectl get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +openebs-hostpath openebs.io/local Delete WaitForFirstConsumer false 82m +``` +We still don't have a default `StorageClass`!😤 + +--- + +### Manually enforcing the default `StorageClass` + +Even if Flux is constantly reconciling our resources, we still are able to test evolutions by hand. + +.lab[ + +```bash +k8s@shpod ~$ flux suspend helmrelease openebs -n openebs +► suspending helmrelease openebs in openebs namespace +✔ helmrelease suspended +k8s@shpod ~$ kubectl patch storageclass openebs-hostpath \ + -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' + +k8s@shpod ~$ k get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 82m +``` + +] + +--- + +### Now the database is OK + +```bash +k8s@shpod ~$ get pvc,pods -n movy-test +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +persistentvolumeclaim/postgresql-data-db-0 Bound pvc-ede1634f-2478-42cd-8ee3-7547cd7cdde2 1Gi RWO openebs-hostpath 20m + +NAME READY STATUS RESTARTS AGE +pod/db-0 1/1 Running 0 5h43m +(…) +``` diff --git a/slides/k8s/M6-M01-adding-MOVY-tenant.md b/slides/k8s/M6-M01-adding-MOVY-tenant.md index d81ef26d..4df0ad08 100644 --- a/slides/k8s/M6-M01-adding-MOVY-tenant.md +++ b/slides/k8s/M6-M01-adding-MOVY-tenant.md @@ -87,6 +87,12 @@ k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ --- +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + class: extra-details ### Another Flux error? @@ -122,6 +128,16 @@ k8s@shpod:~$ flux reconcile source git movy-app -n movy-test ] +--- + +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + +### New branch detected + You now have a second app responding on [http://movy.test.mybestdomain.com] But as of now, it's just the same as the **_🎸ROCKY_** one. @@ -176,6 +192,28 @@ pod network is still full mesh and any connection is authorized. --- +## Adding NetworkPolicies to **_🎸ROCKY_** and **_🎬MOVY_** namespaces + +`Network policies` may be seen as the firewall feature in the pod network. +They rules ingress and egress network connections considering a described subset of pods. + +Please, refer to the [`Network policies` chapter in the High Five M4 module](./4.yml.html#toc-network-policies) + +- In our case, we just add the file `~/container.training/k8s/M6-network-policies.yaml` +
in our `./tenants/base/movy` folder + +- without forgetting to update our `kustomization.yaml` file + +- and without forgetting to commit 😁 + +--- + +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + ### 🗺️ Where are we in our scenario?
@@ -247,13 +285,34 @@ gitGraph
     checkout TEST-env
     merge MOVY tag:'MOVY v1.0.3' type: REVERSE
 
+    checkout OPS
+    commit id:'Network policies'
+    checkout TEST-env
+    merge OPS type: HIGHLIGHT
+
     checkout YouRHere
     commit id:'x'
     checkout OPS
     merge YouRHere id:'YOU ARE HERE'
 
     checkout OPS
-    commit id:'Network policies'
-    checkout TEST-env
+    commit id:'k0s install on METAL cluster' tag:'K01'
+    commit id:'Flux config. for METAL cluster' tag:'K02'
+    branch METAL_TEST-PROD order:3
+    commit id:'ROCKY/MOVY tenants on METAL' type: HIGHLIGHT
+    checkout OPS
+    commit id:'Flux config. for OpenEBS' tag:'K03'
+    checkout METAL_TEST-PROD
+    merge OPS id:'openEBS on METAL' type: HIGHLIGHT
+
+    checkout OPS
+    commit id:'Prometheus install'
+    checkout METAL_TEST-PROD
+    merge OPS type: HIGHLIGHT
+
+    checkout OPS
+    commit id:'Kyverno install'
+    commit id:'Kyverno rules'
+    checkout METAL_TEST-PROD
     merge OPS type: HIGHLIGHT
 
diff --git a/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md b/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md index 5001eb30..22b5d950 100644 --- a/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md +++ b/slides/k8s/M6-R01-flux_configure-ROCKY-deployment.md @@ -167,6 +167,12 @@ k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ class: pic +![Running Mario](images/M6-running-Mario.gif) + +--- + +class: pic + ![rocky config files](images/M6-R01-config-files.png) --- diff --git a/slides/k8s/M6-START-a-company-scenario.md b/slides/k8s/M6-START-a-company-scenario.md index f57a1640..3fdc2889 100644 --- a/slides/k8s/M6-START-a-company-scenario.md +++ b/slides/k8s/M6-START-a-company-scenario.md @@ -249,9 +249,9 @@ The **_⚙️OPS_** team aims to provide clusters offering the following feature }%% gitGraph commit id:"0" tag:"start" - branch ROCKY order:3 - branch MOVY order:4 - branch YouRHere order:5 + branch ROCKY order:4 + branch MOVY order:5 + branch YouRHere order:6 checkout YouRHere commit id:'x' @@ -314,13 +314,28 @@ gitGraph checkout OPS commit id:'Network policies' checkout TEST-env + merge OPS type: HIGHLIGHT tag:'T07' + + checkout OPS + commit id:'k0s install on METAL cluster' tag:'K01' + commit id:'Flux config. for METAL cluster' tag:'K02' + branch METAL_TEST-PROD order:3 + commit id:'ROCKY/MOVY tenants on METAL' type: HIGHLIGHT + checkout OPS + commit id:'Flux config. for OpenEBS' tag:'K03' + checkout METAL_TEST-PROD + merge OPS id:'openEBS on METAL' type: HIGHLIGHT + + checkout OPS + commit id:'Prometheus install' + checkout METAL_TEST-PROD merge OPS type: HIGHLIGHT - checkout MOVY - commit id:'MOVY HELM chart' tag:'M03' - - checkout TEST-env - merge MOVY tag:'MOVY v1.0' + checkout OPS + commit id:'Kyverno install' + commit id:'Kyverno rules' + checkout METAL_TEST-PROD + merge OPS type: HIGHLIGHT checkout OPS commit id:'Flux config. for PROD tenant' tag:'P01' @@ -333,21 +348,8 @@ gitGraph checkout PROD-env merge ROCKY tag:'ROCKY v1.0.2' - checkout OPS - commit id:'Prometheus install' - checkout PROD-env - merge OPS type: HIGHLIGHT - - checkout OPS - commit id:'Kyverno install' - commit id:'Kyverno rules' - checkout PROD-env - merge OPS type: HIGHLIGHT - - checkout OPS - commit id:'Add OpenEBS' + checkout MOVY + commit id:'MOVY HELM chart' tag:'M03' checkout TEST-env - merge OPS id:'patch dedicated to PROD' type: REVERSE - checkout PROD-env - merge OPS type: HIGHLIGHT + merge MOVY tag:'MOVY v1.0' diff --git a/slides/k8s/M6-T03-installing-tenants.md b/slides/k8s/M6-T03-installing-tenants.md index 45418c74..336b450e 100644 --- a/slides/k8s/M6-T03-installing-tenants.md +++ b/slides/k8s/M6-T03-installing-tenants.md @@ -103,6 +103,12 @@ Let's review the `fleet-config-using-flux-XXXXX/clusters/CLOUDY/tenants.yaml` fi --- +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + ### Our 1st Flux error .lab[ diff --git a/slides/k8s/M6-T05-ingress-config.md b/slides/k8s/M6-T05-ingress-config.md index 4c72d0ec..5eb56b9d 100644 --- a/slides/k8s/M6-T05-ingress-config.md +++ b/slides/k8s/M6-T05-ingress-config.md @@ -88,6 +88,12 @@ k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ class: pic +![Running Mario](images/M6-running-Mario.gif) + +--- + +class: pic + ![Ingress-nginx provisionned a IaaS load-balancer in Scaleway Cloud services](images/M6-ingress-nginx-scaleway-lb.png) --- @@ -131,6 +137,12 @@ k8s@shpod:~/fleet-config-using-flux-XXXXX$ \ --- +class: pic + +![Running Mario](images/M6-running-Mario.gif) + +--- + ### Here is the result! After Flux reconciled the whole bunch of sources and kustomizations, you should see diff --git a/slides/k8s/M6-mermaid.md b/slides/k8s/M6-mermaid.md deleted file mode 100644 index 3a5e783c..00000000 --- a/slides/k8s/M6-mermaid.md +++ /dev/null @@ -1,111 +0,0 @@ -%%{init: - { - "theme": "default", - "gitGraph": { - "mainBranchName": "OPS", - "mainBranchOrder": 0 - } - } -}%% -gitGraph - commit id:"0" tag:"start" - branch ROCKY order:3 - branch MOVY order:4 - branch YouRHere order:5 - - checkout YouRHere - commit id:'x' - checkout OPS - merge YouRHere id:'YOU ARE HERE' - - checkout OPS - commit id:'Flux install on CLOUDY cluster' tag:'T01' - branch TEST-env order:1 - commit id:'FLUX install on TEST' tag:'T02' type: HIGHLIGHT - - checkout OPS - commit id:'ROCKY config.' tag:'T03' - commit id:'namespace isolation by RBAC' - checkout TEST-env - merge OPS id:'ROCKY tenant creation' tag:'T04' - - checkout OPS - commit id:'ROCKY deploy. config.' tag:'R01' - - checkout TEST-env - merge OPS id:'FLUX ready to deploy ROCKY' type: HIGHLIGHT tag:'R02' - - checkout ROCKY - commit id:'ROCKY' tag:'v1.0.0' - - checkout TEST-env - merge ROCKY tag:'ROCKY v1.0.0' - - checkout OPS - commit id:'ROCKY patch for ingress config.' tag:'R03' - checkout TEST-env - merge OPS id:'ingress config. for ROCKY app' - - checkout OPS - commit id:'Ingress-controller config.' tag:'T05' - checkout TEST-env - merge OPS id:'Ingress-controller install' type: HIGHLIGHT tag:'T06' - - checkout ROCKY - commit id:'blue color' tag:'v1.0.1' - checkout TEST-env - merge ROCKY tag:'ROCKY v1.0.1' - - checkout ROCKY - commit id:'pink color' tag:'v1.0.2' - checkout TEST-env - merge ROCKY tag:'ROCKY v1.0.2' - - checkout MOVY - commit id:'MOVY' tag:'v1.0.3' - checkout TEST-env - merge MOVY tag:'MOVY v1.0.3' type: REVERSE - - checkout MOVY - commit id:'MOVY HELM chart' tag:'C01' - - checkout OPS - commit id:'FLUX config for MOVY deployment' tag:'C02' - checkout TEST-env - merge OPS id:'FLUX ready to deploy MOVY' type: HIGHLIGHT tag:'C03' - - checkout TEST-env - merge MOVY tag:'MOVY v1.0' - - checkout ROCKY - commit id:'fix namespace' tag:'v1.1.1' - checkout TEST-env - merge ROCKY tag:'ROCKY v1.1.1' - - checkout ROCKY - commit id:'add a field' tag:'v1.2' - checkout TEST-env - merge ROCKY tag:'ROCKY v1.2' - - checkout OPS - commit id:'Kyverno install' - commit id:'Kyverno rules' - checkout TEST-env - merge OPS type: HIGHLIGHT - - checkout OPS - commit id:'Network policies' - checkout TEST-env - merge OPS type: HIGHLIGHT - - checkout OPS - branch PROD-env order:2 - commit id:'FLUX install on PROD' - commit id:'PROD cluster configuration' - - checkout OPS - commit id:'Add OpenEBS' - checkout TEST-env - merge OPS id:'patch dedicated to PROD' type: REVERSE - checkout PROD-env - merge OPS type: HIGHLIGHT diff --git a/slides/m6.yml b/slides/m6.yml index 477a74e9..c4705d01 100644 --- a/slides/m6.yml +++ b/slides/m6.yml @@ -22,4 +22,5 @@ content: - k8s/M6-R01-flux_configure-ROCKY-deployment.md - k8s/M6-T05-ingress-config.md - k8s/M6-M01-adding-MOVY-tenant.md - - k8s/M6-k0s-install.md \ No newline at end of file + - k8s/M6-K01-METAL-install.md + - k8s/M6-K03-openebs-install.md