Aller au contenu principal

Architecture Kubernetes


1 - Vue d'ensemble

L'architecture Kubernetes est composée de deux types de nœuds : le Control Plane (plan de contrôle) et les Worker Nodes (nœuds de travail).


2 - Control Plane

Le Control Plane est le "cerveau" du cluster. Il prend toutes les décisions globales et détecte/répond aux événements du cluster.

2.1 API Server (kube-apiserver)

Le point d'entrée unique pour toutes les communications avec le cluster.

Caractéristiques :

  • Expose l'API REST de Kubernetes
  • Seul composant qui communique avec etcd
  • Point d'entrée pour kubectl, dashboard, SDK
  • Gère l'authentification et l'autorisation

2.2 etcd

Base de données distribuée clé-valeur qui stocke tout l'état du cluster.

# Exemple de données stockées dans etcd
# Clé: /registry/deployments/default/nginx
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "nginx",
"namespace": "default",
"uid": "abc123..."
},
"spec": {
"replicas": 3
}
}

Caractéristiques :

  • Stockage hautement disponible
  • Consensus Raft pour la cohérence
  • Sauvegarde critique à planifier
  • Performance : < 10ms de latence recommandée

2.3 Scheduler (kube-scheduler)

Responsable de l'affectation des Pods aux Nodes.

Critères de scheduling :

CritèreDescription
ResourcesCPU et mémoire disponibles
Taints/TolerationsRestrictions sur les nodes
Node AffinityPréférences de placement
Pod AffinityCo-localisation de Pods
Pod Anti-AffinitySéparation de Pods

2.4 Controller Manager (kube-controller-manager)

Exécute les contrôleurs qui régulent l'état du cluster.

Principaux contrôleurs :

  • Deployment Controller : Gère les Deployments et ReplicaSets
  • ReplicaSet Controller : Maintient le nombre de Pods souhaité
  • Node Controller : Surveille la santé des nodes
  • Job Controller : Gère les Jobs et CronJobs
  • Endpoint Controller : Peuple les objets Endpoints

2.5 Cloud Controller Manager

Interface entre Kubernetes et les APIs du cloud provider.

# Exemple : LoadBalancer Service sur AWS
apiVersion: v1
kind: Service
metadata:
name: mon-service
annotations:
# Annotations spécifiques AWS
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
type: LoadBalancer # Le CCM crée un ELB/NLB
ports:
- port: 80
selector:
app: mon-app

3 - Worker Nodes

Les Worker Nodes exécutent les applications conteneurisées.

3.1 Kubelet

Agent qui s'exécute sur chaque node et garantit que les conteneurs fonctionnent dans les Pods.

Fonctions du Kubelet :

  • Reçoit les PodSpecs du API Server
  • S'assure que les conteneurs décrits sont en cours d'exécution
  • Monte les volumes
  • Exécute les probes de santé
  • Rapporte l'état au Control Plane

3.2 Kube-Proxy

Gère les règles réseau sur chaque node.

Modes de proxy :

ModeDescriptionPerformance
iptablesRègles iptables LinuxBon
IPVSIP Virtual ServerExcellent
userspaceProxy en espace utilisateurFaible (legacy)

3.3 Container Runtime

Le logiciel responsable de l'exécution des conteneurs.


4 - Communication dans le cluster

4.1 Flux de communication

4.2 Ports importants

ComposantPortProtocoleDescription
API Server6443HTTPSAPI Kubernetes
etcd2379-2380HTTPSClient et peer
Kubelet10250HTTPSAPI Kubelet
Kube-Proxy10256HTTPHealth check
NodePort Services30000-32767TCP/UDPServices exposés

5 - Haute disponibilité

5.1 Control Plane HA

5.2 Bonnes pratiques HA

ComposantMinimum HARecommandé Production
Control Plane Nodes33 ou 5
etcd Members33 ou 5 (impair)
Worker Nodes2+Selon charge
Zones de disponibilité23

6 - Add-ons essentiels

6.1 DNS (CoreDNS)

Fournit la résolution DNS pour les Services.

# Exemple de résolution DNS
# Service: mon-service.default.svc.cluster.local
apiVersion: v1
kind: Service
metadata:
name: mon-service
namespace: default
spec:
selector:
app: mon-app
ports:
- port: 80

6.2 Networking (CNI)

Les plugins CNI gèrent la connectivité réseau :

PluginCaractéristiques
CalicoNetwork Policies, BGP
CiliumeBPF, observabilité
FlannelSimple, overlay VXLAN
WeaveChiffrement, simplicité

6.3 Dashboard

Interface web pour gérer le cluster :

# Installation du Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

# Accès via proxy
kubectl proxy
# http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Résumé

Dans ce chapitre, nous avons exploré :

  • Control Plane : API Server, etcd, Scheduler, Controller Manager
  • Worker Nodes : Kubelet, Kube-Proxy, Container Runtime
  • Communication : Flux entre composants et ports utilisés
  • Haute disponibilité : Configuration multi-master
  • Add-ons : DNS, CNI, Dashboard

Prochaine étape

Dans le prochain chapitre, nous allons installer Kubernetes avec différentes méthodes : Minikube, Kind et kubeadm.

→ Chapitre suivant : Installation


← Retour à la table des matières