Arbeiten mit persistenten Datenspeichern
Sie können einen IBM Cloud Object Storage (COS) Bucket in Ihre IBM Cloud® Code Engine Anwendung oder Ihren Auftrag einbinden, indem Sie einen persistenten Datenspeicher verwenden. Mit dieser Funktion können Ihre Workloads über das lokale Dateisystem auf den Inhalt eines COS-Buckets zugreifen, indem sie Standarddateivorgänge verwenden.
Ein persistenter Datenspeicher in Code Engine ist ein Verweis auf einen bestehenden Datenspeicher, der nicht von Code Engine verwaltet wird. Derzeit ist IBM Cloud Object Storage der einzige unterstützte Datenspeichertyp. Wenn Sie einen Verweis auf Ihren COS-Bucket erstellen, können Sie ihn direkt in das Dateisystem Ihrer Anwendung oder Ihres Job-Containers einhängen.
Vorbereitende Schritte
Bevor Sie mit persistenten Datenspeichern arbeiten können, müssen Sie sicherstellen, dass die folgenden Voraussetzungen erfüllt sind.
- Sie müssen eine Instanz von IBM Cloud Object Storage haben.
- Sie müssen eine Dienstanmeldung für Ihre Object Storage-Instanz mit aktivierten HMAC-Anmeldeinformationen erstellen. Der HMAC-Berechtigungsnachweis erfordert mindestens die Service-Zugangsrolle Writer, um aus dem Bucket zu lesen und in ihn zu schreiben. Wenn Sie nur Lesezugriff benötigen, wählen Sie stattdessen die Zugriffsrolle Content Reader Service.
- Sie müssen einen Bucket in Ihrer Object Storage Instanz zur Verfügung haben. Weitere Informationen finden Sie unter Erstellen eines neuen Buckets.
- Sie müssen ein Projekt Code Engine haben und es muss als aktueller Kontext ausgewählt sein.
Schritt 1: Erstellen Sie ein HMAC-Geheimnis in Code Engine mit Hilfe der Konsole
Um sicher auf Ihren COS-Bucket zugreifen zu können, benötigt Code Engine die HMAC-Zugangsdaten, die mit Ihrer Object Storage-Instanz verknüpft sind. Sie speichern diese Anmeldeinformationen in einem Geheimnis innerhalb Ihres Code Engine Projekts.
Folgen Sie Erstellen eines HMAC-Geheimnisses in der Konsole, um ein Geheimnis im Format HMAC zu erstellen.
Geben Sie die entsprechenden Werte aus Ihrer COS-Dienstanmeldung ein, wenn Sie dazu aufgefordert werden.
Schritt 2: Erstellen eines persistenten Datenspeichers mit Hilfe der Konsole
Erstellen Sie nun die persistente Datenspeicherressource in Code Engine. Diese Ressource dient als Verweis auf Ihren COS-Bucket und verknüpft ihn mit dem von Ihnen erstellten HMAC-Geheimnis.
- Klicken Sie auf der Seite Code Engine Projekte auf den Namen Ihres Projekts.
- Klicken Sie auf der Seite Komponenten auf Persistente Datenspeicher.
- Klicken Sie auf der Seite Persistente Datenspeicher auf Erstellen.
- Führen Sie auf der Seite Erstellen eines persistenten Datenspeichers die folgenden Schritte aus:
- Geben Sie einen Namen an, zum Beispiel „
mysecret-hmac“. - Geben Sie an, ob Sie eine vorhandene COS-Bucket-Spezifikation auswählen oder manuell hinzufügen möchten.
- Wählen Sie eine COS-Instanz aus oder geben Sie ihren Namen manuell an.
- Wählen Sie einen Bereich aus oder geben Sie seinen Namen manuell ein.
- Wählen Sie das HMAC-Zugangsgeheimnis, das für die Authentifizierung bei der COS-Instanz erforderlich ist.
- Klicken Sie auf Erstellen, um den persistenten Datenspeicher zu erstellen.
- Geben Sie einen Namen an, zum Beispiel „
Schritt 3: Binden Sie den Datenspeicher mithilfe der Konsole in einen Workload ein
Nachdem Sie den persistenten Datenspeicher erstellt haben, können Sie ihn als Volume Mount mo unten, wenn Sie eine Anwendung oder einen Auftrag erstellen oder aktualisieren.
Einbau in eine Anwendung
-
Navigieren Sie zu Ihrer Anwendung.
- Klicken Sie auf der Seite „ Code Engine-Projekte“ auf den Namen Ihres Projekts. Klicken Sie auf Anwendungen, um mit Ihren Anwendungen zu arbeiten.
- Klicken Sie auf der Seite Anwendungen auf den Namen der Anwendung, die Sie aktualisieren möchten, oder erstellen Sie eine neue Anwendung, indem Sie auf Erstellen klicken.
-
Wählen Sie die Registerkarte „Konfiguration“ aus.
-
Klicken Sie auf der Registerkarte Volume mounts auf Hinzufügen.
-
Wählen Sie als Datenträgertyp " Persistente Datenspeicher ".
-
Wählen Sie einen persistenten Datenspeicher aus.
-
Geben Sie einen relativen Bucket-Unterpfad an (optional), wenn Ihre Anwendung nur auf Objekte im Bucket mit diesem Unterpfadpräfix zugreifen soll, zum Beispiel
path/in/bucket. Dies ist nützlich, wenn Sie den Zugriff auf einen bestimmten Ordner innerhalb des Buckets isolieren möchten. Der Unterpfad muss ein gültiges Präfix in Ihrem COS-Bucket sein. Nur die Inhalte unter diesem Pfad sind von dem gemounteten Verzeichnis aus zugänglich. -
Geben Sie den Mount-Pfad an. Dies ist das Verzeichnis innerhalb des Anwendungscontainers, in dem auf die Daten des Datenträgers zugegriffen werden kann, zum Beispiel unter
/mnt/bucket. -
Wählen Sie einen Wert für die Zugriffsberechtigung, d. h. Lesen-Schreiben oder Nur-Lesen.
-
Klicken Sie auf Hinzufügen, um die Datenträgereinbindung zu erstellen.
-
Klicken Sie auf „Bereitstellen“, um Ihre Änderungen zu speichern und die App-Revision bereitzustellen.
Wenn Sie Ihre Anwendung aktualisieren, erstellt Ihre Anwendung eine neue Revision und leitet den Datenverkehr an diese Instanz weiter.
Einstieg in einen Job
-
Navigieren Sie zur Jobseite.
- Klicken Sie auf der Seite „ Code Engine-Projekte“ auf den Namen Ihres Projekts. Klicken Sie auf Aufträge, um mit Ihren Aufträgen und Auftragsläufen zu arbeiten.
- Klicken Sie auf der Seite Jobs auf die Registerkarte Jobs, und klicken Sie auf den Namen des Jobs, den Sie aktualisieren möchten, oder erstellen Sie einen neuen Job, indem Sie auf Erstellen klicken.
-
Wählen Sie die Registerkarte „Konfiguration“ aus.
-
Klicken Sie auf der Registerkarte Volume mounts auf Hinzufügen.
-
Wählen Sie als Datenträgertyp " Persistente Datenspeicher ".
-
Wählen Sie einen persistenten Datenspeicher aus.
-
Geben Sie einen relativen Bucket-Unterpfad an (optional), wenn Ihre Jobausführungen nur auf Objekte im Bucket mit diesem Unterpfadpräfix zugreifen sollen, zum Beispiel
path/in/bucket. Dies ist nützlich, wenn Sie den Zugriff auf einen bestimmten Ordner innerhalb des Buckets isolieren möchten. Der Unterpfad muss ein gültiges Präfix in Ihrem COS-Bucket sein. Nur die Inhalte unter diesem Pfad sind von dem gemounteten Verzeichnis aus zugänglich. -
Geben Sie den Mount-Pfad an. Dies ist das Verzeichnis innerhalb des Job-Run-Containers, in dem auf die Daten des Datenträgers zugegriffen werden kann, zum Beispiel unter
/mnt/bucket. -
Wählen Sie einen Wert für die Zugriffsberechtigung, d. h. Lesen-Schreiben oder Nur-Lesen.
-
Klicken Sie auf Hinzufügen, um die Datenträgereinbindung zu erstellen.
-
Klicken Sie auf Verteilen, um Ihre Änderungen zu speichern und den Auftrag zu verteilen.
-
Klicken Sie auf Job übergeben.
Vorbereitende Schritte
Bevor Sie mit persistenten Datenspeichern arbeiten können, müssen Sie sicherstellen, dass die folgenden Voraussetzungen erfüllt sind.
- Sie müssen eine Instanz von IBM Cloud Object Storage haben.
- Sie müssen eine Dienstanmeldung für Ihre Object Storage-Instanz mit aktivierten HMAC-Anmeldeinformationen erstellen. Der HMAC-Berechtigungsnachweis erfordert mindestens die Service-Zugangsrolle Writer, um aus dem Bucket zu lesen und in ihn zu schreiben. Wenn Sie nur Lesezugriff benötigen, wählen Sie stattdessen die Zugriffsrolle Content Reader Service.
- Sie müssen das Plugin IBM Cloud Object Storage installieren, indem Sie den folgenden Befehl ausführen:
ibmcloud plugin install cloud-object-storage - Sie müssen einen Bucket in Ihrer Object Storage Instanz zur Verfügung haben. Weitere Informationen finden Sie unter Erstellen eines neuen Buckets.
- Sie müssen ein Projekt Code Engine haben und es muss als aktueller Kontext ausgewählt sein.
Schritt 1: Erstellen eines HMAC-Geheimnisses in Code Engine mit Hilfe der CLI
Um sicher auf Ihren COS-Bucket zugreifen zu können, benötigt Code Engine die HMAC-Zugangsdaten, die mit Ihrer Object Storage-Instanz verknüpft sind. Sie speichern diese Anmeldeinformationen in einem Geheimnis innerhalb Ihres Code Engine Projekts.
Um ein Geheimnis im Format hmac zu erstellen, verwenden Sie den secret create befehl.
ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt
Geben Sie die entsprechenden Werte aus Ihrer COS-Dienstanmeldung ein, wenn Sie von dem secret create befehl aufgefordert werden.
Schritt 2: Erstellen eines persistenten Datenspeichers mit Hilfe der CLI
Erstellen Sie nun die persistente Datenspeicherressource in Code Engine. Diese Ressource dient als Verweis auf Ihren COS-Bucket und verknüpft ihn mit dem von Ihnen erstellten HMAC-Geheimnis.
ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
- Ersetzen Sie
my-cos-bucket-pdsdurch einen eindeutigen Namen für Ihren Datenspeicher. - Ersetzen Sie
my-cos-bucketdurch den genauen Namen Ihres COS-Eimers. - Ersetzen Sie
my-hmac-secretdurch den Namen des HMAC-Geheimnisses.
Schritt 3: Einbinden des Datenspeichers in einen Workload mithilfe der CLI
Nachdem Sie den persistenten Datenspeicher erstellt haben, können Sie ihn einhängen, wenn Sie eine Anwendung oder einen Auftrag erstellen oder aktualisieren. Verwenden Sie die Option --mount-data-store mit dem Format MOUNT_PATH=PDS_NAME.
Einbau in eine Anwendung
Mit dem folgenden Befehl wird eine Anwendung mit dem Namen myapp erstellt und der Datenspeicher my-cos-bucket-pds in das Verzeichnis /mnt/bucket innerhalb des Anwendungscontainers eingehängt.
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
Einstieg in einen Job
In ähnlicher Weise erstellt dieser Befehl einen Auftrag mit dem Namen myjob und hängt denselben Datenspeicher in das Verzeichnis /mnt/bucket ein.
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
Einhängen eines Unterpfades innerhalb des Buckets
Sie können auch einen bestimmten Unterpfad innerhalb Ihres COS-Buckets einhängen, indem Sie den relativen Pfad mit einem Doppelpunkt (:) an die Einhängedefinition anhängen. Dies ist nützlich, wenn Sie den Zugriff auf einen bestimmten
Ordner innerhalb des Buckets isolieren möchten.
Um zum Beispiel nur das Verzeichnis path/in/bucket aus dem Datenspeicher my-cos-bucket-pds in /mnt/bucket zu mounten:
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
Oder für einen Job:
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
Hinweis: Die Adresse
path/in/bucketmuss ein gültiges Präfix in Ihrem COS-Bereich sein. Nur die Inhalte unter diesem Pfad sind von dem gemounteten Verzeichnis aus zugänglich.
Schritt 4: Zugriff auf Dateien im gemounteten Datenspeicher
Sobald Ihre Anwendung oder Ihr Auftrag ausgeführt wird, kann der Code mit dem gemounteten COS-Bucket interagieren, als wäre es ein lokales Verzeichnis. Alle Standard-Dateisystemoperationen werden unterstützt.
In Ihrem Container können Sie zum Beispiel Dateien auflisten, Inhalte lesen und neue Dateien schreiben:
# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt
Einschränkungen
Die Einhängung wird implementiert mit s3fsimplementiert, das eine FUSE-basierte Dateisystemschnittstelle zu S3-compatible Storage bietet. Beachten
Sie die folgenden Einschränkungen:
- Anzahl der persistenten Datenspeicher:
- Es besteht die Einschränkung, dass maximal zwei persistente Datenspeicher pro Anwendung oder Auftrag eingebunden werden können.
- Leistung:
- Object Storage hat eine hohe Latenzzeit für die Zeit bis zum ersten Byte, wodurch sie bei Vorgängen, die einen sofortigen Zugriff erfordern, langsamer sind als lokale Dateisysteme.
- Operationen, die Dateien verändern, wie z.B. zufällige Schreibvorgänge oder Anhängen, erfordern das Neuschreiben des gesamten Objekts im Backend, was langsam und ineffizient sein kann, da es keinen zufälligen Schreibzugriff gibt.
- Metadatenoperationen, wie das Auflisten von Verzeichnissen, können eine schlechte Leistung aufweisen.
- Konsistenz:
- IBM Cloud Object Storage bietet starke Lese-nach-Schreib-Konsistenz für neue Objekte, aber eventuelle Konsistenz beim Überschreiben und Löschen von Objekten. Das bedeutet, dass nach einer Aktualisierung oder Löschung Lesevorgänge vorübergehend veraltete Daten zurückgeben können.
- Änderungen am Bucket, die von außerhalb des Mounts vorgenommen werden (z. B. direkt über die COS-API oder einen anderen Client), werden nicht sofort erkannt und sind möglicherweise erst nach einiger Zeit sichtbar.
- Semantik des Dateisystems:
- Die Standardfunktionen des POSIX Dateisystems werden nicht vollständig unterstützt. Insbesondere gibt es keine atomaren Umbenennungen von Dateien oder Verzeichnissen und keine harten Links.
- Parallelität:
- Es gibt keine Koordination zwischen mehreren Clients (z. B. mehreren Anwendungsinstanzen), die denselben Bucket nutzen. Gleichzeitiges Schreiben auf dieselbe Datei von verschiedenen Instanzen aus kann zu Datenverlust oder -beschädigung führen.
- Veranstaltungsabonnements:
- Wenn Sie ein Ereignisabonnement für Ihren Object Storage Bucket konfiguriert haben, beachten Sie, dass durch das Einhängen erstellte Dateioperationen mehrere Aktualisierungsereignisse erzeugen können. Dies kann dazu führen, dass Ihre Code Engine Anwendung oder Ihr Job mehr als einmal für eine einzige Datei-Operation ausgelöst wird, was nachgelagerte Verarbeitungen oder ereignisgesteuerte Workflows beeinträchtigen kann.
Aufgrund dieser Einschränkungen ist diese Funktion nicht für alle Workloads geeignet. Sie eignet sich am besten für Arbeitslasten, bei denen hauptsächlich große Dateien gelesen werden, wie z. B. beim Deep Learning oder bei der Datenanalyse, wo ein guter Durchsatz erzielt werden kann. Sie wird nicht für Arbeitslasten empfohlen, die eine geringe Latenz, häufige kleine Schreibvorgänge oder transaktionale Dateioperationen erfordern.
Nächste Schritte
Nachdem Sie nun wissen, wie man mit persistenten Datenspeichern arbeitet, können Sie sich mit weiterführenden Themen beschäftigen: