Chapitre 9. Quotas


9.1. Quotas de ressources par projet

Un resource quota, défini par un objet ResourceQuota, fournit des contraintes qui limitent la consommation globale de ressources par projet. Il peut limiter la quantité d'objets pouvant être créés dans un projet par type, ainsi que la quantité totale de ressources de calcul et de stockage susceptibles d'être consommées par les ressources de ce projet.

Ce guide décrit le fonctionnement des quotas de ressources, la manière dont les administrateurs de clusters peuvent définir et gérer les quotas de ressources par projet, et la manière dont les développeurs et les administrateurs de clusters peuvent les visualiser.

9.1.1. Ressources gérées par quotas

Les paragraphes suivants décrivent l'ensemble des ressources de calcul et des types d'objets qui peuvent être gérés par un quota.

Note

Un pod est dans un état terminal si status.phase in (Failed, Succeeded) est vrai.

Tableau 9.1. Ressources informatiques gérées par quota
Nom de la ressourceDescription

cpu

La somme des demandes de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. cpu et requests.cpu sont la même valeur et peuvent être utilisés de manière interchangeable.

memory

La somme des demandes de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. memory et requests.memory sont la même valeur et peuvent être utilisés de manière interchangeable.

requests.cpu

La somme des demandes de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. cpu et requests.cpu sont la même valeur et peuvent être utilisés de manière interchangeable.

requests.memory

La somme des demandes de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. memory et requests.memory sont la même valeur et peuvent être utilisés de manière interchangeable.

limits.cpu

La somme des limites de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur.

limits.memory

La somme des limites de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur.

Tableau 9.2. Ressources de stockage gérées par quota
Nom de la ressourceDescription

requests.storage

La somme des demandes de stockage sur l'ensemble des réclamations de volumes persistants dans n'importe quel état ne peut pas dépasser cette valeur.

persistentvolumeclaims

Le nombre total de réclamations de volumes persistants qui peuvent exister dans le projet.

<storage-class-name>.storageclass.storage.k8s.io/requests.storage

La somme des demandes de stockage sur l'ensemble des réclamations de volumes persistants dans n'importe quel état qui ont une classe de stockage correspondante, ne peut pas dépasser cette valeur.

<storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims

Le nombre total de réclamations de volumes persistants avec une classe de stockage correspondante qui peuvent exister dans le projet.

ephemeral-storage

La somme des demandes de stockage éphémère local pour tous les pods dans un état non terminal ne peut pas dépasser cette valeur. ephemeral-storage et requests.ephemeral-storage sont la même valeur et peuvent être utilisés de manière interchangeable.

requests.ephemeral-storage

La somme des demandes de stockage éphémère pour tous les pods dans un état non terminal ne peut pas dépasser cette valeur. ephemeral-storage et requests.ephemeral-storage sont la même valeur et peuvent être utilisés de manière interchangeable.

limits.ephemeral-storage

La somme des limites de stockage éphémère de tous les pods dans un état non terminal ne peut pas dépasser cette valeur.

Tableau 9.3. Nombre d'objets gérés par quota
Nom de la ressourceDescription

pods

Le nombre total de pods dans un état non terminal qui peuvent exister dans le projet.

replicationcontrollers

Le nombre total de contrôleurs de réplication qui peuvent exister dans le projet.

resourcequotas

Nombre total de quotas de ressources pouvant exister dans le projet.

services

Le nombre total de services qui peuvent exister dans le projet.

services.loadbalancers

Le nombre total de services de type LoadBalancer qui peuvent exister dans le projet.

services.nodeports

Le nombre total de services de type NodePort qui peuvent exister dans le projet.

secrets

Le nombre total de secrets qui peuvent exister dans le projet.

configmaps

Le nombre total d'objets ConfigMap qui peuvent exister dans le projet.

persistentvolumeclaims

Le nombre total de réclamations de volumes persistants qui peuvent exister dans le projet.

openshift.io/imagestreams

Le nombre total de flux d'images qui peuvent exister dans le projet.

9.1.2. Périmètre des quotas

Chaque quota peut être associé à un ensemble de scopes. Un quota ne mesure l'utilisation d'une ressource que si elle correspond à l'intersection des champs d'application énumérés.

L'ajout d'un champ d'application à un quota restreint l'ensemble des ressources auxquelles ce quota peut s'appliquer. La spécification d'une ressource en dehors de l'ensemble autorisé entraîne une erreur de validation.

Champ d'application

Description

BestEffort

Faire correspondre les pods qui ont la meilleure qualité de service pour cpu ou memory.

NotBestEffort

Les pods qui n'ont pas la meilleure qualité de service pour cpu et memory sont jumelés.

Un champ d'application BestEffort limite un quota aux ressources suivantes :

  • pods

Un champ d'application NotBestEffort limite un quota au suivi des ressources suivantes :

  • pods
  • memory
  • requests.memory
  • limits.memory
  • cpu
  • requests.cpu
  • limits.cpu

9.1.3. Application des quotas

Après la création d'un quota de ressources pour un projet, le projet limite la possibilité de créer de nouvelles ressources susceptibles d'enfreindre la contrainte de quota jusqu'à ce qu'il ait calculé des statistiques d'utilisation mises à jour.

Après la création d'un quota et la mise à jour des statistiques d'utilisation, le projet accepte la création de nouveaux contenus. Lorsque vous créez ou modifiez des ressources, votre quota d'utilisation est incrémenté dès la demande de création ou de modification de la ressource.

Lorsque vous supprimez une ressource, l'utilisation de votre quota est décrémentée lors du prochain recalcul complet des statistiques de quota pour le projet. Un délai configurable détermine le temps nécessaire pour ramener les statistiques d'utilisation des quotas à la valeur observée actuellement dans le système.

Si les modifications du projet dépassent une limite de quota d'utilisation, le serveur refuse l'action et un message d'erreur approprié est renvoyé à l'utilisateur expliquant la contrainte de quota violée et les statistiques d'utilisation actuellement observées dans le système.

9.1.4. Demandes et limites

Lors de l'allocation des ressources informatiques, chaque conteneur peut spécifier une demande et une valeur limite pour le processeur, la mémoire et le stockage éphémère. Les quotas peuvent restreindre n'importe laquelle de ces valeurs.

Si le quota a une valeur spécifiée pour requests.cpu ou requests.memory, il faut que chaque conteneur entrant fasse une demande explicite pour ces ressources. Si le quota a une valeur spécifiée pour limits.cpu ou limits.memory, il faut que chaque conteneur entrant spécifie une limite explicite pour ces ressources.

9.1.5. Exemples de définitions de quotas de ressources

core-object-counts.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: core-object-counts
spec:
  hard:
    configmaps: "10" 1
    persistentvolumeclaims: "4" 2
    replicationcontrollers: "20" 3
    secrets: "10" 4
    services: "10" 5
    services.loadbalancers: "2" 6

1
Le nombre total d'objets ConfigMap qui peuvent exister dans le projet.
2
Le nombre total de réclamations de volume persistantes (PVC) qui peuvent exister dans le projet.
3
Le nombre total de contrôleurs de réplication qui peuvent exister dans le projet.
4
Le nombre total de secrets qui peuvent exister dans le projet.
5
Le nombre total de services qui peuvent exister dans le projet.
6
Le nombre total de services de type LoadBalancer qui peuvent exister dans le projet.

openshift-object-counts.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: openshift-object-counts
spec:
  hard:
    openshift.io/imagestreams: "10" 1

1
Nombre total de flux d'images pouvant exister dans le projet.

compute-resources.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "4" 1
    requests.cpu: "1" 2
    requests.memory: 1Gi 3
    limits.cpu: "2" 4
    limits.memory: 2Gi 5

1
Le nombre total de pods dans un état non terminal qui peuvent exister dans le projet.
2
Sur l'ensemble des pods dans un état non terminal, la somme des demandes de CPU ne peut pas dépasser 1 cœur.
3
Sur l'ensemble des pods dans un état non terminal, la somme des demandes de mémoire ne peut pas dépasser 1Gi.
4
Pour tous les pods dans un état non terminal, la somme des limites de CPU ne peut pas dépasser 2 cœurs.
5
Pour tous les pods dans un état non terminal, la somme des limites de mémoire ne peut pas dépasser 2Gi.

besteffort.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: besteffort
spec:
  hard:
    pods: "1" 1
  scopes:
  - BestEffort 2

1
Le nombre total de pods dans un état non terminal avec une qualité de service BestEffort qui peut exister dans le projet.
2
Restreint le quota aux seuls pods correspondant à la qualité de service BestEffort pour la mémoire ou l'unité centrale.

compute-resources-long-running.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources-long-running
spec:
  hard:
    pods: "4" 1
    limits.cpu: "4" 2
    limits.memory: "2Gi" 3
  scopes:
  - NotTerminating 4

1
Le nombre total de pods dans un état non terminal.
2
Pour tous les pods dans un état non terminal, la somme des limites de CPU ne peut pas dépasser cette valeur.
3
La somme des limites de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur.
4
Restreint le quota aux seuls pods correspondants pour lesquels spec.activeDeadlineSeconds est défini sur nil. Les pods de construction relèvent de NotTerminating à moins que la politique RestartNever ne soit appliquée.

compute-resources-time-bound.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources-time-bound
spec:
  hard:
    pods: "2" 1
    limits.cpu: "1" 2
    limits.memory: "1Gi" 3
  scopes:
  - Terminating 4

1
Le nombre total de pods dans un état de terminaison.
2
Pour tous les pods en état de terminaison, la somme des limites de CPU ne peut pas dépasser cette valeur.
3
La somme des limites de mémoire ne peut pas dépasser cette valeur pour tous les pods en état de terminaison.
4
Restreint le quota aux seuls pods correspondants où spec.activeDeadlineSeconds >=0. Par exemple, ce quota s'applique aux pods de construction ou de déploiement, mais pas aux pods de longue durée comme un serveur web ou une base de données.

storage-consumption.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: storage-consumption
spec:
  hard:
    persistentvolumeclaims: "10" 1
    requests.storage: "50Gi" 2
    gold.storageclass.storage.k8s.io/requests.storage: "10Gi" 3
    silver.storageclass.storage.k8s.io/requests.storage: "20Gi" 4
    silver.storageclass.storage.k8s.io/persistentvolumeclaims: "5" 5
    bronze.storageclass.storage.k8s.io/requests.storage: "0" 6
    bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "0" 7
    requests.ephemeral-storage: 2Gi 8
    limits.ephemeral-storage: 4Gi 9

1
Le nombre total de demandes de volumes persistants dans un projet
2
Pour toutes les demandes de volume persistant d'un projet, la somme de l'espace de stockage demandé ne peut dépasser cette valeur.
3
Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage or ne peut pas dépasser cette valeur.
4
Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage argent ne peut pas dépasser cette valeur.
5
Pour toutes les demandes de volumes persistants d'un projet, le nombre total de demandes dans la classe de stockage Silver ne peut pas dépasser cette valeur.
6
Sur l'ensemble des demandes de volumes persistants d'un projet, la somme des espaces de stockage demandés dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à 0, cela signifie que la classe de stockage bronze ne peut pas demander de stockage.
7
Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à 0, cela signifie que la classe de stockage bronze ne peut pas créer de demandes.
8
Sur l'ensemble des pods dans un état non terminal, la somme des demandes de stockage éphémère ne peut pas dépasser 2Gi.
9
La somme des limites de stockage éphémère de tous les pods dans un état non terminal ne peut pas dépasser 4Gi.

9.1.6. Création d'un quota

Vous pouvez créer un quota pour limiter l'utilisation des ressources dans un projet donné.

Procédure

  1. Définir le quota dans un fichier.
  2. Utilisez le fichier pour créer le quota et l'appliquer à un projet :

    $ oc create -f <file> [-n <project_name>]

    Par exemple :

    $ oc create -f core-object-counts.yaml -n demoproject

9.1.6.1. Création de quotas de nombre d'objets

Vous pouvez créer un quota de comptage d'objets pour tous les types de ressources standard à espace de noms sur OpenShift Container Platform, tels que les objets BuildConfig et DeploymentConfig. Un quota de comptage d'objets place un quota défini sur tous les types de ressources standard à espace de noms.

Lors de l'utilisation d'un quota de ressources, un objet est imputé au quota lors de sa création. Ces types de quotas sont utiles pour se protéger contre l'épuisement des ressources. Le quota ne peut être créé que s'il y a suffisamment de ressources disponibles dans le projet.

Procédure

Pour configurer un quota de comptage d'objets pour une ressource :

  1. Exécutez la commande suivante :

    $ oc create quota <name> \
        --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota> 1
    1
    La variable <resource> est le nom de la ressource et <group> est le groupe API, le cas échéant. Utilisez la commande oc api-resources pour obtenir une liste des ressources et des groupes d'API qui leur sont associés.

    Par exemple :

    $ oc create quota test \
        --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4

    Exemple de sortie

    resourcequota "test" created

    Cet exemple limite les ressources répertoriées à la limite stricte de chaque projet du cluster.

  2. Vérifiez que le quota a été créé :

    $ oc describe quota test

    Exemple de sortie

    Name:                         test
    Namespace:                    quota
    Resource                      Used  Hard
    --------                      ----  ----
    count/deployments.extensions  0     2
    count/pods                    0     3
    count/replicasets.extensions  0     4
    count/secrets                 0     4

9.1.6.2. Définition d'un quota de ressources pour les ressources étendues

Le surengagement des ressources n'est pas autorisé pour les ressources étendues, vous devez donc spécifier requests et limits pour la même ressource étendue dans un quota. Actuellement, seuls les éléments de quota avec le préfixe requests. sont autorisés pour les ressources étendues. Voici un exemple de scénario permettant de définir un quota de ressources pour la ressource GPU nvidia.com/gpu.

Procédure

  1. Déterminez le nombre de GPU disponibles sur un nœud de votre cluster. Par exemple, le nombre de GPU disponibles sur un nœud de votre cluster :

    # oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'

    Exemple de sortie

                        openshift.com/gpu-accelerator=true
    Capacity:
     nvidia.com/gpu:  2
    Allocatable:
     nvidia.com/gpu:  2
      nvidia.com/gpu  0           0

    Dans cet exemple, 2 GPU sont disponibles.

  2. Fixer un quota dans l'espace de noms nvidia. Dans cet exemple, le quota est de 1:

    # cat gpu-quota.yaml

    Exemple de sortie

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: gpu-quota
      namespace: nvidia
    spec:
      hard:
        requests.nvidia.com/gpu: 1

  3. Créer le quota :

    # oc create -f gpu-quota.yaml

    Exemple de sortie

    resourcequota/gpu-quota created

  4. Vérifiez que le quota de l'espace de noms est correct :

    # oc describe quota gpu-quota -n nvidia

    Exemple de sortie

    Name:                    gpu-quota
    Namespace:               nvidia
    Resource                 Used  Hard
    --------                 ----  ----
    requests.nvidia.com/gpu  0     1

  5. Définir un pod qui demande un seul GPU. L'exemple de fichier de définition suivant s'appelle gpu-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      generateName: gpu-pod-
      namespace: nvidia
    spec:
      restartPolicy: OnFailure
      containers:
      - name: rhel7-gpu-pod
        image: rhel7
        env:
          - name: NVIDIA_VISIBLE_DEVICES
            value: all
          - name: NVIDIA_DRIVER_CAPABILITIES
            value: "compute,utility"
          - name: NVIDIA_REQUIRE_CUDA
            value: "cuda>=5.0"
        command: ["sleep"]
        args: ["infinity"]
        resources:
          limits:
            nvidia.com/gpu: 1
  6. Créer la capsule :

    # oc create -f gpu-pod.yaml
  7. Vérifiez que le module est en cours d'exécution :

    # oc get pods

    Exemple de sortie

    NAME              READY     STATUS      RESTARTS   AGE
    gpu-pod-s46h7     1/1       Running     0          1m

  8. Vérifiez que le compteur du quota Used est correct :

    # oc describe quota gpu-quota -n nvidia

    Exemple de sortie

    Name:                    gpu-quota
    Namespace:               nvidia
    Resource                 Used  Hard
    --------                 ----  ----
    requests.nvidia.com/gpu  1     1

  9. Tentative de création d'un second pod GPU dans l'espace de noms nvidia. Celui-ci est techniquement disponible sur le nœud car il possède 2 GPU :

    # oc create -f gpu-pod.yaml

    Exemple de sortie

    Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1

    Ce message d'erreur Forbidden est attendu parce que vous avez un quota de 1 GPU et que ce pod a essayé d'allouer un deuxième GPU, qui dépasse son quota.

9.1.7. Consultation d'un quota

Vous pouvez consulter les statistiques d'utilisation liées aux limites définies dans le quota d'un projet en naviguant dans la console web jusqu'à la page Quota du projet.

Vous pouvez également utiliser l'interface de gestion pour afficher les détails des quotas.

Procédure

  1. Obtenir la liste des quotas définis dans le projet. Par exemple, pour un projet appelé demoproject:

    $ oc get quota -n demoproject

    Exemple de sortie

    NAME                AGE
    besteffort          11m
    compute-resources   2m
    core-object-counts  29m

  2. Décrivez le quota qui vous intéresse, par exemple le quota core-object-counts:

    $ oc describe quota core-object-counts -n demoproject

    Exemple de sortie

    Name:			core-object-counts
    Namespace:		demoproject
    Resource		Used	Hard
    --------		----	----
    configmaps		3	10
    persistentvolumeclaims	0	4
    replicationcontrollers	3	20
    secrets			9	10
    services		2	10

9.1.8. Configuration de quotas de ressources explicites

Configurer des quotas de ressources explicites dans un modèle de demande de projet pour appliquer des quotas de ressources spécifiques dans les nouveaux projets.

Conditions préalables

  • Accès au cluster en tant qu'utilisateur ayant le rôle d'administrateur de cluster.
  • Installez le CLI OpenShift (oc).

Procédure

  1. Ajouter une définition de quota de ressources à un modèle de demande de projet :

    • Si un modèle de demande de projet n'existe pas dans un cluster :

      1. Créez un modèle de projet bootstrap et produisez-le dans un fichier appelé template.yaml:

        oc adm create-bootstrap-project-template -o yaml > template.yaml
      2. Ajoutez une définition de quota de ressources à template.yaml. L'exemple suivant définit un quota de ressources nommé "consommation de stockage". La définition doit être ajoutée avant la section parameters: dans le modèle :

        - apiVersion: v1
          kind: ResourceQuota
          metadata:
            name: storage-consumption
            namespace: ${PROJECT_NAME}
          spec:
            hard:
              persistentvolumeclaims: "10" 1
              requests.storage: "50Gi" 2
              gold.storageclass.storage.k8s.io/requests.storage: "10Gi" 3
              silver.storageclass.storage.k8s.io/requests.storage: "20Gi" 4
              silver.storageclass.storage.k8s.io/persistentvolumeclaims: "5" 5
              bronze.storageclass.storage.k8s.io/requests.storage: "0" 6
              bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "0" 7
        1
        Le nombre total de demandes de volumes persistants dans un projet.
        2
        Pour toutes les demandes de volume persistant d'un projet, la somme de l'espace de stockage demandé ne peut dépasser cette valeur.
        3
        Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage or ne peut pas dépasser cette valeur.
        4
        Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage argent ne peut pas dépasser cette valeur.
        5
        Pour toutes les demandes de volumes persistants d'un projet, le nombre total de demandes dans la classe de stockage Silver ne peut pas dépasser cette valeur.
        6
        Sur l'ensemble des demandes de volumes persistants d'un projet, la somme des espaces de stockage demandés dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à 0, la classe de stockage bronze ne peut pas demander de stockage.
        7
        Sur l'ensemble des demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est définie sur 0, la classe de stockage bronze ne peut pas créer de demandes.
      3. Créer un modèle de demande de projet à partir du fichier template.yaml modifié dans l'espace de noms openshift-config:

        $ oc create -f template.yaml -n openshift-config
        Note

        Pour inclure la configuration en tant qu'annotation kubectl.kubernetes.io/last-applied-configuration, ajoutez l'option --save-config à la commande oc create.

        Par défaut, le modèle s'appelle project-request.

    • Si un modèle de demande de projet existe déjà dans un cluster :

      Note

      Si vous gérez des objets de manière déclarative ou impérative au sein de votre cluster à l'aide de fichiers de configuration, modifiez le modèle de demande de projet existant à l'aide de ces fichiers.

      1. Liste des modèles dans l'espace de noms openshift-config:

        $ oc get templates -n openshift-config
      2. Modifier un modèle de demande de projet existant :

        oc edit template <project_request_template> -n openshift-config
      3. Ajoutez une définition de quota de ressources, telle que l'exemple précédent storage-consumption, dans le modèle existant. La définition doit être ajoutée avant la section parameters: du modèle.
  2. Si vous avez créé un modèle de demande de projet, faites-y référence dans la ressource de configuration du projet du cluster :

    1. Accéder à la ressource de configuration du projet pour l'éditer :

      • En utilisant la console web :

        1. Naviguez jusqu'à la page Administration Cluster Settings.
        2. Cliquez sur Configuration pour afficher toutes les ressources de configuration.
        3. Trouvez l'entrée pour Project et cliquez sur Edit YAML.
      • En utilisant le CLI :

        1. Modifier la ressource project.config.openshift.io/cluster:

          $ oc edit project.config.openshift.io/cluster
    2. Mettez à jour la section spec de la ressource de configuration du projet pour inclure les paramètres projectRequestTemplate et name. L'exemple suivant fait référence au nom du modèle de demande de projet par défaut project-request:

      apiVersion: config.openshift.io/v1
      kind: Project
      metadata:
        ...
      spec:
        projectRequestTemplate:
          name: project-request
  3. Vérifier que le quota de ressources est appliqué lors de la création des projets :

    1. Créer un projet :

      oc new-project <nom_du_projet>
    2. Liste des quotas de ressources du projet :

      $ oc get resourcequotas
    3. Décrivez en détail le quota de ressources :

      oc describe resourcequotas <resource_quota_name>
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.