notes d'étude k8s (4) : explication détaillée de l'espace de noms

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.

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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 .

Je suppose que tu aimes

Origine blog.csdn.net/qq_57629230/article/details/131384133
conseillé
Classement