# 02 - Kubernetes

## ☸️ 1. Les fondamentaux Kubernetes

### Pod

- **Plus petite unité déployable de Kubernetes**
- Un Pod peut contenir **un ou plusieurs conteneurs**
- Les conteneurs d'un même Pod partagent notamment le réseau et peuvent partager des volumes.

👉 **Pod → conteneur(s) → Node**

### Node

- Machine sur laquelle les Pods s'exécutent.
- Un Node peut être une **VM ou une machine physique**.

❌ « Nodes are only virtual machines » → **False**

### Namespace

Permet de **séparer/organiser les ressources à l'intérieur d'un cluster**.

✅ `Namespace → séparation logique des ressources`

### Labels

Permettent notamment de **sélectionner des objets Kubernetes**.

```
kubectl get pods -l app=odoo
```

<div class="relative w-full mt-4 mb-1" id="bkmrk-"><div class=""><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class=""><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--1"><div class="cm-scroller"></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div></div></div>✅ **True**

---

# 🧩 2. Les principaux objets Kubernetes

<div class="group TyagGW_tableContainer" id="bkmrk-objet-%C3%80-retenir-pod-"><div class="TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1351" data-start="1002"><thead data-end="1023" data-start="1002"><tr data-end="1023" data-start="1002"><th class="last:pe-10" data-col-size="sm" data-end="1010" data-start="1002">Objet</th><th class="last:pe-10" data-col-size="sm" data-end="1023" data-start="1010">À retenir</th></tr></thead><tbody data-end="1351" data-start="1034"><tr data-end="1076" data-start="1034"><td data-col-size="sm" data-end="1044" data-start="1034">**Pod**</td><td data-col-size="sm" data-end="1076" data-start="1044">Plus petite unité déployable</td></tr><tr data-end="1133" data-start="1077"><td data-col-size="sm" data-end="1094" data-start="1077">**Deployment**</td><td data-col-size="sm" data-end="1133" data-start="1094">Applications généralement stateless</td></tr><tr data-end="1188" data-start="1134"><td data-col-size="sm" data-end="1151" data-start="1134">**ReplicaSet**</td><td data-col-size="sm" data-end="1188" data-start="1151">Maintient un nombre donné de Pods</td></tr><tr data-end="1232" data-start="1189"><td data-col-size="sm" data-end="1207" data-start="1189">**StatefulSet**</td><td data-col-size="sm" data-end="1232" data-start="1207">Applications stateful</td></tr><tr data-end="1285" data-start="1233"><td data-col-size="sm" data-end="1249" data-start="1233">**DaemonSet**</td><td data-col-size="sm" data-end="1285" data-start="1249">Pods sur chaque Node sélectionné</td></tr><tr data-end="1320" data-start="1286"><td data-col-size="sm" data-end="1296" data-start="1286">**Job**</td><td data-col-size="sm" data-end="1320" data-start="1296">Tâche qui se termine</td></tr><tr data-end="1351" data-start="1321"><td data-col-size="sm" data-end="1335" data-start="1321">**CronJob**</td><td data-col-size="sm" data-end="1351" data-start="1335">Job planifié</td></tr></tbody></table>

</div></div>### ReplicaSet

Son rôle est de garantir qu'un nombre défini de réplicas de Pods fonctionne.

👉 `replicas: 3` → Kubernetes essaie de maintenir **3 Pods**.

### StatefulSet

❌ **StatefulSet = stateless apps** → False

👉 **StatefulSet → stateful**  
👉 **Deployment → stateless**

---

# 🏗️ 3. Kapsule

### Kapsule = ?

✅ **Managed Kubernetes**

Scaleway gère notamment le **Control Plane**.

❌ Kapsule = unmanaged Kubernetes → **False**

### Qui fait quoi ?

**Scaleway :**

- ✅ Control Plane
- ✅ composants du Control Plane
- ✅ etcd / infrastructure du Control Plane

**Utilisateur :**

- Worker Nodes
- Application Pods
- applications déployées

👉 **Kapsule = Control Plane managé, workload utilisateur.**

---

# 🎛️ 4. Control Plane

Le Control Plane :

- gère/orchestre le cluster
- expose l'API Kubernetes
- planifie les Pods
- maintient l'état du cluster

### Stockage de l'état du cluster

👉 **etcd**

**etcd = base de données clé-valeur qui conserve l'état/configuration du cluster.**

### Application Pods ?

❌ Le Control Plane est responsable de faire tourner les Application Pods → **False**

👉 Les Pods tournent sur les **Worker Nodes**.

---

# 🔧 5. Worker Node

Les 3 composants demandés dans ton quiz :

1. **kubelet**
2. **CNI**
3. **Pods**

À retenir :

> **kubelet → gère les conteneurs**  
> **CNI → réseau**  
> **Pods → unités qui encapsulent les conteneurs**

---

# 🖥️ 6. kubectl vs Scaleway CLI

### <span role="text">`kubectl`</span>

Outil Kubernetes permettant d'interagir avec le cluster :

```
kubectl get pods
kubectl get deployments
kubectl apply -f app.yaml
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--7"><div class=""><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class=""><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--8"><div class="cm-scroller"></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div></div></div>👉 **Kubernetes cluster → kubectl**

### <span role="text">Scaleway CLI (`scw`)</span>

Outil permettant de gérer les **ressources Scaleway depuis le terminal**.

👉 **Scaleway infrastructure → `scw`**

Le CLI peut notamment servir à créer :

- un cluster Kapsule
- un Private Network

---

# 🔐 7. Authentification Kapsule

Pour se connecter au cluster :

✅ **kubeconfig**

Puis :

```
kubectl ...
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--10"><div class=""><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class=""><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--11"><div class="cm-scroller"></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div></div></div>👉 **Kapsule → kubeconfig → kubectl**

---

# 📦 8. Helm

Helm est le **package manager de Kubernetes**.

Kapsule supporte :

✅ Helm charts  
✅ manifests YAML personnalisés

❌ « Helm is not supported » → **False**

---

# 🌐 9. Réseau Kapsule

### Private Networking

Kapsule supporte les Private Networks.

✅ **Yes, via VPCs**

### Configuration réseau par défaut

Pour ton quiz :

✅ **Private Network with a /22 IP subnet**

Et la question suivante confirmait :

✅ **/22**

👉 **Kapsule → Private Network → /22**

---

# 🔄 10. Autohealing

⚠️ **Très important : le quiz t'a corrigé sur cette question.**

Quand Autohealing est activé :

✅ **Unresponsive nodes are restarted or replaced after 15 minutes.**

✅ **Failed pods are automatically rescheduled on healthy nodes.**

❌ Upgrade automatique de Kubernetes  
❌ Reboot quotidien du Control Plane

### À retenir

> **Node malade → Autohealing → 15 min → restart / replacement**

Et :

> **Pod défaillant → rescheduling sur un Node sain**

### Attention

Cette affirmation est :

> "Autohealing can detect and replace nodes with excessive resource usage."

❌ **False**

**Charge CPU/RAM élevée ≠ Node défaillant.**

---

# 📈 11. Autoscaling

Le **Cluster Autoscaling** ajuste le nombre de Nodes selon les besoins.

Il peut :

✅ augmenter le nombre de Nodes lorsque la charge augmente  
✅ réduire le nombre de Nodes lorsque la demande diminue  
✅ contribuer à réduire les coûts

⚠️ Le quiz considère également comme bénéfice :

✅ **Ensures high availability by distributing pods across nodes**

Mais :

❌ Autoscaling ≠ upgrade Kubernetes

### Activation

👉 **Via the Console or API**

---

# ⬆️ 12. Kubernetes upgrades

Pour Kapsule :

✅ Upgrade via **Console / API / CLI**  
✅ **Control Plane upgraded before Worker Nodes**  
✅ Les upgrades *in-place* minimisent les interruptions

❌ Downgrade vers une ancienne version

### Politique de versions

Le quiz attend :

✅ **Supports at least the latest patch versions of the last three minor releases**

👉 **3 dernières versions mineures → dernières versions patch**

---

# 💰 13. Facturation Kapsule

Réponse du quiz :

✅ **Based on the resources allocated to nodes, with no cost for the mutualized control plane**

Donc :

**Control Plane mutualisé → gratuit**

Tu paies notamment les ressources utilisées :

- Worker Nodes
- Block Storage
- Load Balancers
- etc.

---

# 💾 14. Block Storage

Block Storage sert notamment à fournir du **stockage persistant** aux applications.

👉 Très utile pour Kubernetes lorsqu'un Pod doit conserver ses données.

### Snapshot

Un **snapshot** est une **copie à un instant donné d'un volume Block Storage**.

Il peut servir notamment à :

- sauvegarder l'état d'un volume
- restaurer/créer un volume à partir de cette copie

---

# 🗄️ 15. Odoo

Pour le TP Odoo de ta formation :

### Vérifier le Deployment

```
kubectl get deployments odoo
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--20"><div class=""><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class=""><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--21"><div class="cm-scroller"></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div></div></div>### Credentials PostgreSQL

Le quiz indique :

✅ Odoo récupère les credentials PostgreSQL via des **environment variables provenant d'un Kubernetes Secret**.

Et pour le backend Node.js :

✅ Même principe : credentials DB via **Kubernetes Secret → environment variables**.

### PVC Odoo

La StorageClass attendue dans le cours :

✅ **`scw-bssd`**

⚠️ Il existe des évolutions dans les StorageClasses Scaleway, mais pour **ce TP/quiz**, retiens **`scw-bssd`**.

---

# 🔗 16. Kapsule + services Scaleway

Kapsule est intégré à l'écosystème Scaleway.

Compatible notamment avec :

✅ **Load Balancers**  
✅ **Block Storage**  
✅ Private Networks / VPC  
✅ autres services Scaleway

👉 **Kapsule n'est pas isolé du reste de l'écosystème.**

---

# 🌍 17. Kapsule / Kosmos

### Kosmos

Kosmos permet notamment d'intégrer des Nodes provenant de :

✅ AWS  
✅ GCP

👉 **Kosmos = Kubernetes multi-cloud**

### Kapsule → Kosmos

❌ On ne peut pas simplement transformer un cluster Kapsule existant en Kosmos avec `SetClusterType`.

👉 **Kapsule et Kosmos = types de clusters distincts.**

---

# 🛡️ 18. NAT

Le **Dynamic NAT** peut masquer les adresses IP privées internes lorsqu'elles communiquent avec Internet.

✅ Peut contribuer à réduire la surface d'attaque.

👉 **Dynamic NAT → private IP → public IP**

---

# 🌐 19. VPC

### Création/configuration VPC — ordre exact du quiz

⚠️ Celui-ci nous a piégés deux fois 😄

L'ordre **validé par le quiz** est :

1. **Choose the region**
2. **Enter a name and optional tags**
3. **Create Private Networks inside the VPC**
4. **Attach the previously created Resources – Kubernetes clusters and other resources**
5. **Select the Routing type within your VPC**

👉 **Region → Name → Private Networks → Resources → Routing**

---

# 🏗️ 20. Création d'un cluster Kapsule standard

Autre ordre à connaître par cœur :

1. **Choose the cluster type**
2. **Choose the region**
3. **Choose a control plane offer**
4. **Configure a Private Network**
5. **Review configuration and click "Create cluster"**

👉 **Cluster type → Region → Control Plane → Private Network → Create**

---

# 🔄 21. Suppression d'un cluster

Avec :

```
with-additional-resources=true
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--28"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--29"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>La suppression du cluster peut également supprimer les **ressources associées**, notamment les Load Balancers concernés.

✅ **True**

---

# 📊 22. Monitoring Kapsule

Les réponses correctes du quiz :

✅ **Kubernetes Dashboard**  
✅ **Prometheus and Grafana (deployed by the user)**  
✅ **Scaleway Cockpit**

❌ **Scaleway Load Balancer metrics** comme outil de monitoring du cluster

👉 **Dashboard + Prometheus/Grafana + Cockpit**

---

# 🎯 23. Dedicated Control Plane

Le Dedicated Control Plane est destiné notamment aux :

✅ **heavy workloads and business-critical applications**

👉 **Dedicated Control Plane = isolation / exigences élevées / workloads critiques**

---

# ⚠️ 24. La question piège "ContainerSet"

Tu as eu cette question :

> Which of the following is a valid Kubernetes object?

Le quiz a considéré :

✅ **ContainerSet**

et a marqué :

❌ **DaemonSet**

⚠️ **Attention : c'est très probablement spécifique au contenu/quiz de cette formation ou une anomalie**, car **DaemonSet est bien un objet Kubernetes natif**.

Donc pour **ce questionnaire précis**, si la même question revient :

👉 **réponds comme le quiz l'attend : ContainerSet.**

Mais pour ta connaissance Kubernetes réelle :

> **DaemonSet est bel et bien un objet Kubernetes valide.**

---

# 🧠 LA CARTE MENTALE À APPRENDRE

Si tu ne dois retenir qu'une seule page :

```
                    KUBERNETES
                         │
             ┌───────────┴───────────┐
             │                       │
         CONTROL PLANE            WORKER NODE
             │                       │
       ┌─────┼─────┐          ┌──────┼──────┐
       │     │     │          │      │      │
      API  etcd scheduler   kubelet  CNI   Pods
                                             │
                                      containers
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--34"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--35"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Kapsule
  ↓
Managed Kubernetes
  ↓
Scaleway manages Control Plane
  ↓
User manages workloads / worker nodes
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--36"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--37"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Pod       → smallest deployable unit
Deployment → stateless
StatefulSet → stateful
ReplicaSet → maintains Pod replicas
DaemonSet → Pod on selected nodes
Namespace → separates resources
Labels → select objects
Helm → package manager
kubectl → Kubernetes CLI
scw → Scaleway CLI
kubeconfig → cluster authentication
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--38"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--39"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Kapsule networking
        ↓
Private Network
        ↓
/22
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--40"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--41"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Autohealing
   ↓
unresponsive Node
   ↓
15 minutes
   ↓
restart / replace

failed Pod
   ↓
rescheduled on healthy Node
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--42"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--43"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Autoscaling
   ↓
increase Nodes when needed
decrease Nodes when demand drops
   ↓
cost optimization
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--44"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--45"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>```
Kapsule upgrades
   ↓
Console / API / CLI
   ↓
Control Plane first
   ↓
Workers
   ↓
NO downgrade
   ↓
3 latest minor releases
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--46"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼs ͼ16" dir="ltr" id="bkmrk--47"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div></div>### ⭐ Les 15 choses que je mémoriserais en priorité

1. **Kapsule = Managed Kubernetes**
2. **Control Plane = Scaleway**
3. **Pods = Worker Nodes**
4. **Pod = smallest deployable unit**
5. **Pod peut contenir plusieurs containers**
6. **Deployment = stateless**
7. **StatefulSet = stateful**
8. **ReplicaSet = nombre de replicas**
9. **kubectl = Kubernetes**
10. **scw = Scaleway**
11. **kubeconfig = authentification cluster**
12. **Kapsule Private Network = /22**
13. **Autohealing = 15 min + failed Pods rescheduled**
14. **Autoscaling = ajuste les Nodes**
15. **Upgrade = Control Plane → Workers, jamais downgrade**