~$ azure config mode arm
~$ 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 --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
Volumes are configured in the @Volumes@ section of the cluster configuration file.
{% include 'assign_volume_uuid' %}
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}
Driver: Azure
DriverParameters:
# Storage account name and secret key, used for
# authentication.
StorageAccountName: exampleStorageAccountName
StorageAccountKey: zzzzzzzzzzzzzzzzzzzzzzzzzz
# Storage container name.
ContainerName: exampleContainerName
# The cloud environment to use,
# e.g. "core.chinacloudapi.cn". Defaults to
# "core.windows.net" if blank or omitted.
StorageBaseURL: ""
# 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