diff --git a/clusterloader2/README.md b/clusterloader2/README.md
index 1e93ec91a9..da6f337ffa 100644
--- a/clusterloader2/README.md
+++ b/clusterloader2/README.md
@@ -26,7 +26,7 @@ These flags are required for any test to be run.
  - `kubeconfig` - path to the kubeconfig file.
  - `testconfig` - path to the test config file. This flag can be used multiple times
 if more than one test should be run.
- - `provider` - Cluster provider. Options are: gce, gke, kind, kubemark, aws, local, vsphere, skeleton
+ - `provider` - Cluster provider, options are: gce, gke, kind, kubemark, aws, azure, local, vsphere, skeleton
 
 #### Optional
 
diff --git a/clusterloader2/pkg/provider/aks.go b/clusterloader2/pkg/provider/azure.go
similarity index 68%
rename from clusterloader2/pkg/provider/aks.go
rename to clusterloader2/pkg/provider/azure.go
index c523aa0393..c206ab077c 100644
--- a/clusterloader2/pkg/provider/aks.go
+++ b/clusterloader2/pkg/provider/azure.go
@@ -21,12 +21,12 @@ import (
 	prom "k8s.io/perf-tests/clusterloader2/pkg/prometheus/clients"
 )
 
-type AKSProvider struct {
+type AzureProvider struct {
 	features Features
 }
 
-func NewAKSProvider(_ map[string]string) Provider {
-	return &AKSProvider{
+func NewAzureProvider(_ map[string]string) Provider {
+	return &AzureProvider{
 		features: Features{
 			SupportProbe:                        true,
 			SupportImagePreload:                 true,
@@ -40,30 +40,30 @@ func NewAKSProvider(_ map[string]string) Provider {
 	}
 }
 
-func (p *AKSProvider) Name() string {
-	return AKSName
+func (p *AzureProvider) Name() string {
+	return AzureName
 }
 
-func (p *AKSProvider) Features() *Features {
+func (p *AzureProvider) Features() *Features {
 	return &p.features
 }
 
-func (p *AKSProvider) GetComponentProtocolAndPort(componentName string) (string, int, error) {
+func (p *AzureProvider) GetComponentProtocolAndPort(componentName string) (string, int, error) {
 	return getComponentProtocolAndPort(componentName)
 }
 
-func (p *AKSProvider) GetConfig() Config {
+func (p *AzureProvider) GetConfig() Config {
 	return Config{}
 }
 
-func (p *AKSProvider) RunSSHCommand(cmd, host string) (string, string, int, error) {
+func (p *AzureProvider) RunSSHCommand(cmd, host string) (string, string, int, error) {
 	return runSSHCommand(cmd, host)
 }
 
-func (p *AKSProvider) Metadata(_ clientset.Interface) (map[string]string, error) {
+func (p *AzureProvider) Metadata(_ clientset.Interface) (map[string]string, error) {
 	return nil, nil
 }
 
-func (p *AKSProvider) GetManagedPrometheusClient() (prom.Client, error) {
+func (p *AzureProvider) GetManagedPrometheusClient() (prom.Client, error) {
 	return nil, ErrNoManagedPrometheus
 }
diff --git a/clusterloader2/pkg/provider/constants.go b/clusterloader2/pkg/provider/constants.go
index 40b40ce8ed..4d9fc79cd9 100644
--- a/clusterloader2/pkg/provider/constants.go
+++ b/clusterloader2/pkg/provider/constants.go
@@ -17,8 +17,9 @@ limitations under the License.
 package provider
 
 const (
-	AKSName         = "aks"
 	AWSName         = "aws"
+	AKSName         = "aks"
+	AzureName       = "azure"
 	AutopilotName   = "autopilot"
 	EKSName         = "eks"
 	GCEName         = "gce"
diff --git a/clusterloader2/pkg/provider/provider.go b/clusterloader2/pkg/provider/provider.go
index 9586afc1a5..91ed42a652 100644
--- a/clusterloader2/pkg/provider/provider.go
+++ b/clusterloader2/pkg/provider/provider.go
@@ -123,10 +123,10 @@ func NewProvider(initOptions *InitOptions) (Provider, error) {
 		configs[RootKubeConfigKey] = initOptions.KubemarkRootKubeConfigPath
 	}
 	switch initOptions.ProviderName {
-	case AKSName:
-		return NewAKSProvider(configs), nil
 	case AWSName:
 		return NewAWSProvider(configs), nil
+	case AzureName, AKSName: // AKSName is for backward compatibility.
+		return NewAzureProvider(configs), nil
 	case AutopilotName:
 		return NewAutopilotProvider(configs), nil
 	case EKSName: