Skip to content

Commit

Permalink
test mermaid
Browse files Browse the repository at this point in the history
  • Loading branch information
herveleclerc committed Sep 5, 2024
1 parent 23997df commit f80cf55
Show file tree
Hide file tree
Showing 13 changed files with 404 additions and 122 deletions.
17 changes: 9 additions & 8 deletions cours/containers/kubernetes/k8s-architecture.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

### Kubernetes : `kube-apiserver`

Sans le `kube-apiserver` le cluster ne sert à rien. De plus, il est **LE SEUL** à interagir avec le cluster `etcd`, que ce soit en écriture ou en lecture.
Sans le `kube-apiserver` le cluster ne sert à rien. De plus, il est `LE SEUL` à interagir avec le cluster `etcd`, que ce soit en écriture ou en lecture.

- Les configurations d'objets (Pods, Service, RC, etc.) se font via l'API server
- Un point d'accès à l'état du cluster aux autres composants via une API REST
Expand Down Expand Up @@ -134,18 +134,19 @@ Kubernetes n'implémente pas de solution réseau par défaut, mais s'appuie sur

### Kubernetes : Aujourd'hui

- Version 1.24.x : stable en production
- Version 1.30.x : stable en production
- Solution complète et une des plus utilisées
- Éprouvée par Google
- <https://kubernetes.io/releases/>

```console
1.24

Latest Release:1.24.2 (released: 2022-06-15)
End of Life:2023-09-29
Patch Releases: 1.24.1, 1.24.2
Complete 1.24 **Schedule** and **Changelog**
**1.31**
Latest Release:1.31.0 (released: 2024-08-13)
End of Life:2025-10-28
Patch Releases: n/a
Complete 1.31 [Schedule](https://kubernetes.io/releases/patch-releases/#1-31) and [Changelog](https://git.k8s.io/kubernetes/CHANGELOG/CHANGELOG-1.31.md)




```
Expand Down
70 changes: 68 additions & 2 deletions cours/containers/kubernetes/k8s-core-api-objects.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,23 @@
- Les objets existent uniquement au sein d'un namespace donné
- Évitent la collision de nom d'objets
- Font partie du fqdn du service (DNS) (mon-service.mon-namespace.svc.cluster.local)
- Quotas et limites: Vous pouvez définir des quotas et des limites sur les ressources (CPU, mémoire, nombre de pods, etc.) au niveau du namespace pour contrôler l'utilisation des ressources.
- Défaut: Le namespace `default` existe par défaut dans chaque cluster Kubernetes.


### Kubernetes : Labels

- Système de clé/valeur
- Organisent les différents objets de Kubernetes (Pods, RC, Services, etc.) d'une manière cohérente qui reflète la structure de l'application
- Organisent, filtrent, selectionnent les différents objets de Kubernetes (Pods, RC, Services, etc.) d'une manière cohérente qui reflète la structure de l'application
- Corrèlent des éléments de Kubernetes : par exemple un service vers des Pods
- Ils contiennent des informations d'identification utilisées par les requêtes qui utilisent un sélecteur ou dans les sections de sélecteurs dans les définitions d'objets
- Le nom dans la clé est limité à 63 caractères et le suffixe à 253 caractères
- La valeur ne peut dépasser 63 caractères
- La valeur doit commencer un aplhanum ou être vide
- La valeur peut contenir des `~` `.` et `alphanum`
- Arbitraires: Vous pouvez définir n'importe quelle paire clé-valeur.
- Immuables: Une fois créés, les labels ne peuvent pas être modifiés directement. Pour les changer, il faut créer un nouveau déploiement ou un nouveau pod.
- Multiples: Un objet peut avoir plusieurs labels.


### Kubernetes : Labels
Expand Down Expand Up @@ -78,8 +84,12 @@ kubectl get po -A -l k8s-app=kube-dns -l pod-template-hash=6d4b75cb6d
- Système de clé/valeur
- Ce sont des informations qui ne sont pas utilisées pour l'identification de ressources.
- Les annotations ne sont pas utilisées en interne par kubernetes
- Stockage de données personnalisées: Pour stocker des informations spécifiques à votre application ou à votre infrastructure.
- Elles peuvent être utilisées par des outils externes ou librairies (ex: cert-manager, ingress-controller...)
- Le nom dans la clé est limitée à 63 caractères et le suffixe à 253 caractères
- Arbitraires: Vous pouvez définir n'importe quelle paire clé-valeur.
- Mutables: Les annotations peuvent être modifiées après la création de l'objet.
- Multiples: Un objet peut avoir plusieurs annotations.

### Kubernetes : Annotations

Expand Down Expand Up @@ -115,8 +125,14 @@ spec:
- La stack IP (network namespace)
- Inter-process communication (PID namespace)
- Volumes
- IP: Le pod lui-même dispose d'une adresse IP unique, que tous les conteneurs du pod peuvent utiliser.
- Cycle de vie: Les conteneurs d'un pod sont créés et détruits en même temps
- Node: Tous les conteneurs d'un pod sont généralement co-localisés sur le même nœud du cluster Kubernetes.
- C'est la plus petite et la plus simple unité dans Kubernetes

En savoir plus : <https://kubernetes.io/fr/docs/concepts/workloads/pods/pod/>



### Kubernetes : Pod

Expand Down Expand Up @@ -217,6 +233,36 @@ $ kubectl get pods <POD_NAME> -o jsonpath='{.status}' | jq
![deployment](images/deployment.png)



### Kubernetes : Deployment

```plaintext
+--------------------+
| Deployment |
| |
| Name: my-deployment|
| Selector: app=web |
+--------------------+
|
| matches
v
+--------------------+
| ReplicaSet |
| |
| Selector: app=nginx|
+--------------------+
|
| matches
v
+--------------------+
| Pod |
| |
| Labels: app=nginx |
+--------------------+
```



### Kubernetes : Deployment

```yaml
Expand All @@ -228,7 +274,7 @@ spec:
replicas: 3
selector:
matchLabels:
app:nginx
app: nginx
template:
metadata:
labels:
Expand All @@ -241,6 +287,13 @@ spec:
- containerPort: 80
```

ou en ligne de commande

```console
kubectl create deployment my-deployment --image=nginx:latest --replicas=3
```


### Kubernetes : DaemonSet

- Assure que tous les noeuds exécutent une copie du pod sur tous les noeuds du cluster
Expand Down Expand Up @@ -444,6 +497,13 @@ spec:
restartPolicy: OnFailure
```
En ligne de commande :
```console
kubectl create job exemple-job --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
```

### Kubernetes: CronJob

- Un CronJob permet de lancer des Jobs de manière planifiée.
Expand Down Expand Up @@ -480,3 +540,9 @@ spec:

```

En ligne de commande :

```console
kubectl create cronjob exemple-cronjob --image=busybox --schedule="*/5 * * * *" -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
```

Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,40 @@

### La méthode déclarative

L'approche déclarative consiste à décrire l'état désiré des ressources. Vous déclarez ce que vous voulez obtenir, et Kubernetes s'occupe de mettre en place et de maintenir cet état.

- Consiste à définir un objet dans un fichier yaml puis à créer l'objet avec la commande kubectl apply ou kubectl create
- Recommandé pour garder un historique de tous les objets créés, puis de faire du versionning
- Il facilite également le travail entre équipe.

- Avantages :
- Simplicité: Plus facile à comprendre et à maintenir que les commandes impératives.
- Reproductibilité: Les fichiers de configuration peuvent être versionnés et utilisés pour recréer un environnement à tout moment.
- Idéal pour l'automatisation: Parfaitement adapté aux outils d'intégration continue et de déploiement continu (CI/CD).
- Détection des dérives: Kubernetes compare l'état actuel du cluster à l'état désiré défini dans les fichiers de configuration et effectue les modifications nécessaires pour rétablir la conformité.
- Inconvénients:
- Moins de flexibilité pour certaines opérations: Certaines opérations peuvent nécessiter des commandes impératives pour être effectuées.



### La méthode impérative

L'approche impérative consiste à donner des instructions directes à Kubernetes pour effectuer des actions spécifiques. On décrit comment réaliser une tâche, pas seulement le résultat final.

- Permet la création rapide des ressources à l'aide d'une commande
- Gain un temps considérable lors de l'examen
- Recommandé dans des environnements de lab ou pour tester une commande

- Avantages :
- Flexibilité: Grande liberté dans la façon de gérer les ressources.
- Contrôle précis: Possibilité d'effectuer des actions très spécifiques.
- Inconvénients :
- Erreur humaine: Le risque d'erreur est plus élevé car chaque action doit être spécifiée manuellement.
- Difficulté de suivi: Il peut être difficile de retracer les modifications apportées à un état donné du cluster.
- Moins adapté aux environnements complexes: La gestion manuelle de nombreuses ressources peut devenir rapidement fastidieuse et source d'erreurs.




### La méthode impérative

Expand Down Expand Up @@ -75,3 +98,16 @@ kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=cl
Ceci n'utilisera pas les labels des pods comme sélecteurs.


### Quand utiliser quelle méthode ?

- Méthode impérative:
- Pour des tâches ponctuelles ou des dépannages.
- Lorsque vous avez besoin d'un contrôle très précis sur les ressources.
- Méthode déclarative:
- Pour la gestion quotidienne des ressources.
- Pour automatiser les déploiements et les mises à jour.
- Pour construire des pipelines CI/CD.




74 changes: 52 additions & 22 deletions cours/containers/kubernetes/k8s-installation.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,39 +22,66 @@
### Installation de Kubernetes avec kubeadm

- Certains pré-requis sont nécessaires avant d'installer Kubernetes :
- Désactiver le swap (Support **alpha** depuis la 1.22)
- Désactiver le `swap` (Support **alpha** depuis la 1.22)
- Assurer que les ports requis soient ouverts : <https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports>
- Installer une Container Runtime compatible CRI (containerd, CRI-O, Docker)
- Installer une Container Runtime compatible CRI (containerd, CRI-O, Docker, ...)

### kubeadm (1)

- Installer les composants Kubernetes (kubeadm, kubectl, kubelet) : <https://kubernetes.io/docs/setup/independent/install-kubeadm/>
- Exécuter :
- `kubeadm init` sur le noeud master
- `kubeadm join` sur les autres noeuds (avec le token fournit par la commande `kubeadm init`)
- `kubeadm init` sur le noeud `master`(control plane)
- `kubeadm join` sur les autres noeuds (worker) (avec le token fournit par la commande `kubeadm init`)
- Copier le fichier de configuration généré par `kubeadm init`
- Installer le plugin Réseau
- Optionnellement: Tester le dploiement d'un pod
- Optionnellement: Tester le déploiement d'un pod

### kubeadm (2)

En plus de l'installation de Kubernetes, kubeadm peut :

- Renouveler les certificats du Control Plane
- Générer des certificats utilisateurs signés par Kubernetes
- Effectuer des upgrades de Kubernetes (`kubeadm upgrade`)

### Kubernetes managés "as a Service"

- Il existe des solutions managées pour Kubernetes sur les cloud publics :
- AWS Elastic Kubernetes Services (EKS): <https://aws.amazon.com/eks/>
- Azure Kubernetes Service (AKS): <https://azure.microsoft.com/en-us/services/kubernetes-service/>
- Docker Universal Control Plane : <https://docs.docker.com/ee/ucp/>
- Google Kubernetes Engine : <https://cloud.google.com/kubernetes-engine/>
- Scaleway Kapsule : <https://www.scaleway.com/fr/kubernetes-kapsule/>
- Alibaba Container Service for Kubernetes (ACK) <https://www.alibabacloud.com/fr/product/kubernetes>

### Installation de Kubernetes
- En plus de l'installation de Kubernetes, kubeadm peut :

- Génération des fichiers de configuration: Crée les fichiers de configuration nécessaires pour les composants du cluster.
- Gestion des certificats: Génère et distribue les certificats nécessaires pour sécuriser les communications entre les composants du cluster.
- Gestion des tokens: Crée des tokens d'authentification pour les nœuds qui rejoignent le cluster.
- Vérification de la configuration: Valide que le système et les configurations sont compatibles avec Kubernetes.
- Mises à jour et modifications: Facilite les mises à jour des versions de Kubernetes et les modifications de la configuration du cluster.

"
### Kubernetes managés "as a Service Majeurs

- Plateformes Cloud Majeures :
- Amazon Elastic Kubernetes Service (EKS):
- Documentation : https://aws.amazon.com/fr/eks/
- Offre une solution entièrement gérée pour déployer, gérer et mettre à l'échelle des clusters Kubernetes sur AWS.
- Google Kubernetes Engine (GKE):
- Documentation : https://cloud.google.com/kubernetes-engine
- Propose une plateforme hautement disponible et entièrement gérée pour exécuter des applications conteneurisées sur Google Cloud Platform.
- Azure Kubernetes Service (AKS):
- Documentation : https://azure.microsoft.com/fr-fr/services/kubernetes-service/
- Permet de déployer et gérer des clusters Kubernetes sur Azure avec une intégration profonde avec les autres services Azure.


### Kubernetes managés "as a Service Populaires

- Autres Plateformes Populaires :
- DigitalOcean Kubernetes:
- Documentation : https://www.digitalocean.com/products/kubernetes/
- Offre une solution simple et abordable pour déployer des clusters Kubernetes sur DigitalOcean.
- Rancher Kubernetes Engine (RKE):
- Documentation : https://rancher.com/docs/rke/latest/en/
- Solution open-source pour gérer des clusters Kubernetes multi-cloud et sur site.
- Platform9 Managed Kubernetes:
- Documentation : https://platform9.com/docs/
- Plateforme de gestion de Kubernetes hybride et multi-cloud.
- Red Hat OpenShift:
- Documentation : https://www.openshift.com/
- Plateforme containerisée complète basée sur Kubernetes, offrant une large gamme de fonctionnalités pour les entreprises.
- Scaleway Kapsule :
- Documentation : https://www.scaleway.com/fr/kubernetes-kapsule/
- Alibaba Container Service for Kubernetes (ACK)
- Documentation : https://www.alibabacloud.com/fr/product/kubernetes

### Installateurs de Kubernetes

- Via Ansible : `kubespray` <https://github.com/kubernetes-sigs/kubespray>
- Via Terraform : <https://github.com/poseidon/typhoon>
Expand All @@ -63,6 +90,7 @@ En plus de l'installation de Kubernetes, kubeadm peut :
- kops : <https://github.com/kubernetes/kops>
- rancher : <https://rancher.com/docs/rancher/v2.5/en/>
- tanzu : <https://github.com/vmware-tanzu>
- clusterAPI : <https://cluster-api.sigs.k8s.io/>

### Conformité kubernetes

Expand All @@ -76,4 +104,6 @@ Voici quelques outils permettant de certifier les déploiements des cluster kube
- <https://github.com/zegl/kube-score>
- kube-bench
- <https://github.com/aquasecurity/kube-bench>
- Kube-hunter:
- <https://github.com/aquasecurity/kube-hunter>

Loading

0 comments on commit f80cf55

Please sign in to comment.