Les namespaces partitionnent un cluster Container Service for Kubernetes (ACK) partagé en espaces de travail isolés, permettant la définition de quotas de ressources, la gestion des autorisations et le suivi des coûts par équipe ou par environnement.
Namespaces
Dans un cluster ACK, les namespaces divisent les ressources du cluster en groupes isolés. Lorsque plusieurs équipes partagent un même cluster, créez des namespaces pour classer les ressources par équipe ou par environnement, puis utilisez les quotas de ressources afin de limiter la consommation de chaque namespace.
Par défaut, les pods en cours d'exécution peuvent consommer une quantité illimitée de ressources CPU et mémoire sur les nœuds. Les pods d'un seul namespace risquent ainsi d'épuiser l'ensemble des ressources du cluster. Configurez des quotas de ressources par namespace — incluant le CPU, la mémoire et le nombre de pods — pour prévenir cette situation.
Exemples d'allocation : Dans un cluster disposant de 32 GiB de RAM et de 16 cœurs CPU, allouez 20 GiB et 10 cœurs à l'équipe A, 10 GiB et 4 cœurs à l'équipe B, et conservez 2 GiB et 2 cœurs en réserve. Vous pouvez également attribuer 1 cœur et 1 GiB de RAM au namespace testing, et laisser le namespace production utiliser le reste des ressources disponibles.
Créer un namespace
Utiliser la console ACK
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Namespaces and Quotas.
Cliquez sur Create. Dans la boîte de dialogue qui s'affiche, configurez le nom et le libellé du namespace, puis cliquez sur OK.
Utiliser kubectl
-
Créez un namespace.
kubectl create namespace test -
Vérifiez que le namespace a bien été créé.
kubectl get namespacesRésultat attendu :
NAME STATUS AGE default Active 46h kube-node-lease Active 46h kube-public Active 46h kube-system Active 46h test Active 9sLe namespace
testapparaît désormais comme actif dans la liste.
Configurer les quotas et les limites de ressources
Après avoir configuré les quotas de CPU et de mémoire (ResourceQuota) pour un namespace, les pods créés dans ce namespace doivent spécifier des limites de CPU et de mémoire, sauf si des limites de ressources par défaut (LimitRange) sont configurées pour le namespace.
Utiliser la console ACK
Sur la page Namespace, cliquez sur Resource Quotas and Limits dans la colonne Actions correspondant au namespace cible.
Dans la boîte de dialogue Resource Quotas and Limits, configurez les quotas de ressources et les limites de ressources par défaut. Pour plus d'informations, consultez les pages Quotas de ressources et Configurer les requêtes et limites de mémoire par défaut pour un namespace.
Bonnes pratiques pour la modification des quotas
Modifiez les quotas pendant les heures creuses. Vérifiez l'utilisation des ressources des charges de travail existantes avant d'effectuer toute modification.
Réservez suffisamment de ressources pour permettre la mise à l'échelle automatique via Horizontal Pod Autoscaler (HPA).
Surveillez le cluster pendant au moins 30 minutes après l'ajustement des quotas afin de confirmer que le HPA fonctionne comme prévu.
Supprimer un namespace
Les namespaces intégrés (default, kube-system, kube-public, kube-node-lease) ne peuvent pas être supprimés. Supprimez toutes les ressources présentes dans le namespace avant de le supprimer. Si le namespace reste longtemps dans l'état Terminating, consultez la rubrique Que faire si le namespace reste bloqué dans l'état Terminating ?.
Utiliser la console ACK
Sur la page Namespace, repérez le namespace cible et cliquez sur
> Delete dans la colonne Actions. Pour désactiver préalablement la protection contre la suppression, cliquez sur
> Disable Deletion Protection dans la colonne Actions.Dans la boîte de dialogue Confirm, vérifiez les ressources associées au namespace et cliquez sur Confirm.
Utiliser kubectl
kubectl delete namespace test
FAQ
Que faire si le namespace reste bloqué dans l'état Terminating ?
Lorsqu'un namespace contenant encore des ressources est supprimé, l'opération de suppression reste longtemps dans l'état Terminating. La solution consiste à vider le tableau finalizers dans la spécification du namespace ; Kubernetes supprime alors automatiquement le namespace. Notez que cette méthode peut laisser des ressources orphelines dans le cluster ; nettoyez donc les charges de travail du namespace avant de procéder.
Suivez les étapes ci-dessous pour forcer la suppression d'un namespace. Cet exemple utilise le namespace istio-system :
-
Ouvrez un terminal et démarrez un proxy inverse pour le cluster.
kubectl proxyRésultat attendu :
Starting to serve on 127.0.0.1:8001 -
Ouvrez un second terminal. Exportez un jeton et vérifiez la connectivité avec le serveur API.
export TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t') curl http://localhost:8001/api/v1/namespaces --header "Authorization: Bearer $TOKEN" --insecure -
Exportez la configuration du namespace dans un fichier JSON.
kubectl get namespace istio-system -o json > istio-system.json -
Ouvrez le fichier
istio-system.jsonet videz le tableaufinalizersdans la sectionspec."spec": { "finalizers": [] } -
Appliquez la configuration mise à jour pour supprimer les finalizers.
curl -X PUT --data-binary @istio-system.json http://localhost:8001/api/v1/namespaces/istio-system/finalize -H "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --insecure
Documents connexes
Pour les quotas et limites du cluster, y compris les limites de configuration, les limites de capacité et les quotas des services cloud dépendants, consultez la rubrique Quotas et limites.
Pour la configuration des quotas sur des types d'objets API spécifiques, consultez la page Configurer les quotas pour les objets API.
Pour une gestion fine des autorisations des clusters ou des namespaces avec RAM et RBAC, consultez les rubriques Utiliser RAM pour autoriser l'accès aux clusters et aux ressources cloud et Autoriser les opérations sur les ressources intra-cluster avec RBAC.