In a previous post I showed how to run Snakemake on an auto-scaling Kubernetes cluster without shared filesystem on Azure. There I used a public Dockerhub repo for the Snakemake container. Since we were running Kubernetes on Azure it makes sense to use Azure Container registries (ACR; which supports Singularity images by the way). But how do you authenticate with ACR from within your Kubernetes cluster? Easy, you can simply attach an ACR repo to a Kubernetes cluster during creation or afterwards if you have an existing cluster. Below I will go with the former option and create a new cluster.

First, create an ACR repository:

MYACR=snakemaksacr;# change to something unique
# assuming resource group snakemaks-rg still exists
az acr create -n $MYACR -g snakemaks-rg --sku basic

Next, import the Docker image from Dockerhub to ACR:

az acr import -n $MYACR --source docker.io/andreaswilm/snakemaks:5.17 --image snakemaks:5.17

Then, create a new AKS cluster with the above ACR repo attached:

az aks create --resource-group snakemaks-rg --name snakemaks-aks \
 --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --enable-cluster-autoscaler \
 --node-count 1 --min-count 1 --max-count 3 --node-vm-size Standard_D3_v2 \
 --generate-ssh-keys --attach-acr $MYACR

The only new options required are --generate-ssh-keys --attach-acr $MYACR.

Assuming you kept the setup from the previous post (conda environment and storage account with snakemake tutorial data) you can run Snakemake after downloading the Kubernetes credentials:

az aks get-credentials --resource-group snakemaks-rg --name snakemaks-aks
snakemake --kubernetes --container-image ${MYACR}.azurecr.io/snakemaks:5.17 \
  --default-remote-prefix snakemake-tutorial --default-remote-provider AzBlob \
  --envvars AZ_BLOB_ACCOUNT_URL AZ_BLOB_CREDENTIAL \
  --use-conda --jobs 3

Only the container URI has changed. Note, that if the results of the previous run still exist, you might want to add --forceall to the Snakemake call to make sure it does something.