16
16
SERVICES_POOL=" services"
17
17
WORKSPACES_POOL=" workspaces"
18
18
19
- K8S_NODE_VM_SIZE=${K8S_NODE_VM_SIZE:= " Standard_D4_v3 " }
19
+ K8S_NODE_VM_SIZE=${K8S_NODE_VM_SIZE:= " Standard_DS3_v2 " }
20
20
21
21
function check_prerequisites() {
22
22
if [ -z " ${AZURE_SUBSCRIPTION_ID} " ]; then
@@ -123,7 +123,7 @@ function install() {
123
123
--node-osdisk-size " 100" \
124
124
--node-vm-size " ${K8S_NODE_VM_SIZE} " \
125
125
--resource-group " ${RESOURCE_GROUP} "
126
- fi
126
+ fi
127
127
128
128
setup_kubectl
129
129
@@ -141,6 +141,7 @@ function install() {
141
141
setup_managed_dns
142
142
setup_mysql_database
143
143
setup_storage
144
+ setup_backup
144
145
output_config
145
146
}
146
147
@@ -366,6 +367,83 @@ function setup_mysql_database() {
366
367
--start-ip-address " 0.0.0.0"
367
368
}
368
369
370
+ function setup_backup() {
371
+ if [ -n " ${BACKUPS_ENABLED} " ] && [ " ${BACKUPS_ENABLED} " == " true" ]; then
372
+ BACKUP_RESOURCE_GROUP=" $( az aks show --name gitpod -g gitpod --query " nodeResourceGroup" -o tsv) "
373
+
374
+ echo " Configuring backups in ${BACKUP_RESOURCE_GROUP} ..."
375
+
376
+ # Based from https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure#setup
377
+ BACKUP_ACCOUNT=" ${STORAGE_ACCOUNT_NAME} backup"
378
+ if [ " $( az storage account show --name ${BACKUP_ACCOUNT} --resource-group ${BACKUP_RESOURCE_GROUP} --query " name == '${BACKUP_ACCOUNT} '" || echo " empty" ) " == " true" ]; then
379
+ echo " Backup storage account exists..."
380
+ else
381
+ echo " Create backup storage account..."
382
+ az storage account create \
383
+ --name " ${STORAGE_ACCOUNT_NAME} backup" \
384
+ --resource-group " ${BACKUP_RESOURCE_GROUP} " \
385
+ --location " ${LOCATION} " \
386
+ --sku Standard_GRS \
387
+ --encryption-services blob \
388
+ --https-only true \
389
+ --kind BlobStorage \
390
+ --access-tier Hot
391
+ fi
392
+
393
+ ACCOUNT_KEY=" $( az storage account keys list --resource-group " ${BACKUP_RESOURCE_GROUP} " --account-name " ${BACKUP_ACCOUNT} " --query " [0].value" -o tsv) "
394
+
395
+ BLOB_CONTAINER=" velero"
396
+ if [ " $( az storage container show --account-name ${BACKUP_ACCOUNT} --name ${BLOB_CONTAINER} --account-key=" ${ACCOUNT_KEY} " --query " name == '${BLOB_CONTAINER} '" || echo " empty" ) " == " true" ]; then
397
+ echo " Backup storage container exists..."
398
+ else
399
+ echo " Create backup storage container..."
400
+ az storage container create \
401
+ -n " ${BLOB_CONTAINER} " \
402
+ --account-key=" ${ACCOUNT_KEY} " \
403
+ --public-access off \
404
+ --account-name " ${BACKUP_ACCOUNT} "
405
+ fi
406
+
407
+ echo " Create service principal for Velero"
408
+ AZURE_ROLE=" Contributor"
409
+ SP_NAME=" velero"
410
+
411
+ # Delete each time
412
+ az ad sp delete --id $( az ad sp list --display-name " ${SP_NAME} " --query " [].id" -o tsv) || true
413
+
414
+ AZURE_CLIENT_SECRET=$( az ad sp create-for-rbac \
415
+ --display-name " ${SP_NAME} " \
416
+ --role " ${AZURE_ROLE} " \
417
+ --scopes /subscriptions/27ef008d-9475-4fe2-ac63-d15da9362546 \
418
+ --query " password" \
419
+ -o tsv)
420
+
421
+ AZURE_CLIENT_ID=$( az ad sp list --display-name " ${SP_NAME} " --query ' [0].appId' -o tsv)
422
+
423
+ cat << EOF > ./credentials-velero
424
+ AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
425
+ AZURE_TENANT_ID=${AZURE_TENANT_ID}
426
+ AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
427
+ AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
428
+ AZURE_RESOURCE_GROUP=${BACKUP_RESOURCE_GROUP}
429
+ AZURE_CLOUD_NAME=AzurePublicCloud
430
+ EOF
431
+
432
+ # Delete to force update to new values
433
+ velero uninstall --force
434
+
435
+ velero install \
436
+ --provider azure \
437
+ --plugins velero/velero-plugin-for-microsoft-azure:v1.4.0 \
438
+ --bucket " ${BLOB_CONTAINER} " \
439
+ --secret-file ./credentials-velero \
440
+ --backup-location-config " resourceGroup=${BACKUP_RESOURCE_GROUP} ,storageAccount=${BACKUP_ACCOUNT} ,subscriptionId=${AZURE_SUBSCRIPTION_ID} " \
441
+ --snapshot-location-config " apiTimeout=2m" \
442
+ --use-restic \
443
+ --wait
444
+ fi
445
+ }
446
+
369
447
function setup_storage() {
370
448
if [ " $( az storage account show --name ${STORAGE_ACCOUNT_NAME} --resource-group ${RESOURCE_GROUP} --query " name == '${STORAGE_ACCOUNT_NAME} '" || echo " empty" ) " == " true" ]; then
371
449
echo " Storage account exists..."
0 commit comments