Utilisation des volumes de zones de préparation Snowflake avec des services

Snowflake prend en charge les différents types de volumes de stockage pour vos conteneurs d’application, y compris les volumes de zone de préparation interne, de stockage interne, de stockage local, de stockage en mémoire et de stockage en blocs. Cette section explique comment configurer les volumes et les montages de volumes pour les zones de préparation internes.

Spécification de la zone de préparation Snowflake dans la spécification du service

Pour créer un service dans lequel les conteneurs de services utilisent un montage de zone de préparation Snowflake, vous fournissez la configuration nécessaire dans la spécification de service comme suit :

  1. Précisez le champ spec.volumes permettant de définir le volume de la zone de préparation à utiliser.

    volumes:
    - name: <name>
      source: <stage name>
    
    Copy

    Les champs suivants sont obligatoires :

    • name : nom du volume.

    • source : la zone de préparation interne de Snowflake à monter, par exemple @my_stage, @my_stage/folder. Des guillemets doubles doivent entourer cette valeur.

  2. Précisez le champ spec.containers.volumeMounts pour décrire où monter un volume dans vos conteneurs d’application. Les informations que vous fournissez dans ce champ sont les mêmes pour tous les volumes de stockage pris en charge. Par exemple,

    volumeMounts:
    - name: <name>
      mountPath: <absolute-directory-path>
    
    Copy

Dans l’exemple de spécification suivant, le conteneur app monte la zone de préparation interne @model_stage :

spec:
  containers:
  - name: app
    image: <image1-name>
    volumeMounts:
    - name: models
      mountPath: /opt/models
  volumes:
  - name: models
    source: "@model_stage"
Copy

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

Le rôle de propriétaire du service est le rôle utilisé pour créer le service. C’est également le rôle que les services utilisent lors de leur interaction avec Snowflake. Le rôle de propriétaire détermine les permissions accordées aux conteneurs d’applications pour accéder à une zone de préparation montée. Le rôle de propriétaire doit avoir le privilège READ sur la zone de préparation.

Si le rôle de service n’a pas le privilège WRITE sur une zone de préparation, le montage de cette zone de préparation sera en lecture seule. En d’autres termes, les conteneurs ne peuvent lire que les fichiers de la zone de préparation. Le rôle de propriétaire nécessite le privilège WRITE sur une zone de préparation pour que le montage de la zone de préparation prenne en charge à la fois la lecture et l’écriture.

Lignes directrices et limitations

Les directives et limitations suivantes s’appliquent lorsque les conteneurs d’application utilisent des montages de zones de préparation :

Limitations

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

    • Chaque service peut prendre en charge jusqu’à cinq volumes de zone de préparation par service. Ceci fait référence au champ spec.volumes dans la spécification de service.

    • Seuls huit montages de zones de préparation par nœud sont pris en charge. Snowflake gère la limite de montage de zone de préparation par nœud de la même manière qu’il gère la mémoire, le CPU, et la GPU. Le lancement d’une nouvelle instance de service peut amener Snowflake à lancer de nouveaux nœuds lorsqu’aucun nœud existant n’a la capacité de prendre en charge les montages de zone de préparation demandés.

  • Vous ne pouvez monter qu’une zone de préparation ou un sous-répertoire dans une zone de préparation. Par exemple, @my_stage, @my_stage/folder. Vous ne pouvez pas monter un seul fichier dans une zone de préparation, par exemple, @my_stage/folder/file.

  • Les zones de préparation externes ne sont pas prises en charge. Seules les zones de préparation internes Snowflake avec un chiffrement SSE (voir Paramètres de zones de préparation internes) sont prises en charge. Utilisez CREATE STAGE pour créer une telle zone de préparation : CREATE STAGE my_stage ENCRYPTION = (type = 'SNOWFLAKE_SSE');.

  • Les écritures simultanées sur le même fichier à partir de plusieurs montages de zones de préparation (même volume de zone de préparation monté sur différents conteneurs) ne sont pas prises en charge.

  • Les montages de zones de préparation ne sont pas des systèmes de fichiers entièrement compatibles avec POSIX. Par exemple :

    • Les renommages de fichiers et de répertoires ne sont pas atomiques.

    • Les liens physiques ne sont pas pris en charge.

  • La notification d’inode du sous-système du noyau Linux (inotify) qui surveille les modifications apportées aux systèmes de fichiers ne fonctionne pas sur les montages en zones de préparation.

Lignes directrices

  • Le montage de zone de préparation est optimisé pour les lectures et écritures séquentielles.

  • Évitez d’écrire simultanément dans plusieurs fichiers au sein d’un montage de zone de préparation.

  • Les opérations d’E/S de montage de zone de préparation peuvent avoir des latences plus élevées que les opérations d’E/S sur le système de fichiers du conteneur et les volumes de stockage en blocs. Vous devez toujours vérifier le code de statut des opérations d’E/S pour vous assurer qu’elles ont réussi.

  • Pour maintenir les performances, évitez de créer ou de modifier des fichiers de plus de 25 GB.

  • Les montages de zone de préparation téléchargent les mises à jour de fichiers de manière asynchrone. Les modifications apportées aux fichiers sur un montage de zone de préparation ne sont garanties d’être conservées dans la zone de préparation qu’une fois le descripteur de fichier fermé ou vidé avec succès. Il peut y avoir un certain délai avant que les modifications apportées aux fichiers sur un montage de zone de préparation deviennent visibles pour les autres conteneurs et Snowflake.

  • Chaque répertoire d’une zone de préparation montée doit contenir moins de 100 000 fichiers. Attendez que la latence readdir augmente avec le nombre de fichiers dans le répertoire.

  • Le montage de zone de préparation n’est pas un système de fichiers réseau. N’utilisez pas de montages de zone de préparation pour la coordination multi-clients.

  • N’ouvrez pas plusieurs handles du même fichier simultanément. Utilisez les descripteurs de fichiers ouverts pour les opérations de lecture ou d’écriture, mais pas un mélange des deux. Pour lire un fichier après y avoir écrit, fermez le fichier, puis rouvrez-le avant de le lire.