Azure CLI is broken Again
Recently, I wanted to do some work with Azure Kubernetes Service, but unfortunately, the command line tools with Azure CLI yields a traceback when doing anything with AKS. This is not the first time this has happened. This is on macOS, so maybe it works on Linux, I do not know.
UPDATE: A new version of Azure CLI v2.31.0
was recently released and it seems to have fixed the issue. Thank you developers of this project.
The Bug
I usually start with Azure CLI, as this is the most direct route, and should be supported by Azure team. However, after updating, I was surprised to find the tools (Azure CLI v2.30.0
) no longer work with AKS:
brew upgrade azure-cli
az loginaz aks create \
--resource-group ${AZ_RESOURCE_GROUP} \
--name ${AZ_AKS_CLUSTER_NAME} \
--generate-ssh-keys \
--vm-set-type VirtualMachineScaleSets \
--node-vm-size ${AZ_VM_SIZE} \
--load-balancer-sku standard \
--node-count 3 \
--zones 1 2 3
And ka-boom:
I found that other people are experiencing this issue, and is noted in Azure/azure-cli
GitHub issues 20644, 20348 , 20269. I tweeted Microsoft Azure about this, but didn’t get much of a response.
Root Cause
Apparently the root cause has to deal with python-tabulate
mentioned in python-tabulate/pull/105 and Python 3.10, which is the underlying python targeted used by Azure CLI.
Alternative using Terraform
Azure CLI (az
) are essentially python scripts that interact with Azure Resource Manager API. Instead of relying on these tools for infrastructure, you can use Terraform to create a cluster and retrieve the credentials needed for the Kubernetes client CLI (kubectl
).
Conclusion
I typically would not write blog on such an error, but just that this has happened before, and I am shocked that the official client tools for Azure cloud can be released into the public with such bugs.
If this was a pure open source tool, then it is up to the community (all of us) to help out the best we can. However, given this is a commercial service, and these are the designated tools to access the service, I hope it is not unreasonable to expect the tools to actually work.
In the mean time, when this happens, you can use either ① the Azure Portal, ② Azure RM API through curl or scripts, or ③ use a configuration tool like Terraform.