Annuaire d'articles
- Espaces de noms
-
- Importance des espaces de noms
- Scénarios d'utilisation de l'espace de noms
- espace de noms initial
- Opérations de commande courantes
- Cas du site Web officiel : créez un espace de noms, configurez les quotas de mémoire et de processeur, et créez un pod pour utiliser l'espace de noms
-
- 1. Créez un espace de noms
- 2. Créez un objet de quota de ressources et attribuez une valeur à cet objet de ressource.
- 3. Liez les objets d'espace de noms et de quota de ressources
- 4. Affichez les informations sur l'objet de quota de ressources correspondant à l'espace de noms et affichez-les sous la forme d'un fichier yaml.
- 5.Créer un module
- 6. Après avoir créé le pod, affichez à nouveau l'objet de quota de ressources
- 7. Essayez de créer un deuxième pod
Espaces de noms
L'espace de noms dans Kubernetes est un mécanisme permettant d'organiser et d'isoler les ressources au sein d'un cluster . Un espace de noms peut être considéré comme un cluster virtuel , qui divise le cluster physique en plusieurs parties logiques, chaque partie possédant son propre ensemble de ressources (telles que Pod, Service, ConfigMap, etc.).
L'espace de noms convient pour isoler les ressources créées par différents utilisateurs
Utilisé pour classer, filtrer et gérer n'importe quel groupe d'objets dans le cluster . Chaque charge de travail ajoutée à un cluster Kubernetes doit être placée dans un espace de noms.
Différentes entreprises (Web, base de données, centre de messagerie) peuvent être déployées dans différents espaces de noms pour obtenir une isolation commerciale, et des quotas de ressources peuvent leur être imposés pour limiter l'utilisation de ressources telles que le processeur et la mémoire.
Importance des espaces de noms
Les espaces de noms donnent une portée aux noms d'objets dans le cluster. Bien que les noms doivent être uniques au sein d’un espace de noms, le même nom peut être utilisé dans différents espaces de noms . Cela peut être d'une grande aide pour certains scénarios. Par exemple, si vous utilisez des espaces de noms pour diviser les environnements de cycle de vie des applications (tels que le développement, la préparation et la production), vous pouvez conserver des copies des mêmes objets portant les mêmes noms dans chaque environnement.
Les espaces de noms permettent également aux utilisateurs d'appliquer facilement des politiques à des parties spécifiques du cluster . Vous pouvez contrôler l'utilisation des ressources en définissant un objet ResourceQuota, qui définit les limites d'utilisation des ressources par espace de noms. De même, lorsque vous utilisez une CNI (Container Network Interface) qui prend en charge la politique réseau sur le cluster, comme Calico ou Canal (calico pour la politique, flanelle pour le réseau). Vous appliquez NetworkPolicy à un espace de noms, où les règles définissent la manière dont les pods communiquent entre eux. Différents espaces de noms peuvent avoir des stratégies différentes.
L'un des plus grands avantages de l'utilisation des espaces de noms est la possibilité de tirer parti de Kubernetes RBAC (contrôle d'accès basé sur les rôles) . RBAC vous permet de développer des rôles sous un seul nom, regroupant ainsi une liste d'autorisations ou de capacités. Les objets ClusterRole sont utilisés pour définir des modèles d'utilisation à l'échelle du cluster, tandis que les types d'objets de rôle s'appliquent à des espaces de noms spécifiques, offrant ainsi un contrôle et une granularité accrus. Une fois qu'un rôle est créé, un RoleBinding peut accorder des fonctionnalités définies à des utilisateurs ou à des groupes d'utilisateurs spécifiques dans le contexte d'un espace de noms unique. De cette manière, les espaces de noms permettent aux opérateurs de cluster de mapper des politiques identiques à des collections organisées de ressources.
Scénarios d'utilisation de l'espace de noms
- Mappage des espaces de noms aux équipes ou aux projets
En fournissant des espaces de noms dédiés aux équipes, vous pouvez utiliser les politiques RBAC pour déléguer certaines fonctions d'autogestion et d'automatisation. La définition de quotas de ressources pour les équipes et les projets est également très utile. De cette façon, vous pouvez accéder aux ressources de manière appropriée en fonction des besoins et des priorités de votre organisation. - Utilisez des espaces de noms pour partitionner les environnements de cycle de vie.
Les espaces de noms sont idéaux pour partitionner les environnements de développement, de préparation et de production dans un cluster. Il nous est généralement conseillé de déployer les charges de travail de production dans un cluster complètement séparé pour garantir une isolation maximale. - Utilisez des espaces de noms pour isoler différents consommateurs.
Segmentez les charges de travail en fonction des consommateurs. Par exemple, si votre cluster fournit une infrastructure pour plusieurs clients, la segmentation par espace de noms vous permettra de gérer chaque client tout en suivant la destination des factures.
espace de noms initial
Kubernetes crée quatre espaces de noms initiaux au démarrage :
-
default
Kubernetes inclut cet espace de noms afin que vous puissiez commencer à utiliser un nouveau cluster sans créer de nouvel espace de noms.
-
kube-node-lease
Cet espace de noms contient des objets Lease utilisés pour s'associer à chaque nœud. Les baux de nœuds permettent au kubelet d'envoyer des battements de cœur afin que le plan de contrôle puisse détecter les pannes de nœuds.
-
kube-public
Tous les clients (y compris les clients non authentifiés) peuvent lire cet espace de noms. Cet espace de noms est principalement réservé à l'utilisation du cluster afin que certaines ressources doivent être visibles et lisibles dans le cluster. Les attributs publics de cet espace de noms constituent une convention et non une exigence.
-
kube-system
Cet espace de noms est utilisé pour les objets créés par le système Kubernetes.
Opérations de commande courantes
1. Afficher tous les espaces de noms
[root@k8s-master ~]# kubectl get namespace
NAME STATUS AGE
default Active 7d6h
kube-node-lease Active 7d6h
kube-public Active 7d6h
kube-system Active 7d6h
quota-mem-cpu-example Active 47h
Vous pouvez voir les quatre espaces de noms initiaux fournis avec le démarrage de k8.
2. Afficher les détails de l'espace de noms
[root@k8s-master ~]# kubectl describe namespace kube-system
Name: kube-system
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
Cette commande peut voir les objets de quota de ressources pour l'espace de noms
3. Créez un espace de noms
[root@k8s-master ~]# kubectl create namespace quota-mem-cpu-example
Afficher l'espace de noms
[root@k8s-master ~]# kubectl get namespace
4. Affichez les pods sous un certain espace de noms
[root@k8s-master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6949477b58-m954m 1/1 Running 15 7d3h
calico-node-c55c9 1/1 Running 11 7d3h
calico-node-cxnbg 1/1 Running 9 7d3h
calico-node-pm4jp 1/1 Running 10 7d3h
coredns-7f89b7bc75-hl2tf 1/1 Running 9 7d6h
coredns-7f89b7bc75-wkf68 1/1 Running 10 7d6h
etcd-k8s-master 1/1 Running 11 7d6h
kube-apiserver-k8s-master 1/1 Running 14 7d6h
kube-controller-manager-k8s-master 1/1 Running 14 7d6h
kube-proxy-55krt 1/1 Running 11 7d6h
kube-proxy-5zjxj 1/1 Running 9 7d3h
kube-proxy-dnvgg 1/1 Running 10 7d3h
kube-scheduler-k8s-master 1/1 Running 11 7d6h
metrics-server-769f6c8464-wqwdd 1/1 Running 2 26h
Remarque : Si vous ne spécifiez pas l'espace de noms -n, les pods dans l'espace de noms par défaut seront affichés par défaut. Si vous ne spécifiez pas d'espace de noms lors de la création d'un pod, le pod sera créé uniquement dans l'espace de noms par défaut.
5. Supprimer l'espace de noms
[root@k8s-master ~]# kubectl delete namespace mem-example
Cas du site Web officiel : créez un espace de noms, configurez les quotas de mémoire et de processeur, et créez un pod pour utiliser l'espace de noms
Reportez-vous à la documentation du site officiel : https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/
1. Créez un espace de noms
[root@k8s-master ~]# kubectl create namespace quota-mem-cpu-example
Afficher l'espace de noms
[root@k8s-master ~]# kubectl get namespace
2. Créez un objet de quota de ressources et attribuez une valeur à cet objet de ressource.
[root@k8s-master ~]# vim quota-mem-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
- apiversion, déclare que la version de l'apiserver est v1
- genre, objet, crée un objet de quota de ressources
- métadonnées, données de version, nom spécifié
- dur, limitations matérielles
- request.cpu : "1", demander un processeur
- limites.cpu : "2", un maximum de 2 processeurs peuvent être utilisés
3. Liez les objets d'espace de noms et de quota de ressources
[root@k8s-master ~]# kubectl apply -f quota-mem-cpu.yaml --namespace=quota-mem-cpu-example
4. Affichez les informations sur l'objet de quota de ressources correspondant à l'espace de noms et affichez-les sous la forme d'un fichier yaml.
[root@k8s-master ~]# kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
ResourceQuota définit les exigences suivantes dans l'espace de noms quota-mem-cpu-example :
- Tous les conteneurs de chaque pod de l'espace de noms doivent avoir des demandes et des limites de mémoire, ainsi que des demandes et des limites de CPU.
- Le total des demandes de mémoire de tous les pods de l'espace de noms ne peut pas dépasser 1 Gio.
- La limite de mémoire totale de tous les pods de l'espace de noms ne peut pas dépasser 2 Gio.
- Le nombre total de demandes de processeur de tous les pods de l'espace de noms ne peut pas dépasser 1 processeur.
- La limite totale de processeur de tous les pods de l'espace de noms ne peut pas dépasser 2 processeurs.
5.Créer un module
Modifier le fichier yaml
[root@k8s-master ~]# vim quota-mem-cpu-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"
Créer un module
[root@k8s-master ~]# kubectl apply -f quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example
Afficher les pods créés dans l'espace de noms spécifié
[root@k8s-master ~]# kubectl get pod --namespace=quota-mem-cpu-example
NAME READY STATUS RESTARTS AGE
quota-mem-cpu-demo 1/1 Running 0 70s
6. Après avoir créé le pod, affichez à nouveau l'objet de quota de ressources
[root@k8s-master ~]# kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
Après avoir créé le pod, j'ai constaté que le processeur et la mémoire correspondants avaient été utilisés.
7. Essayez de créer un deuxième pod
Modifier le fichier yaml
[root@k8s-master ~]# vim quota-mem-cpu-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo-2
spec:
containers:
- name: quota-mem-cpu-demo-2-ctr
image: redis
resources:
limits:
memory: "1Gi"
cpu: "800m"
requests:
memory: "700Mi"
cpu: "400m"
Créer un module
[root@k8s-master ~]# kubectl apply -f quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example
Error from server (Forbidden): error when creating "quota-mem-cpu-pod-2.yaml": pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo, requested: requests.memory=700Mi, used: requests.memory=600Mi, limited: requests.memory=1Gi
Dans le manifeste, vous pouvez voir que la demande de mémoire du Pod est de 700 Mio. Veuillez noter que la somme des nouvelles demandes de mémoire et des demandes de mémoire déjà utilisées dépasse le quota de demandes de mémoire : 600 Mo + 700 Mo > 1 Gio.
Le deuxième pod ne peut pas être créé avec succès. Le résultat montre que la création d'un deuxième pod entraînera un dépassement du nombre total de demandes de mémoire par rapport au quota de demandes de mémoire .