# Scaleway

# 01 - Foundations

## ☁️ 1. Les grandes familles

<div class="group TyagGW_tableContainer" id="bkmrk-besoin-produit-%C3%A0-ret"><div class="TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)"><thead><tr><th class="last:pe-10">Besoin</th><th class="last:pe-10">Produit à retenir</th></tr></thead><tbody><tr><td>VM classique</td><td>**Instances**</td></tr><tr><td>Serveur physique dédié</td><td>**Elastic Metal**</td></tr><tr><td>GPU / IA / rendu / encodage</td><td>**GPU Instances**</td></tr><tr><td>ARM / Ampere</td><td>**CAX**</td></tr><tr><td>Mac Apple Silicon</td><td>**Apple Silicon / Mac mini**</td></tr><tr><td>Kubernetes managé</td><td>**Kapsule**</td></tr><tr><td>Conteneur serverless</td><td>**Serverless Containers**</td></tr><tr><td>Fonction serverless</td><td>**Serverless Functions**</td></tr><tr><td>Fichiers / objets</td><td>**Object Storage**</td></tr><tr><td>Disque attaché à une VM</td><td>**Block Storage**</td></tr><tr><td>Archivage froid</td><td>**Glacier**</td></tr><tr><td>Base SQL</td><td>**Managed Databases**</td></tr><tr><td>Cache / sessions</td><td>**Redis**</td></tr><tr><td>Analytics / gros volumes</td><td>**ClickHouse**</td></tr><tr><td>Répartition du trafic</td><td>**Load Balancer**</td></tr><tr><td>IP publique portable</td><td>**Flexible IP**</td></tr><tr><td>Monitoring / observabilité</td><td>**Cockpit**</td></tr><tr><td>Identités / permissions</td><td>**IAM**</td></tr><tr><td>Messages pub/sub</td><td>**Topics &amp; Events**</td></tr><tr><td>Messages point-to-point</td><td>**Queues**</td></tr><tr><td>Emails transactionnels</td><td>**Transactional Email**</td></tr><tr><td>IA générative par API</td><td>**Generative APIs**</td></tr><tr><td>Infrastructure as Code</td><td>**Terraform**</td></tr></tbody></table>

</div></div>---

# 🖥️ 2. Instances

### Development Instances

➡️ Développement / tests  
➡️ **vCPU partagés**

### General Purpose

➡️ Usage général  
➡️ C'est notamment là qu'on trouve **CAX**, avec processeurs **Ampere ARM**.

### GPU Instances

➡️ **IA**  
➡️ Data processing  
➡️ Rendering  
➡️ Video encoding

### Elastic Metal

➡️ **Bare Metal**  
➡️ Serveur physique, pas une VM.

### Apple Silicon

➡️ Mac mini Apple Silicon  
➡️ Connexion notamment **SSH + VNC**  
➡️ Attention au **minimum de facturation de 24 h**.

---

# 💾 3. Storage

## Object Storage

Imagine :

**Bucket → Objects**

Un bucket peut contenir énormément d'objets, pas seulement 100.

Les objets sont **privés par défaut**.

### Versioning

Si tu modifies un objet avec le versioning activé :

```
photo.jpg
   ↓ modification
photo.jpg version 1
photo.jpg version 2
photo.jpg version 3
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--2"><div><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--3"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>➡️ Les anciennes versions sont conservées.  
➡️ Elles consomment donc du stockage → **coût supplémentaire**.

### Site web dans Object Storage

Pour personnaliser le domaine :

**CNAME**

---

## Block Storage

Pense :

> **Block Storage = disque**

Tu peux :

**attach** → attacher le volume à une Instance  
**detach** → le détacher

Très différent d'Object Storage.

---

## Glacier

Pense :

> **Glacier = archivage / stockage froid**

Et surtout :

❌ **Pas de Multi-AZ redundancy** comme le stockage Standard Multi-AZ.

---

# 🗄️ 4. Databases

### PostgreSQL / MySQL

➡️ données structurées  
➡️ applications classiques

### Redis

➡️ **mémoire / vitesse**  
➡️ cache  
➡️ sessions  
➡️ données temporaires  
➡️ API

Question typique :

> "Best database for storing sessions?"

💡 **Redis**

### ClickHouse

➡️ Analytics  
➡️ Très gros volumes de données  
➡️ Data science / Business Intelligence

Et :

> **Data Warehouse = centralized repository for large sets of structured data**

---

# ☸️ 5. Kubernetes

Pour l'instant, retiens simplement :

**Kapsule = Kubernetes managé par Scaleway**

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

Et surtout :

> **Terraform peut gérer un cluster Kapsule.**

On va approfondir ça juste après avec la certification **Scaleway Associate Kubernetes**. 😉

---

# ⚡ 6. Serverless

## Serverless Functions

➡️ Tu déploies une fonction  
➡️ Scaleway gère l'infrastructure  
➡️ Ça scale automatiquement.

Quand il n'y a plus d'activité :

```
requêtes
  ↓
instances
  ↓
0
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--9"><div><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--10"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>Puis une nouvelle requête arrive.

Le temps nécessaire pour redémarrer :

🔥 **Cold start**

### Point important

Une instance de Serverless Function ne traite pas plusieurs requêtes simultanément.

➡️ Scaleway peut créer plusieurs instances pour gérer la charge.

---

## Serverless Containers

➡️ Tu fournis un **container**  
➡️ Scaleway gère l'infrastructure  
➡️ Possibilité d'utiliser des **encrypted environment variables** pour les informations sensibles.

---

# 🌐 7. Network

## Load Balancer

➡️ Distribue les requêtes entre plusieurs ressources.

Il peut être :

✅ **Public**  
✅ **Private**

---

## Flexible IP

C'est une IP :

**public + portable + persistante**

Tu peux :

```
Flexible IP
     ↓
Instance A
     ↓
detach
     ↓
Instance B
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--14"><div><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--15"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>Elle est indépendante de la ressource.

⚠️ Elle est liée à une **Availability Zone**.

---

# 🔐 8. IAM

IAM =

> **Identity and Access Management**

Il sert à gérer :

**qui → peut faire quoi → sur quelles ressources**

### Organization

L'Organization regroupe les utilisateurs et ressources.

### Owner

➡️ propriétaire de l'Organization.

### Members / Users

➡️ utilisateurs auxquels on attribue des permissions.

### Policies

➡️ définissent les permissions.

### API Keys

Point à retenir :

> **API keys inherit the permissions of their bearer.**

Donc une API key n'est pas magiquement plus puissante que l'utilisateur auquel elle appartient.

### MFA

➡️ authentification multi-facteurs.

---

# 📊 9. Cockpit

Cockpit =

> **Observability**

Il permet de centraliser :

- métriques
- logs
- dashboards
- alertes

Et surtout :

✅ **pré-built dashboards** pour les produits compatibles.

Cockpit n'est pas limité aux produits Scaleway : il peut aussi recevoir des données externes.

### 💰 Facturation Cockpit

À retenir pour le QCM :

❌ consultation d'un dashboard → pas facturée  
❌ création d'une alerte → pas facturée  
⚠️ rétention au-delà de la limite → facturée

---

# 📨 10. Messaging

Deux concepts à ne surtout pas mélanger :

### Topics &amp; Events

📢 **Publish / Subscribe**

```
Publisher
    ↓
 Topic
 ↙   ↓   ↘
A    B    C
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--19"><div><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--20"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>Plusieurs consommateurs peuvent recevoir le message.

### Queues

📬 **Point-to-point**

```
Producer
   ↓
 Queue
   ↓
Consumer
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--21"><div><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--22"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>➡️ Un message est destiné à être traité par un consommateur.

💡 Mémo :

**Topics = broadcast**  
**Queues = file d'attente**

---

# 📧 11. Transactional Email

Workflow :

```
1. Create account
       ↓
2. SPF / DKIM / DMARC
       ↓
3. Integrate SMTP / API
       ↓
4. Send
       ↓
5. Monitor
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--24"><div><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--25"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>Donc :

**Create → Authenticate → Integrate → Send → Monitor**

---

# 🤖 12. AI

### GPU Instances

➡️ GPU à la demande.

### AI Supercomputers

➡️ infrastructures GPU massives pour l'IA.

### Generative APIs

➡️ accès aux modèles génératifs via API.

Facturation :

> **Pay-as-you-go / tokens**

Donc :

**plus de tokens → plus de consommation**

---

# 🏗️ 13. Terraform

Terraform = **Infrastructure as Code**

Au lieu de :

```
Console
→ clic
→ clic
→ clic
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--28"><div><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><div>  
</div></div></div></div></div></div>tu décris :

```
Terraform
→ configuration
→ plan
→ apply
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--30"><div><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--31"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>### Bonne pratique importante

Évite de mélanger :

**création manuelle dans Console + gestion Terraform**

Si une ressource existe déjà :

➡️ **import dans Terraform state**  
➡️ puis gestion par Terraform.

---

# 🌍 14. Region vs Availability Zone

Très important pour les QCM :

### Region

➡️ zone géographique.

Exemple :

**Paris**

### Availability Zone

➡️ zone d'infrastructure isolée au sein d'une région.

Et attention à la phrase :

> "Each Region is composed of two Availability Zones."

❌ **False**

Il ne faut surtout pas mémoriser "1 région = 2 AZ".

---

# 💰 15. Billing

À retenir :

### Facturation mensuelle

La consommation des services est généralement regroupée dans une **facture mensuelle**.

Mais certains éléments peuvent avoir des modalités particulières.

Exemple :

**Domain names** et certains **Elastic Metal setup fees** peuvent être facturés lors de la commande.

---

# 🧩 16. Les associations à connaître PAR CŒUR

Si tu ne devais retenir que ça :

```
Kubernetes       → Kapsule
Sessions         → Redis
Analytics        → ClickHouse
Structured data  → Managed Database
Objects          → Bucket
Disk             → Block Storage
Archive          → Glacier
GPU / AI         → GPU Instances
ARM / Ampere     → CAX
Bare Metal       → Elastic Metal
Monitoring       → Cockpit
Permissions      → IAM
Public IP        → Flexible IP
Traffic          → Load Balancer
Pub/Sub          → Topics & Events
Point-to-point   → Queues
IaC              → Terraform
Email            → Transactional Email
LLM API          → Generative APIs
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--35"><div><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--36"><div class="cm-scroller"></div></div></div></div></div></div></div></div></div><div><div>  
</div></div></div></div></div></div>Et surtout :

> **Bucket = Object Storage**  
> **Volume = Block Storage**  
> **Database = données structurées**  
> **Redis = vitesse / sessions**  
> **Kapsule = Kubernetes**

# 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><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><div class="relative"><div><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><div>  
</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)"><thead><tr><th class="last:pe-10">Objet</th><th class="last:pe-10">À retenir</th></tr></thead><tbody><tr><td>**Pod**</td><td>Plus petite unité déployable</td></tr><tr><td>**Deployment**</td><td>Applications généralement stateless</td></tr><tr><td>**ReplicaSet**</td><td>Maintient un nombre donné de Pods</td></tr><tr><td>**StatefulSet**</td><td>Applications stateful</td></tr><tr><td>**DaemonSet**</td><td>Pods sur chaque Node sélectionné</td></tr><tr><td>**Job**</td><td>Tâche qui se termine</td></tr><tr><td>**CronJob**</td><td>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>`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><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><div class="relative"><div><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><div>  
</div></div></div></div></div></div></div></div>👉 **Kubernetes cluster → kubectl**

### <span>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><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><div class="relative"><div><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><div>  
</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><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><div class="relative"><div><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><div>  
</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><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><div>  
</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><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><div>  
</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><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><div>  
</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><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><div>  
</div></div></div></div></div></div>```
Kapsule networking
        ↓
Private Network
        ↓
/22
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--40"><div><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><div>  
</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><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><div>  
</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><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><div>  
</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><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><div>  
</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**