Repository navigation
Namespaces
Un namespace (ou espace de noms) est un mécanisme de cloisonnement qui permet d'isoler un ensemble de ressources (objets) à l'intérieur d'un même cluster Kubernetes.
Les namespaces permettent de :
- Organiser les ressources d'un cluster (par équipe, par projet, par environnement…)
-
Isoler les applications les unes des autres (un
devet unproddans le même cluster) - Appliquer des quotas de ressources (CPU, mémoire) par namespace
- Restreindre les droits d'accès (RBAC) namespace par namespace
- Faciliter le multi-tenant (plusieurs équipes ou clients partagent un même cluster)
Note
Un namespace ne remplace pas un cluster : c'est une frontière logique, pas une frontière réseau ou de sécurité physique.
La plupart des ressources vivent dans un namespace, mais certaines sont globales au cluster et n'appartiennent à aucun namespace. Dans la liste ci-dessous, chaque catégorie est annotée selon sa portée :
-
📂 namespacée : la ressource appartient à un namespace précis
-
🌐 globale au cluster : la ressource est partagée à l'échelle du cluster
-
Workloads 📂 :
Pod,Deployment,ReplicaSet,StatefulSet,DaemonSet,Job,CronJob -
Réseau 📂 :
Service,Ingress,NetworkPolicy,Endpoints -
Configuration 📂 :
ConfigMap,Secret -
Stockage applicatif 📂 :
PersistentVolumeClaim(PVC) -
Accès 📂 :
ServiceAccount,Role,RoleBinding -
Noeuds 🌐 :
Node -
Stockage 🌐 :
PersistentVolume(PV),StorageClass -
Accès 🌐 :
ClusterRole,ClusterRoleBinding -
Le namespace lui-même 🌐 :
Namespace -
Extensions 🌐 :
CustomResourceDefinition,APIService
Node ou les PersistentVolume sont globales au cluster et ne peuvent pas être rangées dans un namespace.
Lorsqu'on installe un cluster, Kubernetes crée déjà plusieurs namespaces :
-
default: le namespace utilisé quand on n'en précise aucun -
kube-system: les composants du cluster (API server, scheduler, controller, etcd…) -
kube-public: lisible par tous, utilisé pour des informations publiques du cluster -
kube-node-lease: les « baux » (leases) des noeuds, pour détecter rapidement un noeud défaillant
À l'intérieur d'un cluster, chaque Service obtient un nom DNS de la forme :
<service>.<namespace>.svc.cluster.local
Par exemple, un service web-svc dans le namespace dev est joignable à l'adresse web-svc.dev.svc.cluster.local. Depuis un pod du même namespace, on peut même se contenter du nom court web-svc.
C'est cette isolation qui permet d'avoir deux services portant le même nom (web-svc) dans deux namespaces différents, sans aucun conflit.
- Lister les namespaces :
kubectl get namespaces - Créer un namespace :
kubectl create namespace dev - Déployer une ressource dans un namespace :
kubectl apply -f deployment.yaml -n dev - Lister les ressources d'un namespace :
kubectl get pods -n dev - Voir les ressources de tous les namespaces :
kubectl get pods --all-namespaces - Définir le namespace courant du contexte :
kubectl config set-context --current --namespace=dev
Kubernetes (k8s)
- Accueil
- Vue d'ensemble
- Les containers
- L'orchestration
- L'architecture de k8s
- Les composants de k8s
- Noeud maître vs noeud esclave
- Les namespaces
- Les pods
- Les sondes et le cycle de vie
- Les ReplicaSets
- Les Deployments
- Les Jobs
- Les CronJobs
- Les DaemonSets
- Les StatefulSets
- Les ConfigMaps et Secrets
- Les volumes persistants (PV & PVC)
- Les Services
- Les Ingress
- Le Gateway API
- La mise à l'échelle
- Le RBAC
- Helm
- kubectl