Verwenden von Blockspeicher-Volumes mit Diensten¶
Snowflake unterstützt die folgenden Speicher-Volume-Typen für Ihre containerisierten Anwendungen: interner Snowflake-Stagingbereich, lokaler Speicher, Arbeitsspeicher-Volumes und Blockspeicher-Volumes.
Angeben von Blockspeicher in Dienstspezifikation¶
Um einen Dienst (einschließlich Jobdienst) zu erstellen, der Blockspeicher verwendet, stellen Sie die erforderliche Konfiguration in der Dienstspezifikation wie folgt bereit:
Geben Sie das Feld
spec.volumes
an, um die zu erstellenden Blockspeicher-Volumes zu definieren.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
Die folgenden Felder sind erforderlich:
name
: Eindeutiger Name des Volumes.source
: Typ des Volumens. Bei Blockspeicher-Volumes ist der Wertblock
.size
: Speicherkapazität des Blockspeicher-Volumes, gemessen in Bytes. Der Wert muss immer eine Ganzzahl (Integer) sein, die mit dem Suffix „Gi“ für die Einheit angegeben wird. Beispiel:5Gi
bedeutet5*1024*1024*1024
Bytes. Die Größenwerte für Cloud-Anbieter:1Gi
bis16384Gi
für AWS und Azure.4Gi
bis16384Gi
für Google Cloud.
Die folgenden Felder sind optional:
blockConfig.initialContents.fromSnapshot
: Gibt einen zuvor erstellten Snapshot eines anderen Volumes an, um das Blockspeicher-Volume zu initialisieren. Der Snapshot-Name kann ein vollständig qualifizierter Bezeichner sein, wie z.B.TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT
. Außerdem wird der Snapshot-Name relativ zur Datenbank und dem Schema des Dienstes aufgelöst. Wenn Sie Ihren Dienst zum Beispiel inTUTORIAL_DB.DATA_SCHEMA
erstellt haben, dann entsprichtfromSnapshot: MY_SNAPSHOT
fromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT
.Beachten Sie Folgendes:
Der Snapshot muss sich im Status CREATED befinden, bevor er zur Erstellung eines Volumes verwendet werden kann, da sonst die Erstellung des Dienstes fehlschlägt.
Der Verschlüsselungstyp des Snapshots muss mit dem des zu erstellenden Volumes übereinstimmen.
Verwenden Sie den Befehl DESCRIBE SNAPSHOT, um den Status und den Verschlüsselungstyp des Snapshots abzurufen.
blockConfig.iops
: Gibt die unterstützte Höchstzahl von Operationen für die Eingabe/Ausgabe pro Sekunde an. Beachten Sie, dass die Datengröße pro Operation auf 256 KiB begrenzt ist.Für AWS: Der unterstützte Bereich ist 3000–16000, mit einer Voreinstellung von 3000.
Für Azure: Der unterstützte Bereich ist 3000–80000, mit einer Voreinstellung von 3000.
Für Google Cloud:
Google Cloud CPU-Instanzen: Der unterstützte Bereich ist 2000–160000 mit den folgenden Standardwerten:
2000 IOPS für eine 4-Gi-Laufwerksgröße
2500 IOPS für eine 5-Gi-Laufwerksgröße
3000 IOPS für alle anderen Laufwerksgrößen
Google Cloud GPU-Instanzen: Snowflake empfiehlt, nur den Durchsatz anzugeben.
blockConfig.iops
muss 16 *blockConfig.throughput
für GPU-Instanzen in Google Cloud sein.
blockConfig.throughput
: Gibt den Spitzendurchsatz in MiB/Sekunde an, der für das Volume bereitgestellt werden soll.Für AWS: Der unterstützte Bereich ist 125–1000, mit einer Voreinstellung von 125.
Für Azure: Der unterstützte Bereich ist 125–1200, mit einer Voreinstellung von 125.
Für Google Cloud:
Google Cloud CPU-Instanzen: Der unterstützte Bereich liegt zwischen 140 und 2400, wobei die Voreinstellung 140 ist.
Google Cloud GPU-Instanzen: Der unterstützte Bereich liegt zwischen 400 und 1.200.000, wobei der Standardwert 400 beträgt, aber nicht weniger als 0,12 pro GB der Volume-Größe.
blockConfig.encryption
: Geben Sie den Verschlüsselungstyp des Volumes an:SNOWFLAKE_SSE
oderSNOWFLAKE_FULL
. Weitere Informationen dazu finden Sie unter Unterstützung für Verschlüsselung.
Beispiel:
volumes: - name: vol-1 source: block size: 200Gi blockConfig: initialContents: fromSnapshot: snapshot1 iops: 3000 throughput: 125
Geben Sie das Feld
spec.containers.volumeMount
an, um zu beschreiben, wo in Ihren Anwendungscontainern die Blockspeicher-Volumes gemountet werden sollen. Die Angaben, die Sie in diesem Feld machen, sind für alle unterstützten Speichervolumes gleich.
Über IOPS und Durchsatz¶
Wenn die Leistung Ihres DienstesIO nicht Ihren Erwartungen entspricht und der Dienst durch das Blockspeicher-Volume IO oder den Durchsatz beeinträchtigt wird, sollten Sie in Erwägung ziehen, IOPS oder den Durchsatz zu erhöhen. In der aktuellen Implementierung müssen Sie bei solchen Änderungen den Dienst neu erstellen.
Sie können diese verfügbaren Plattformmetriken überprüfen, um festzustellen, ob Ihr Dienst auf dem Blockspeicher einen Engpass hat:
container.cpu.usage
volume.read.iops
volume.write.iops
volume.read.throughput
volume.write.throughput
Je nach Cloud-Anbieter gelten die folgenden Überlegungen:
Konfigurieren von iops und Durchsatz für AWS:
Die maximale Konfiguration von IOPS beträgt 500 IOPS pro GiB Volume-Größe, bis zu einem Maximum von 16.000 IOPS. Zum Beispiel kann die maximale IOPS eines 10 GiB Volumes 500 * 10 = 5000 sein. Beachten Sie daher, dass die maximale IOPS von 16.000 nur konfiguriert werden kann, wenn Ihr Volume 32 GiB oder größer ist.
Der maximale Durchsatz, der konfiguriert werden kann, ist 1 MiB/Sekunde für jeweils 4 IOPS, bis zu einem Maximum von 1000 MiBs/Sekunde. Mit der Standardeinstellung 3000 IOPS können Sie beispielsweise einen Durchsatz von bis zu 750 MiB/Sekunde (3000/4=750) konfigurieren.
Konfigurieren von iops und Durchsatz für Azure:
Ab einer Volume-Größe von 6 GB erhöht sich die unterstützte Anzahl von IOPS um 500 für jedes GB über 6 GB (Datenträger-Typen) hinaus. Die maximale IOPS eines 10GB-Volumes kann 500 * 4 + 3000 = 5000 betragen. Beachten Sie daher, dass die maximale IOPS von 80.000 nur konfiguriert werden kann, wenn Ihr Volume 160 GiB oder größer ist.
Nach 6 GB beträgt der maximale Durchsatz, der konfiguriert werden kann, 0,25 MiB/Sekunde für jede IOPS, bis zu einem Maximum von 1200 MiBs/Sekunde. Mit der Standardeinstellung 3000 IOPS können Sie beispielsweise einen Durchsatz von bis zu 750 MiB/Sekunde (3000*0,25=750) konfigurieren.
Konfigurieren von iops und Durchsatz für Google Cloud:
Für CPU-Instanzen:
IOPS sind konfigurierbar bis zu 500 IOPS pro Gi Volumengröße, mit einem Maximum von 160.000 IOPS. Ein 10-Gi-Volume kann zum Beispiel maximal 5.000 IOPS (500 IOPS * 10 Gi) erreichen. Um das Maximum von 160.000 IOPS zu erreichen, ist eine Volumengröße von 320 Gi oder größer erforderlich.
Ein maximaler Durchsatz von 2400 MiB/Sekunde kann konfiguriert werden, mit einer Rate von 1 MiB/Sekunde für jeweils 4 IOPS. Zum Beispiel ermöglicht 3000 IOPS einen Durchsatz von bis zu 750 MiB/Sekunde (3000 / 4 = 750).
Für GPU-Instanzen:
IOPS können nicht unabhängig vom Durchsatz festgelegt werden; IOPS werden als 16 multipliziert mit dem Durchsatzwert berechnet. Daher bestimmt die Angabe des Durchsatzes automatisch die IOPS. Es wird nicht empfohlen, IOPS für Festplatten zu konfigurieren, die mit GPU-Instanzen verwendet werden.
Sie müssen einen Mindestdurchsatz konfigurieren. Er muss mindestens 400 MiB/s betragen, oder 0,12 MiB/s pro GiB Volumengröße, je nachdem, welcher Wert höher ist.
Die konfigurierbare Durchsatzrate beträgt 1600 MiB/s pro GiB der Volumengröße, mit einem Maximum von 1.200.000 MiB/s. Zum Beispiel kann ein 10 GiB Volumen einen maximalen Durchsatz von 16.000 MiB/s (1600 * 10) erreichen. Beachten Sie, dass die Obergrenze von 1.200.000 MiB/s nur mit einem Volumen von 750 GiB oder mehr erreicht werden kann.
Anforderungen an die Zugriffssteuerung¶
Wenn Sie einen vorhandenen Snapshot (fromSnapshot
ist in der Spezifikation) zur Initialisierung des Volumes verwenden möchten, muss die Eigentümerrolle des Dienstes die Berechtigung USAGE für den Snapshot haben.
Die Eigentümerrolle des Dienstes muss die Berechtigung USAGE für die Datenbank und das Schema haben, die den Snapshot enthalten.
Verwalten von Snapshots¶
Sie können Snapshots von Ihrem Blockspeicher-Volume erstellen und das Backup später wie folgt verwenden:
Verwenden Sie das Snapshot-Backup, um ein vorhandenes Blockspeicher-Volume wiederherzustellen.
Verwenden Sie die Snapshot-Sicherung als Startdaten, um ein neues Blockspeicher-Volume zu initialisieren, wenn Sie einen neuen Dienst erstellen.
Sie sollten sich vergewissern, dass alle Aktualisierungen auf der Festplatte gespeichert sind, bevor Sie den Snapshot erstellen.
Snowflake bietet die folgenden Befehle zum Erstellen und Verwalten von Snapshots:
Um einen Snapshot auf einem vorhandenen Blockspeicher-Volume wiederherzustellen, können Sie außerdem den Befehl ALTER SERVICE … RESTORE VOLUME ausführen. Beachten Sie, dass Sie den Dienst erst anhalten müssen, bevor Sie einen Snapshot wiederherstellen können. Nach Wiederherstellung eines Volumes wird der Dienst automatisch fortgesetzt.
Kosten für Blockspeicher¶
Weitere Informationen finden Sie in der Snowflake Service Consumption Table.
Wenn ein Blockspeicher-Volume mit einem Jobdienst verwendet wird, stellt Snowflake die Berechnung der Blockspeicherkosten ein, nachdem der Jobdienst entweder vom Benutzer beendet oder von Snowflake nach Abschluss bereinigt wurde.
Unterstützung für Verschlüsselung¶
Blockspeicher-Volumes und Snapshots unterstützen die gleichen beiden Verschlüsselungsmodi, die auch für andere von Snowflake verwaltete Speicher verwendet werden:
SNOWFLAKE_SSE: Nur serverseitige Verschlüsselung. Dies ist die Standardkonfiguration für Kunden, die Tri-Secret-Secure nicht auf ihren Snowflake-Konten aktiviert haben.
Snowflake verwendet die Verschlüsselung des Clouddienstanbieters (CSP) für Blockspeicher-Volumes und Snapshots.
SNOWFLAKE_FULL: Clientseitige und serverseitige Verschlüsselung. Dies ist die Standardkonfiguration für Kunden, die Tri-Secret-Secure in ihren Snowflake-Konten aktiviert haben.
Die Daten werden zunächst auf dem Client (Snowpark Container Services host) verschlüsselt, bevor sie zur Speicherung an eine CSP gesendet werden. Jedes Volume wird mit einem eindeutigen Volume-Schlüssel verschlüsselt. Derselbe Schlüssel wird für die Verschlüsselung von Snapshots verwendet, die Sie von diesem Volume erstellen.
Da Snowflake eine zusätzliche Verschlüsselung der Daten vornimmt, wirkt sich die Verwendung von
SNOWFLAKE_FULL
-Volumes auf die Leistung und Ressourcennutzung aus. Snowflake verwendet die vom Linux-Kernel bereitgestellten Verschlüsselungsmechanismen, sodass der Effekt nicht signifikant sein sollte. Jede Auswirkung auf die Leistung ist wahrscheinlich Workload-spezifisch, daher empfehlen wir Ihnen, Engpässe bei Diensten oder Aufträgen zu identifizieren, den Volumendurchsatz zu erhöhen oder einen leistungsfähigeren Server bereitzustellen.Derzeit wird die Schlüsselrotation oder Wiederverschlüsselung für Blockspeicher-Volumes und Snapshots in Snowflake nicht unterstützt. Um den Verschlüsselungsschlüssel eines Volumes zu ändern, erstellen Sie ein neues Volume und kopieren die Daten vom ursprünglichen Volume.
Für Kunden, die Tri-Secret Secure auf ihren Konten aktiviert haben, ist zu beachten, dass bei Entzug des Zugriffs auf einen vom Kunden verwalteten Schlüssel die Volume-Daten für die derzeit laufenden Dienste, die das Volume verwenden, verfügbar bleiben. Wir empfehlen Ihnen, diese Dienste abzuschalten, wenn Sie den Zugriff auf den vom Kunden verwalteten Schlüssel widerrufen, damit die Daten nicht verfügbar sind. Nachdem Sie den Schlüssel widerrufen haben, können die Dienste mit verschlüsselten Volumes nicht mehr starten.
Volume-Snapshots behalten die Verschlüsselungsart ihres Quellvolumes bei. Ein Snapshot eines SNOWFLAKE_SSE
-Volumes verwendet zum Beispiel auch SNOWFLAKE_SSE
-Verschlüsselung. Wenn ein Snapshot als anfänglicher Inhalt eines Volumes oder mit dem Befehl ALTER SERVICE … RESTORE VOLUME verwendet wird, muss sein Verschlüsselungstyp mit dem Verschlüsselungstyp des Volumes übereinstimmen. Andernfalls schlägt der Befehl fehl.
Beispiel¶
Ein Beispiel dazu finden Sie im Tutorial. Das Tutorial bietet eine schrittweise Anleitung zum Erstellen eines Dienstes mit einem eingebundene Blockspeicher-Volume.
Richtlinien und Einschränkungen¶
Die folgenden Einschränkungen gelten für Dienste, die Blockspeicher-Volumes verwenden:
Allgemeine Beschränkungen. Sollten Sie Probleme mit diesen Beschränkungen haben, wenden Sie sich bitte an Ihren Kontobeauftragten.
Die maximale Anzahl von Blockspeicher-Volumes pro Service beträgt 3.
Die maximale Anzahl von Blockspeicher-Volumes pro Snowflake-Konto beträgt 100.
In der folgenden Tabelle ist die maximale Anzahl der Blockspeicher-Volumes aufgeführt, die pro Computepool-Knoten gemountet werden können, abhängig vom Instanztyp des Knotens. Snowflake stellt sicher, dass Dienstinstanzen, die Blockspeicher-Volumes verwenden, in Übereinstimmung mit diesen Grenzen platziert werden. Dies kann dazu führen, dass Dienste im Zustand PENDING auf zusätzliche Ressourcen warten.
Instanzfamilie
AWS-Limit
Azure-Limit
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 (nur Azure)
k.A.
8
GPU_NV_S (nur AWS)
22
k.A.
GPU_NV_SM (nur Azure)
k.A.
32
GPU_NV_M (nur AWS)
21
k.A.
GPU_NV_2M (nur Azure)
k.A.
32
GPU_NV_3M (nur Azure)
k.A.
16
GPU_NV_SL (nur Azure)
k.A.
32
GPU_NV_L (nur AWS)
14
k.A.
Die maximale Anzahl von Snapshots pro Snowflake-Konto beträgt 100.
Der Dienst, der Blockspeicher-Volumes verwendet, muss die gleiche minimale und maximale Anzahl von Instanzen haben.
Nachdem der Dienst erstellt wurde, gilt Folgendes:
Sie können die Anzahl der Dienstinstanzen nicht mit dem Befehl ALTER SERVICE… SET … ändern, wenn ein Service Blockspeicher-Volumes verwendet.
Sie können die Felder
size
,iops
,throughput
oderencryption
von Blockspeicher-Volumes nicht ändern.Es können keine neuen Blockspeicher-Volumes hinzugefügt und keine bestehenden Blockspeicher-Volumes entfernt werden.
Blockspeicher-Volumes bleiben erhalten, wenn ein Dienst aktualisiert oder angehalten und fortgesetzt wird. Wenn ein Dienst angehalten wird, zahlen Sie weiterhin für das Volumen, da es erhalten bleibt. Nachdem Sie einen Dienst aktualisiert oder fortgesetzt haben, ordnet Snowflake jedes Blockspeicher-Volume der gleichen Dienstinstanz-ID zu wie zuvor.
Blockspeicher-Volumes werden gelöscht, wenn der Dienst gelöscht wird. Um die Daten auf den Volumes zu erhalten, können Sie von den Volumens Snapshots erstellen. Sie können die Snapshots später verwenden, um neue Volumes zu initialisieren.
Blockspeicher-Volumes unterstützen Tri-Secret Secure und Periodische Wiederverschlüsselung nicht. Das bedeutet, dass bei Konten, bei denen Tri-Secret Secure oder die periodische Wiederverschlüsselung aktiviert ist, zwar alle anderen Snowflake-Daten weiterhin mit zusätzlicher Sicherheit ausgestattet sind, die in Ihren Blockspeicher-Volumes von Snowpark Container Services gespeicherten Images jedoch nicht.
Wenn Sie ein Blockspeicher-Volume in einem Konto mit Tri-Secret Secure oder periodischer Wiederverschlüsselung erstellen möchten, müssen Sie daher zunächst bestätigen, dass Sie verstehen und damit einverstanden sind, dass Ihnen die Vorteile dieser zusätzlichen Sicherheit für Ihre Blockspeicher-Volumes nicht zur Verfügung stehen. Zur Bestätigung der Vereinbarung muss ein Kontoadministrator (Benutzer mit der Rolle ACCOUNTADMIN) den Parameter ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGE auf Kontoebene auf
TRUE
setzen.