~$ azure config mode arm
-~$ azure login
-~$ azure group create exampleGroupName eastus
-~$ azure storage account create --type LRS --location eastus --resource-group exampleGroupName exampleStorageAccountName
-~$ azure storage account keys list --resource-group exampleGroupName exampleStorageAccountName
-info: Executing command storage account keys list
-+ Getting storage account keys
-data: Primary: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz==
-data: Secondary: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy==
-info: storage account keys list command OK
+~$ az login
+~$ az group create exampleGroupName eastus2
+~$ az storage account create --sku Standard_LRS --kind BlobStorage --encryption-services blob --access-tier Hot --https-only true --location eastus2 --resource-group exampleGroupName --name exampleStorageAccountName
+~$ az storage account keys list --resource-group exampleGroupName --account-name exampleStorageAccountName
+[
+ {
+ "keyName": "key1",
+ "permissions": "Full",
+ "value": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=="
+ },
+ {
+ "keyName": "key2",
+ "permissions": "Full",
+ "value": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy=="
+ }
+]
~$ AZURE_STORAGE_ACCOUNT="exampleStorageAccountName" \
AZURE_STORAGE_ACCESS_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz==" \
-azure storage container create exampleContainerName
+azure storage container create --name exampleContainerName
+Note that Keepstore services may be configured to use multiple Azure Storage accounts and multiple containers within a storage account.
+
h2. Configure keepstore
-Copy the primary storage account key to a file where it will be accessible to keepstore at startup time.
+Volumes are configured in the @Volumes@ section of the cluster configuration file.
- Volumes:
+ ClusterID-nyw5e-000000000000000:
+ AccessViaHosts:
+ # This section determines which keepstore servers access the
+ # volume. In this example, keep0 has read/write access, and
+ # keep1 has read-only access.
+ #
+ # If the AccessViaHosts section is empty or omitted, all
+ # keepstore servers will have read/write access to the
+ # volume.
+ "http://keep0.ClusterID.example.com:25107": {}
+ "http://keep1.ClusterID.example.com:25107": {ReadOnly: true}
-
-#!/bin/sh
+ Driver: Azure
+ DriverParameters:
+ # Storage account name and secret key, used for
+ # authentication.
+ StorageAccountName: exampleStorageAccountName
+ StorageAccountKey: zzzzzzzzzzzzzzzzzzzzzzzzzz
-exec 2>&1
-exec keepstore \
- -azure-storage-account-key-file /etc/sv/keepstore/exampleStorageAccountName.key \
- -azure-storage-account-name exampleStorageAccountName \
- -azure-storage-container-volume exampleContainerName
-
-
+ # Storage container name.
+ ContainerName: exampleContainerName
-Start (or restart) keepstore, and check its log file to confirm it is using the new configuration.
+ # The cloud environment to use,
+ # e.g. "core.chinacloudapi.cn". Defaults to
+ # "core.windows.net" if blank or omitted.
+ StorageBaseURL: ""
-
-2015/10/26 21:06:24 Using volume azure-storage-container:"exampleContainerName" (writable=true)
-
-
+ # Time to wait for an upstream response before failing the
+ # request.
+ RequestTimeout: 10m
+
+ # Time to wait before retrying a failed "list blobs" Azure
+ # API call.
+ ListBlobsRetryDelay: 10s
+
+ # Maximum attempts at a "list blobs" Azure API call before
+ # giving up.
+ ListBlobsMaxAttempts: 12
+
+ # If non-zero, use multiple concurrent requests (each
+ # requesting MaxGetBytes bytes) when retrieving data. If
+ # zero or omitted, get the entire blob with one request.
+ #
+ # Normally this is zero but if you find that 4 small
+ # requests complete faster than a single large request, for
+ # example, you might set this to 16777216 (64 MiB ÷ 4).
+ MaxGetBytes: 0
+
+ # Time to wait for an unexpectedly empty blob to become
+ # non-empty. Azure's create-and-write operation is not
+ # atomic. The default value typically allows concurrent GET
+ # and PUT requests to succeed despite the race window.
+ WriteRaceInterval: 15s
+
+ # Time to wait between GET attempts while waiting for
+ # WriteRaceInterval to expire.
+ WriteRacePollTime: 1s
+
+ # How much replication is provided by the underlying storage
+ # container. This is used to inform replication decisions at
+ # the Keep layer.
+ Replication: 3
+
+ # If true, do not accept write or trash operations, even if
+ # AccessViaHosts.*.ReadOnly is false.
+ #
+ # If false or omitted, enable write access (subject to
+ # AccessViaHosts.*.ReadOnly, where applicable).
+ ReadOnly: false
+
+ # Storage classes to associate with this volume. See "Storage
+ # classes" in the "Admin" section of doc.arvados.org.
+ StorageClasses: null
+