Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Guide d’exploitation et de maintenance de la suite cloud-native pour l’IA

Dernière mise à jour :Aug 11, 2026

Installez les composants d’IA/ML, surveillez les ressources GPU et gérez les quotas des équipes sur des clusters ACK Pro.

Trois tâches principales : installer la suite, consulter les tableaux de bord des ressources et gérer les utilisateurs et les quotas grâce à la planification de capacité.

Prérequis

Avant de commencer :

  • Un cluster ACK Pro exécutant Kubernetes 1.18 ou une version ultérieure

  • Le module complémentaire de surveillance et le service Simple Log Service activés sur la page Component Configurations lors de la création du cluster

Concepts clés

Périmètre de sécurité

Kubernetes est un orchestrateur mono-locataire : un seul plan de contrôle dessert tous les locataires d’un cluster. Le cluster constitue la seule frontière de sécurité stricte. Les arborescences de quotas, les groupes d’utilisateurs et les namespaces offrent des garde-fous organisationnels et une isolation logique, mais ne garantissent pas le même niveau de sécurité qu’une séparation au niveau du cluster. Concevez votre architecture multi-locataire en conséquence.

Fonctionnement de la planification de capacité

Chaque nœud de quota dans une arborescence de quotas dispose de deux paramètres :

  • Min : les ressources minimales garanties que le namespace peut toujours revendiquer, même lorsque le cluster est sous pression

  • Max : les ressources maximales que le namespace peut utiliser lorsque de la capacité inutilisée est disponible

Les autres namespaces peuvent emprunter la capacité inutilisée jusqu’à leur limite Max. Lorsque le namespace propriétaire a besoin de récupérer son minimum, le planificateur reprend les ressources en tenant compte de la priorité des charges de travail, de leur disponibilité et de leur heure de création.

Objets de ressource

Objet Rôle
Arborescence de quotas Structure hiérarchique d’allocation des ressources
Nœud de quota Un nœud dans l’arborescence ; chaque nœud feuille correspond à un ou plusieurs namespaces
Groupe d’utilisateurs La plus petite unité d’allocation ; correspond à un nœud de quota feuille
Utilisateur Détient un compte de service Kubernetes pour soumettre des jobs et accéder à la console
Namespace Namespace Kubernetes lié à un nœud de quota feuille

Rôles utilisateur

Rôle Autorisations
admin Se connecter au tableau de bord IA, gérer les composants du cluster et disposer de toutes les autorisations des chercheurs
researcher Soumettre des jobs, utiliser les ressources du cluster, se connecter à la console de développement IA

Étape 1 : Installer la suite cloud-native pour l’IA

La suite comprend six catégories de composants — installez uniquement ceux dont vos charges de travail ont besoin. Arena est sélectionné par défaut et est requis.

Catégorie de composant Objectif Installation séparée ?
Élasticité des tâches Mettre à l’échelle dynamiquement les charges de travail IA Non
Accélération des données Accélérer l’accès aux jeux de données Non
Planification des tâches IA Planifier les charges de travail IA avec des politiques conscientes de la capacité Non
Gestion du cycle de vie des tâches IA Gérer les cycles de vie des jobs d’entraînement Non
Tableau de bord IA Surveiller les ressources GPU et les quotas Oui (nécessite des autorisations RAM)
Console de développement IA Soumettre et gérer des jobs IA Oui (nécessite des autorisations RAM)

Déployer la suite

  1. Connectez-vous à la console ACK et cliquez sur Clusters dans le volet de navigation de gauche.

  2. Cliquez sur le nom du cluster, puis choisissez Applications > Cloud-native AI Suite dans le volet de gauche.

  3. Cliquez sur Deploy.

  4. Sélectionnez les composants et cliquez sur Deploy Cloud-native AI Suite. Le système vérifie les dépendances avant le déploiement. Après l’installation, la liste Components vous permet de Deploy, Upgrade ou Uninstall des composants individuels.

  5. Après avoir installé ack-ai-dashboard et ack-ai-dev-console, des liens vers AI Dashboard et AI Developer Console apparaissent sur la page Cloud-native AI Suite.

    Console

Configurer le tableau de bord IA

Important

Depuis le 22 janvier 2025, la console IA (tableau de bord IA et console de développement IA) nécessite un accès via liste d’autorisation. Les déploiements effectués avant cette date ne sont pas concernés. Les utilisateurs non inclus dans la liste d’autorisation peuvent utiliser la console IA open source à la place.

Accorder des autorisations RAM au rôle worker

Avant que le tableau de bord IA puisse accéder aux données du cluster, associez une politique RAM personnalisée au rôle worker du cluster.

  1. Créez une politique personnalisée.

    1. Connectez-vous à la console RAM et choisissez Permissions > Policies dans le volet de navigation de gauche.

    2. Cliquez sur Create Policy, sélectionnez l’onglet JSON et ajoutez la politique suivante :

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "cs:*",
                      "log:GetProject",
                      "log:GetLogStore",
                      "log:GetConfig",
                      "log:GetMachineGroup",
                      "log:GetAppliedMachineGroups",
                      "log:GetAppliedConfigs",
                      "log:GetIndex",
                      "log:GetSavedSearch",
                      "log:GetDashboard",
                      "log:GetJob",
                      "ecs:DescribeInstances",
                      "ecs:DescribeSpotPriceHistory",
                      "ecs:DescribePrice",
                      "eci:DescribeContainerGroups",
                      "eci:DescribeContainerGroupPrice",
                      "log:GetLogStoreLogs",
                      "ims:CreateApplication",
                      "ims:UpdateApplication",
                      "ims:GetApplication",
                      "ims:ListApplications",
                      "ims:DeleteApplication",
                      "ims:CreateAppSecret",
                      "ims:GetAppSecret",
                      "ims:ListAppSecretIds",
                      "ims:ListUsers"
                  ],
                  "Resource": "*"
              }
          ]
      }
    3. Nommez la politique k8sWorkerRolePolicy-{ClusterID} et cliquez sur OK.

  2. Associez la politique au rôle worker du cluster.

    1. Dans la console RAM, choisissez Identities > Roles et recherchez KubernetesWorkerRole-{ClusterID}.

    2. Cliquez sur Grant Permission.

    3. Dans Select Policy, cliquez sur Custom Policy, recherchez k8sWorkerRolePolicy-{ClusterID}, sélectionnez-la et cliquez sur OK.

Finaliser la configuration du tableau de bord IA

  1. Sur la page Cloud-native AI Suite, sélectionnez Sample Console pour Interaction Mode. Une boîte de dialogue Note s’affiche.

    • Si Authorized s’affiche, passez à l’étape 3.

    • Si Unauthorized apparaît en rouge, complétez les autorisations RAM ci-dessus et cliquez sur Authorization Check. Après l’autorisation, Authorized s’affiche. Prompt dialog Authorized

  2. Définissez Console Data Storage : Pre-installed MySQL pour les tests ou ApsaraDB RDS pour la production. Consultez la section Installer et configurer le tableau de bord IA et la console de développement IA.

  3. Cliquez sur Deploy Cloud-native AI Suite. Le tableau de bord IA est prêt lorsque son statut indique Ready.

(Facultatif) Créer et accélérer un jeu de données

Montez des jeux de données depuis Object Storage Service (OSS) en tant que volumes persistants (PV) et accélérez l’accès dans le tableau de bord IA.

Créer un PV et un PVC

  1. Créez un namespace :

    kubectl create ns demo-ns
  2. Créez un fichier nommé fashion-mnist.yaml :

    Espace réservé Description Exemple
    fashion-mnist Nom du bucket OSS my-dataset-bucket
    oss-cn-beijing.aliyuncs.com Endpoint OSS pour la région du bucket oss-cn-hangzhou.aliyuncs.com
    AKID AccessKey ID LTAI5tXxx
    AKSECRET Secret AccessKey xXxXxXx
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: fashion-demo-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Gi
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeAttributes:
          bucket: fashion-mnist
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          url: oss-cn-beijing.aliyuncs.com
          akId: "AKID"
          akSecret: "AKSECRET"
        volumeHandle: fashion-demo-pv
      persistentVolumeReclaimPolicy: Retain
      storageClassName: oss
      volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fashion-demo-pvc
      namespace: demo-ns
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      selector:
        matchLabels:
          alicloud-pvname: fashion-demo-pv
      storageClassName: oss
      volumeMode: Filesystem
      volumeName: fashion-demo-pv

    Remplacez ces espaces réservés :

  3. Appliquez le manifeste :

    kubectl create -f fashion-mnist.yaml
  4. Vérifiez que le PV et le PVC sont liés :

    kubectl get pv fashion-demo-pv
    kubectl get pvc fashion-demo-pvc -n demo-ns

    Sortie attendue pour le PV :

    NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   AGE
    fashion-demo-pv   10Gi       RWX            Retain           Bound    demo-ns/fashion-demo-pvc     oss            8h

    Sortie attendue pour le PVC :

    NAME               STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    fashion-demo-pvc   Bound    fashion-demo-pv   10Gi       RWX            oss            8h

Accelerate the dataset

  1. Connectez-vous au tableau de bord IA en tant qu’administrateur.

  2. Choisissez Dataset > Dataset List dans le volet de navigation de gauche.

  3. Recherchez le jeu de données (fashion-demo-pvc) et cliquez sur Accelerate dans la colonne Actions.

    image

Étape 2 : Consulter les tableaux de bord des ressources

Le tableau de bord IA propose quatre vues, chacune couvrant un aspect différent de l’état des ressources GPU.

Important

La restriction d’accès via liste d’autorisation de la console IA s’applique ici. Les utilisateurs non inclus dans la liste d’autorisation peuvent accéder aux tableaux de bord via la console IA open source.

Tableau de bord du cluster

Le tableau de bord IA ouvre par défaut le tableau de bord du cluster, affichant l’état global des GPU et leur allocation dans le cluster.

Métrique Ce qu’elle indique
GPU Summary Of Cluster Total des nœuds GPU, nœuds GPU alloués, nœuds GPU défectueux
Total GPU Nodes Nombre total de nœuds accélérés par GPU
Unhealthy GPU Nodes Nœuds GPU présentant des problèmes détectés
GPU Memory (Used/Total) Mémoire GPU utilisée / mémoire GPU totale
GPU Memory (Allocated/Total) Mémoire GPU allouée / mémoire GPU totale
GPU Utilization Utilisation moyenne des GPU à l’échelle du cluster
GPUs (Allocated/Total) GPU alloués / GPU totaux
Training Job Summary Of Cluster Jobs d’entraînement par statut : Running, Pending, Succeeded, Failed
GPU Utilization indique si le GPU a exécuté une charge de travail pendant la fenêtre d’échantillonnage, et non son efficacité. Un nœud à 100 % peut exécuter des noyaux légers plutôt que des charges de travail parallèles intensives. Combinez cette métrique avec GPU Memory (Used/Total) pour obtenir une image plus complète.

Tableau de bord des nœuds

Cliquez sur Nodes dans le coin supérieur droit de la page Cluster pour afficher les métriques GPU par nœud et par dispositif GPU.

Métrique Ce qu’elle indique
GPU Node Details Tableau par nœud : nom, IP, rôle, mode GPU (exclusif ou partagé), nombre de GPU, mémoire GPU totale, GPU alloués, mémoire GPU allouée, mémoire GPU utilisée, utilisation moyenne des GPU
GPU Duty Cycle Utilisation par dispositif GPU et par nœud
GPU Memory Usage Mémoire utilisée par dispositif GPU et par nœud
GPU Memory Usage Percentage Pourcentage d’utilisation de la mémoire par GPU et par nœud
Allocated GPUs Per Node GPU alloués par nœud
GPU Number Per Node Nombre total de GPU par nœud
Total GPU Memory Per Node Mémoire GPU totale par nœud

Tableau de bord des jobs d’entraînement

Cliquez sur TrainingJobs dans le coin supérieur droit de la page Nodes pour afficher la consommation de ressources et l’efficacité des GPU par job.

Métrique Ce qu’elle indique
Training Jobs Tableau par job : namespace, nom, type, statut, durée, GPU demandés, mémoire GPU demandée, mémoire GPU utilisée, utilisation moyenne des GPU
Job Instance Used GPU Memory Mémoire GPU utilisée par instance de job
Job Instance Used GPU Memory Percentage Pourcentage de mémoire GPU utilisée par instance de job
Job Instance GPU Duty Cycle Utilisation des GPU par instance de job

Tableau de bord des quotas de ressources

Cliquez sur Quota dans le coin supérieur droit de la page Training Jobs pour afficher la consommation de quotas par type de ressource (CPU, mémoire, nvidia.com/gpu, aliyun.com/gpu-mem, aliyun.com/gpu).

Colonne Ce qu’elle indique
Elastic Quota Name Nom du groupe de quotas
Namespace Namespace auquel le quota s’applique
Resource Name Type de ressource
Max Quota Ressources maximales disponibles
Min Quota Minimum garanti, honoré sous pression du cluster
Used Quota Ressources actuellement utilisées

Étape 3 : Gérer les utilisateurs et les quotas

La suite cloud-native pour l’IA utilise une arborescence de quotas pour appliquer des limites hiérarchiques de ressources et partager les ressources entre les équipes.

Concept relationships

La structure organisationnelle correspond à l’arborescence de quotas :

orgchart

Chaque département ou équipe correspond à une branche de l’arborescence de quotas ; les nœuds feuilles sont liés aux namespaces. Définir Min et Max à chaque niveau permet aux équipes de partager les ressources inutilisées tout en garantissant des allocations minimales.

Les arborescences de quotas et les contrôles au niveau des namespaces offrent des garde-fous organisationnels, et non des frontières de sécurité strictes. Pour une isolation forte des locataires, utilisez des clusters distincts. Consultez la note sur le périmètre de sécurité dans Concepts clés .

Configurer une arborescence de quotas

  1. Créez des namespaces pour chaque équipe. Les namespaces existants ne doivent contenir aucun pod en cours d’exécution avant d’être associés à un nœud de quota.

    kubectl create ns namespace1
    kubectl create ns namespace2
    kubectl create ns namespace3
    kubectl create ns namespace4
  2. Dans le tableau de bord IA, créez des nœuds de quota et associez chaque nœud feuille à un namespace. Définissez Min et Max pour chaque nœud.

Créer des utilisateurs et des groupes d’utilisateurs

Un utilisateur peut appartenir à plusieurs groupes, et un groupe peut contenir plusieurs utilisateurs. Associez les utilisateurs aux groupes pour leur accorder l’accès aux ressources allouées.

  1. Créez un utilisateur. Consultez la section Générer le fichier kubeconfig et le jeton de connexion pour un nouvel utilisateur.

  2. Créez un groupe d’utilisateurs. Consultez la section Ajouter un groupe d’utilisateurs.

Exemple de planification de capacité

Cet exemple montre comment le planificateur partage et reprend les ressources CPU entre quatre namespaces. L’arborescence de quotas présente la structure suivante :

orgchart2

Configuration des quotas :

Nœud de quota Min (cœurs CPU) Max (cœurs CPU)
root 40 40
root.a 20 40
root.b 20 40
root.a.1 10 20
root.a.2 10 20
root.b.1 10 20
root.b.2 10 20

Parcours :

Sans quotas élastiques, chaque namespace feuille utilise uniquement son Min (10 cœurs = 2 pods à 5 cœurs/pod). Avec des quotas élastiques et 40 cœurs de cluster disponibles, les namespaces empruntent la capacité inutilisée jusqu’à leur Max.

Étape 1 : Déployez cinq pods dans namespace1, chacun demandant 5 cœurs CPU (25 cœurs au total).

Avec root.a.1 Max défini sur 20 cœurs, 4 pods s’exécutent (20 cœurs). Le cinquième pod reste en état Pending.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  namespace: namespace1
  labels:
    app: nginx1
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      name: nginx1
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Étape 2 : Déployez cinq pods dans namespace2, chacun demandant 5 cœurs CPU.

Avec 20 cœurs restants (40 - 20 de namespace1), 4 pods s’exécutent. Le cinquième reste en état Pending. namespace1 et namespace2 consomment désormais tous les 40 cœurs racine.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2
  namespace: namespace2
  labels:
    app: nginx2
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx2
  template:
    metadata:
      name: nginx2
      labels:
        app: nginx2
    spec:
      containers:
      - name: nginx2
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Étape 3 : Déployez cinq pods dans namespace3, chacun demandant 5 cœurs CPU.

Aucune capacité inutilisée ne reste. Le planificateur reprend 10 cœurs de root.a pour garantir le minimum de root.b.1. Il reprend 5 cœurs de root.a.1 (réduisant namespace1 de 4 pods en cours d’exécution à 3) et 5 cœurs de root.a.2 (réduisant namespace2 de 4 pods en cours d’exécution à 3). Avec 10 cœurs récupérés, 2 pods s’exécutent dans namespace3.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx3
  namespace: namespace3
  labels:
    app: nginx3
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx3
  template:
    metadata:
      name: nginx3
      labels:
        app: nginx3
    spec:
      containers:
      - name: nginx3
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Étape 4 : Déployez cinq pods dans namespace4, chacun demandant 5 cœurs CPU.

Le planificateur reprend 10 autres cœurs de root.a pour garantir le minimum de root.b.2 : 5 cœurs de root.a.1 et 5 de root.a.2. Après la reprise, namespace1 et namespace2 disposent chacun de 2 pods en cours d’exécution (10 cœurs), et namespace4 obtient 2 pods en cours d’exécution.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx4
  namespace: namespace4
  labels:
    app: nginx4
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx4
  template:
    metadata:
      name: nginx4
      labels:
        app: nginx4
    spec:
      containers:
      - name: nginx4
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Résultat :

Namespace Nœud de quota Pods en cours d’exécution Cœurs CPU utilisés
namespace1 root.a.1 2 10
namespace2 root.a.2 2 10
namespace3 root.b.1 2 10
namespace4 root.b.2 2 10

La garantie minimale de chaque équipe a été honorée. La capacité empruntée a été reprise lorsque les autres équipes ont eu besoin de récupérer leurs minimums.

Étapes suivantes