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ère | Description |
|---|---|
| Resources | CPU et mémoire disponibles |
| Taints/Tolerations | Restrictions sur les nodes |
| Node Affinity | Préférences de placement |
| Pod Affinity | Co-localisation de Pods |
| Pod Anti-Affinity | Sé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 :
| Mode | Description | Performance |
|---|---|---|
| iptables | Règles iptables Linux | Bon |
| IPVS | IP Virtual Server | Excellent |
| userspace | Proxy en espace utilisateur | Faible (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
| Composant | Port | Protocole | Description |
|---|---|---|---|
| API Server | 6443 | HTTPS | API Kubernetes |
| etcd | 2379-2380 | HTTPS | Client et peer |
| Kubelet | 10250 | HTTPS | API Kubelet |
| Kube-Proxy | 10256 | HTTP | Health check |
| NodePort Services | 30000-32767 | TCP/UDP | Services exposés |
5 - Haute disponibilité
5.1 Control Plane HA
5.2 Bonnes pratiques HA
| Composant | Minimum HA | Recommandé Production |
|---|---|---|
| Control Plane Nodes | 3 | 3 ou 5 |
| etcd Members | 3 | 3 ou 5 (impair) |
| Worker Nodes | 2+ | Selon charge |
| Zones de disponibilité | 2 | 3 |
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 :
| Plugin | Caractéristiques |
|---|---|
| Calico | Network Policies, BGP |
| Cilium | eBPF, observabilité |
| Flannel | Simple, overlay VXLAN |
| Weave | Chiffrement, 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