Les namespaces partitionnent un cluster Container Service for Kubernetes (ACK) partagé en espaces de travail isolés, permettant de définir des quotas de ressources, de gérer les autorisations et de suivre les 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 — notamment pour le CPU, la mémoire et le nombre de pods — pour éviter 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 ACK console. Dans le volet de navigation de gauche, cliquez sur ClustersClusters.
Sur la page ClustersClusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Namespaces and QuotasNamespaces and Quotas.
Cliquez sur CreateCreate. Dans la boîte de dialogue qui s'affiche, configurez le nom et le libellé du namespace, puis cliquez sur OKOK.
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 avec le statut 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 définies pour le namespace.
Utiliser la console ACK
Sur la page NamespaceNamespace, cliquez sur Resource Quotas and LimitsResource Quotas and Limits dans la colonne ActionsActions correspondant au namespace cible.
Dans la boîte de dialogue Resource Quotas and LimitsResource Quotas and Limits, configurez les quotas de ressources et les limites de ressources par défaut. Pour plus d'informations, consultez les pages Resource Quotas et Configure Default Memory Requests and Limits for a 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 vous assurer 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 NamespaceNamespace, repérez le namespace cible et cliquez sur

> DeleteDelete dans la colonne ActionsActions. Pour désactiver préalablement la protection contre la suppression, cliquez sur 
> Disable Deletion ProtectionDisable Deletion Protection dans la colonne ActionsActions.Dans la boîte de dialogue ConfirmConfirm, vérifiez les ressources associées au namespace, puis cliquez sur ConfirmConfirm.
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. Pour résoudre ce problème, videz le tableau finalizers dans la spécification du namespace ; Kubernetes supprimera alors automatiquement le namespace. Notez que cette opération 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
Documentation connexe
Pour connaître les quotas et les 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 configurer des quotas sur des types d'objets API spécifiques, consultez la page Configure Quotas for API Objects.
Pour une gestion fine des autorisations au niveau 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 internes au cluster avec RBAC.