Utilisation de volumes de stockage en bloc avec des services

Snowflake prend en charge ces types de volumes de stockage pour vos applications conteneurisées : zone de préparation interne Snowflake, stockage local, volumes de stockage en mémoire et volumes de stockage en bloc.

Spécification du stockage en bloc dans la spécification du service

Pour créer un service (y compris un service de tâche) qui utilise le stockage en bloc, vous fournissez la configuration nécessaire dans la spécification du service comme suit :

  1. Spécifiez le champ spec.volumes pour définir les volumes de stockage en bloc à créer.

    volumes:
      - name: <name>
        source: block
        size: <size-in-Gi>
        blockConfig:                             # optional
          initialContents:
            fromSnapshot: <snapshot-name>
          iops: <number-of-operations>
          throughput: <MiB-per-second>
          encryption: SNOWFLAKE_SSE | SNOWFLAKE_FULL
    
    Copy

    Les champs suivants sont obligatoires :

    • name : nom du volume.

    • source : type du volume. Pour le volume de stockage en bloc, la valeur est block.

    • size : capacité de stockage du volume de stockage en bloc mesurée en octets. La valeur doit toujours être un nombre entier, spécifié à l’aide du suffixe de l’unité Gi. Par exemple, 5Gi signifie 5*1024*1024*1024 octets. Plages de valeurs de la taille pour les fournisseurs de Cloud :

      • 1Gi à 16384Gi pour AWS et Azure.

      • 4Gi à 16384Gi pour Google Cloud.

    Les champs suivants sont facultatifs :

    • blockConfig.initialContents.fromSnapshot : Spécifie un instantané précédemment pris d’un autre volume pour initialiser le volume de blocs. Le nom de l’instantané peut être un identificateur d’objet entièrement qualifié, tel que TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT. De plus, le nom de l’instantané est résolu par rapport à la base de données et au schéma du service. En d’autres termes, si vous avez créé votre service dans TUTORIAL_DB.DATA_SCHEMA, fromSnapshot: MY_SNAPSHOT est alors équivalent à fromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT.

      Remarques :

      • L’instantané doit être dans l’état CREATED avant de pouvoir être utilisé pour créer un volume, sinon la création du service échouera.

      • Le type de chiffrement de l’instantané doit correspondre à celui du volume en cours de création.

      Utilisez la commande DESCRIBE SNAPSHOT pour obtenir le statut et le type de chiffrement de l’instantané.

    • blockConfig.iops : spécifie le nombre maximal d’opérations d’entrée/sortie prises en charge par seconde. Notez que la taille des données par opération est limitée à 256 KiB.

      • Pour AWS : La plage prise en charge est de 3 000 à 16 000, avec une valeur par défaut de 3 000.

      • Pour Azure : La plage prise en charge est de 3 000 à 80 000, avec une valeur par défaut de 3 000.

      • Pour Google Cloud :

        • Instances CPU Google Cloud : La plage prise en charge est de 2 000 à 16 0000 avec les valeurs par défaut suivantes :

          • 2 000 IOPS pour un disque de 4 Gi

          • 2 500 IOPS pour un disque de 5 Gi

          • 3 000 IOPS pour toutes les autres tailles de disque

        • Instances GPU Google Cloud : Snowflake recommande de ne spécifier que le débit. blockConfig.iops doit être 16 * blockConfig.throughput pour les instances GPU dans Google Cloud.

    • blockConfig.throughput : spécifie le débit maximal, en MiB/seconde, pour provisionner le volume.

      • Pour AWS : La plage prise en charge est comprise entre 125 et 1 000, avec une valeur par défaut de 125.

      • Pour Azure : La plage prise en charge est comprise entre 125 et 1 200, avec une valeur par défaut de 125.

      • Pour Google Cloud :

        • Instances CPU Google Cloud : La plage prise en charge est comprise entre 140 et 2 400, la valeur par défaut étant 140.

        • Instances GPU Google Cloud : La plage prise en charge est comprise entre 400 et 1 200 000, la valeur par défaut étant de 400, mais pas moins de 0,12 par GB de la taille du volume.

    • blockConfig.encryption : Spécifiez le type de chiffrement du volume : SNOWFLAKE_SSE ou SNOWFLAKE_FULL. Pour plus d’informations, voir Prise en charge du chiffrement.

    Par exemple :

    volumes:
      - name: vol-1
        source: block
        size: 200Gi
        blockConfig:
          initialContents:
            fromSnapshot: snapshot1
          iops: 3000
          throughput: 125
    
    Copy
  2. Spécifiez le champ spec.containers.volumeMount pour décrire l’endroit de vos conteneurs d’application où monter les volumes de stockage en bloc. Les informations que vous fournissez dans ce champ sont les mêmes pour tous les volumes de stockage pris en charge.

À propos de IOPS et du débit

Si les performances en IO de votre service ne répondent pas à vos attentes et si le service est impacté par les IO ou le débit du volume de blocs, vous pourriez envisager d’augmenter les IOPS ou le débit. Dans l’implémentation actuelle, de telles modifications nécessitent de recréer le service.

Vous pouvez consulter ces métriques de plateforme disponibles pour identifier si votre service est limité en termes de stockage en bloc :

  • container.cpu.usage

  • volume.read.iops

  • volume.write.iops

  • volume.read.throughput

  • volume.write.throughput

En fonction du fournisseur Cloud, les considérations suivantes s’appliquent :

  • Configuration des IOPS et du débit pour AWS :

    • L’IOPS maximum qui peut être configuré est de 500 IOPS par GiB de la taille du volume, jusqu’à un maximum de 16 000 IOPS. Par exemple, le maximum d’IOPS d’un volume de 10 GiB peut être 500 * 10 = 5 000. En conséquence, notez que le nombre maximum d’IOPS de 16 000 ne peut être configuré que si votre volume est de 32 GiB ou supérieur.

    • Le débit maximal pouvant être configuré est de 1 MiB/seconde pour chaque 4 IOPS, jusqu’à un maximum de 1 000 MiBs/seconde. Par exemple, avec un nombre par défaut de 3 000 IOPS, vous pouvez configurer un débit atteignant jusqu’à 750 MiB/seconde (3 000/4=750).

  • Configuration des IOPS et du débit pour Azure :

    • Après une taille de volume de 6 GB, le nombre d’IOPS pris en charge augmente de 500 pour chaque GB au-delà de 6 GB (types de disques). Le nombre maximale d’IOPS d’un volume de 10GB peut être 500 * 4 + 3 000 = 5 000. En conséquence, notez que le nombre maximum d’IOPS de 80 000 ne peut être configuré que si votre volume est de 160 GiB ou supérieur.

    • Après 6 GB, le débit maximal pouvant être configuré est de 0,25 MiB/seconde pour chaque IOPS, jusqu’à un maximum de 1 200 MiBs/seconde. Par exemple, avec la valeur par défaut de 3 000 IOPS, vous pouvez configurer un débit pouvant atteindre jusqu’à 750 MiB/seconde (3 000*0,25=750).

  • Configuration des IOPS et du débit pour Google Cloud :

    • Pour les instances CPU :

      • Les IOPS sont configurables jusqu’à 500 IOPS par Gi de taille de volume, avec un maximum de 160 000 IOPS. Par exemple, un volume de 10 Gi peut atteindre un maximum de 5 000 IOPS (500 IOPS * 10 Gi). Pour atteindre le maximum de 160 000 IOPS, un volume de 320 Gi ou plus est exigé.

      • Un débit maximal de 2 400 MiB/seconde peut être configuré, avec un taux de 1 MiB/seconde pour toutes les 4 IOPS. Par exemple, 3 000 IOPS permet d’atteindre un débit de 750 MiB/seconde (3 000 / 4 = 750).

    • Pour les instances GPU :

      • Les IOPS ne peuvent pas être définis indépendamment du débit ; Les IOPS sont calculés comme suit : 16 multiplié par la valeur du débit. Par conséquent, le fait de spécifier le débit détermine automatiquement l’IOPS. La configuration de l’IOPS n’est pas conseillée pour les disques utilisés avec des instances GPU.

      • Vous devez configurer un débit minimum. Il doit être d’au moins 400 MiB/s ou de 0,12 MiB/s pour chaque GiB de volume, la valeur la plus élevée étant retenue.

      • Le débit configurable est de 1 600 MiB/s par GiB de taille de volume, avec un maximum de 1 200 000 MiB/s. Par exemple, un volume de 10 GiB peut atteindre un débit maximal de 16 000 MiB/s (1600 * 10). Notez que la limite supérieure de 1 200 000 MiB/s n’est atteignable qu’avec des volumes de 750 GiB ou plus.

Exigences en matière de contrôle d’accès

Si vous souhaitez utiliser un instantané existant (fromSnapshot est dans la spécification) pour initialiser le volume, le rôle de propriétaire du service doit avoir le privilège USAGE sur l’instantané.

Le rôle de propriétaire du service doit avoir le privilège USAGE sur la base de données et le schéma qui contiennent l’instantané.

Gestion des instantanés

Vous pouvez prendre des instantanés de votre volume de stockage par blocs et utiliser ultérieurement la sauvegarde comme suit :

  • Utilisez la sauvegarde de l’instantané pour restaurer un volume de stockage en bloc existant.

  • Utilisez la sauvegarde de l’instantané comme données seed pour initialiser un nouveau volume de stockage par blocs lors de la création d’un nouveau service.

Vous devez vous assurer que toutes vos mises à jour ont été transférées sur le disque avant de prendre l’instantané.

Snowflake fournit les commandes suivantes pour créer et gérer les instantanés :

En outre, pour restaurer un instantané sur un volume de stockage par blocs existant, vous pouvez exécuter la commande ALTER SERVICE … RESTORE VOLUME. Notez que vous devez suspendre le service avant de pouvoir restaurer un instantané. Après la restauration d’un volume, le service est automatiquement repris.

Coûts de stockage par bloc

Pour plus d’informations, consultez le tableau de consommation des services de Snowflake.

Lorsqu’un volume de stockage par bloc est utilisé avec un service de tâche, Snowflake arrête de facturer les coûts de stockage par bloc une fois que le service de tâche est soit abandonné par l’utilisateur, soit nettoyé par Snowflake une fois terminé.

Prise en charge du chiffrement

Les volumes de stockage par bloc et les instantanés prennent en charge les deux mêmes modes de chiffrement que ceux utilisés pour les autres types de stockage gérés par Snowflake :

  • SNOWFLAKE_SSE : chiffrement côté serveur uniquement. Il s’agit de la configuration par défaut pour les clients qui n’ont pas activé la fonction Tri-Secret Secure sur leur compte Snowflake.

    Snowflake utilise le chiffrement du fournisseur de services Cloud (CSP) pour les volumes de stockage par bloc et les instantanés.

  • SNOWFLAKE_FULL : chiffrement côté client et côté serveur. Il s’agit de la configuration par défaut pour les clients qui ont activé la fonction Tri-Secret Secure sur leur compte Snowflake.

    Les données sont d’abord chiffrées au niveau du client (hôte Snowpark Container Services) avant d’être envoyées à CSP pour y être stockées. Chaque volume est chiffré avec une clé de volume unique. La même clé est utilisée pour chiffrer les instantanés que vous créez à partir de ce volume.

    Étant donné que Snowflake effectue un chiffrement supplémentaire des données, l’utilisation des volumes SNOWFLAKE_FULL a un impact sur les performances et l’utilisation des ressources. Snowflake utilise les mécanismes de chiffrement fournis par le noyau Linux, l’effet ne devrait donc pas être significatif. L’impact sur les performances est probablement lié à la charge de travail. Nous vous recommandons donc d’identifier les goulots d’étranglement au niveau des services ou des tâches, d’augmenter le débit des volumes ou de fournir un serveur plus puissant.

    Actuellement, la rotation des clés ou la re-saisie n’est pas prise en charge pour les volumes de stockage par bloc et les instantanés dans Snowflake. Pour modifier la clé de chiffrement d’un volume, créez un nouveau volume et copiez les données du volume d’origine.

    Pour les clients qui ont activé la fonction Tri-Secret Secure sur leur compte, notez que lorsque l’accès à une clé gérée par le client est révoqué, les données du volume restent disponibles pour les services en cours d’exécution qui utilisent le volume. Nous vous recommandons de fermer ces services lorsque vous révoquez l’accès à la clé gérée par le client afin que les données ne soient pas disponibles. De plus, après avoir révoqué la clé, les services dont les volumes sont chiffrés ne peuvent pas démarrer.

Les instantanés de volume conservent le type de chiffrement de leur volume source. Par exemple, un instantané d’un volume SNOWFLAKE_SSE utilise également le chiffrement SNOWFLAKE_SSE. Lorsqu’un instantané est utilisé comme contenu initial d’un volume ou avec la commande ALTER SERVICE … RESTORE VOLUME, son type de chiffrement doit correspondre à celui du volume. Dans le cas contraire, la commande échoue.

Exemple

Pour un exemple, voir le tutoriel. Le tutoriel fournit des instructions étape par étape pour créer un service avec un volume de stockage en bloc monté.

Lignes directrices et limitations

Les restrictions suivantes s’appliquent aux services qui utilisent des volumes de stockage en bloc :

  • Limitations générales. Si vous rencontrez des problèmes avec ces limitations, contactez votre représentant de compte.

    • Le nombre maximum de volumes de stockage en bloc par service est de 3.

    • Le nombre maximum de volumes de stockage en bloc par compte Snowflake est de 100.

    • Le tableau suivant dresse la liste du nombre maximal de volumes de stockage en bloc pouvant être installés par nœud de pool de calcul en fonction du type d’instance du nœud. Snowflake veille à ce que les instances de service utilisant des volumes de stockage en bloc soient placées conformément à ces limites. Cela peut avoir pour conséquence que des services à l’état PENDING attendent des ressources supplémentaires.

      Famille d’instances

      Limitation AWS

      Limitation Azure

      CPU_X64_XS

      22

      3

      CPU_X64_S

      22

      8

      CPU_X64_M

      22

      16

      CPU_X64_L

      22

      32

      HIGHMEM_X64_S

      22

      16

      HIGHMEM_X64_M

      22

      32

      HIGHMEM_X64_L

      22

      32

      GPU_NV_XS (Azure uniquement)

      s/o

      8

      GPU_NV_S (AWS uniquement)

      22

      s/o

      GPU_NV_SM (Azure uniquement)

      s/o

      32

      GPU_NV_M (AWS uniquement)

      21

      s/o

      GPU_NV_2M (Azure uniquement)

      s/o

      32

      GPU_NV_3M (Azure uniquement)

      s/o

      16

      GPU_NV_SL (Azure uniquement)

      s/o

      32

      GPU_NV_L (AWS uniquement)

      14

      s/o

    • Le nombre maximum d’instantanés autorisé par compte Snowflake est de 100.

  • Le service qui utilise des volumes de stockage en blocs doit avoir le même nombre minimum et maximum d’instances.

  • Après la création du service, ceci s’applique :

    • Vous ne pouvez pas modifier le nombre d’instances de service à l’aide de la commande ALTER SERVICE … SET … lorsqu’un service utilise les volumes de stockage en blocs.

    • Vous ne pouvez pas changer les champs size, iops, throughput ou encryption de volumes de stockage en blocs.

    • Aucun nouveau volume de stockage en bloc ne peut être ajouté et aucun volume de stockage en bloc existant ne peut être supprimé.

    • Les volumes de stockage en bloc sont préservés si un service est mis à niveau, ou suspendu et repris. Lorsqu’un service est suspendu, vous continuez à payer pour le volume car il est préservé. Après avoir mis à niveau ou repris un service, Snowflake attache chaque volume de stockage par blocs au même ID d’instance de service qu’auparavant.

    • Les volumes de stockage en bloc sont supprimés si le service est détruit. Pour préserver les données contenues dans les volumes, prenez des instantanés des volumes. Vous pouvez utiliser les instantanés ultérieurement pour initialiser de nouveaux volumes.

    • Les volumes de stockage en bloc ne prennent pas en charge Tri-Secret Secure ni Periodic Rekeying. Cela signifie que si votre compte a activé Tri-Secret Secure ou Periodic Rekeying, alors que toutes les autres données Snowflake continueront à bénéficier d’une sécurité accrue, toutes les images stockées dans vos volumes de stockage en bloc Snowpark Container Services ne bénéficieront pas de cette sécurité accrue.

      Pour créer un volume de stockage en bloc dans un compte avec Tri-Secret Secure ou Periodic Rekeying, vous devez d’abord confirmer que vous comprenez et acceptez de continuer à ne pas bénéficier de cette sécurité supplémentaire pour vos volumes de stockage en bloc. Pour confirmer l’accord, un administrateur de compte (utilisateur ayant le rôle ACCOUNTADMIN) devra définir le paramètre de niveau de compte ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGE sur TRUE.