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 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>
    
    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. La valeur de la taille peut être comprise entre 1Gi et 16384Gi.

    Les champs suivants sont facultatifs :

    • blockConfig.initialContents.fromSnapshot : spécifie le nom d’un instantané (expliqué dans les sections suivantes) tiré d’un autre volume. L’instantané est utilisé pour initialiser le volume du bloc.

      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.

    • 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.

      • La plage prise en charge pour AWS est comprise entre 3 000 et 16 000, avec une valeur par défaut de 3 000.

      • La plage prise en charge pour Azure est comprise entre 3 000 et 80 000, avec une valeur par défaut de 3 000.

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

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

      • La plage prise en charge pour Azure est de 125 à 1 200, avec une valeur par défaut de 125.

    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.

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.

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.

    • La valeur de la taille du volume de stockage en bloc peut varier entre 1 Gi et 16 384 Gi.

    • Chaque service peut prendre en charge jusqu’à trois volumes de blocs. Ceci fait référence à spec.volumes dans la spécification de service.

    • Le nombre total de volumes de stockage de blocs par compte Snowflake est limité à 10.

    • Le nombre d’instantanés autorisés 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 ou throughput 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.

  • Directives relatives aux IOPS et au 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

    • 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).

    • Pour Azure :

      • Après un volume de 6GB, le nombre pris en charge d’IOPS augmente de 500 pour chaque GB au-delà de 6GB (types de disques). Le maximum d’IOPS d’un volume de 10GB peut être de 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).