Guillaume Bienkowski
05/19/2026, 9:19 AMRocky
05/19/2026, 9:19 AMstarrocks-container).
* Create User-Assigned Managed Identity: Create a Managed Identity (e.g., starrocks-identity).
* Assign Permissions: Grant the Managed Identity the Storage Blob Data Contributor role on your storage account/container.
* Establish Federated Trust:
1. Retrieve the OIDC Issuer URL of your K8S cluster (e.g., az aks show --resource-group <rg> --name <cluster> --query "oidcIssuerProfile.issuerUrl" -o tsv).
2. Create a Federated Identity Credential on the Managed Identity. Link it to the Kubernetes Namespace and ServiceAccount name you plan to use (e.g., namespace: starrocks, service-account: starrocks-sa).
2. Kubernetes Configuration
Create a ServiceAccount that will be used by the StarRocks pods to assume the Azure identity.
yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: starrocks-sa
namespace: starrocks
annotations:
azure.workload.identity/client-id: "<YOUR_MANAGED_IDENTITY_CLIENT_ID>"
labels:
azure.workload.identity/use: "true"
3. Deploy StarRocks Operator
Install the StarRocks Operator and the Custom Resource Definition (CRD).
bash
# 1. Install the CRD
kubectl apply -f <https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/starrocks.com_starrocksclusters.yaml>
# 2. Deploy the Operator
kubectl apply -f <https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml>
4. Deploy StarRocks Cluster (CRD)
Configure the StarRocksCluster resource. To use Azure Storage for your data, you must set the cluster to Shared-Data mode.
In the example below, replace the placeholders with your Azure IDs:
yaml
apiVersion: <http://starrocks.com/v1|starrocks.com/v1>
kind: StarRocksCluster
metadata:
name: starrocks
namespace: starrocks
spec:
starRocksFeSpec:
replicas: 3
serviceAccount: starrocks-sa # Use the SA created in Step 2
config: |
run_mode = shared_data
cloud_native_storage_type = ADLS2
azure_adls2_endpoint = https://<ACCOUNT_NAME>.<http://dfs.core.windows.net|dfs.core.windows.net>
azure_adls2_path = <CONTAINER_NAME>/<SUB_PATH>
# Workload Identity Config (v3.5.10+)
azure_adls2_oauth2_tenant_id = <AZURE_TENANT_ID>
azure_adls2_oauth2_client_id = <MANAGED_IDENTITY_CLIENT_ID>
azure_adls2_oauth2_token_file = /var/run/secrets/azure/tokens/azure-identity-token
podLabels:
azure.workload.identity/use: "true" # Required for webhook injection
starRocksCnSpec:
replicas: 3
serviceAccount: starrocks-sa
config: |
# CNs also need access to the storage for caching/shuffling
starlet_port = 9070
storage_root_path = /opt/starrocks/cn/storage
podLabels:
azure.workload.identity/use: "true"
Key Considerations:
* Version Compatibility: Ensure you use StarRocks v3.5.10+. If using an older version, Workload Identity is not supported, and you would need to use azure_adls2_shared_key or azure_adls2_sas_token in the config instead.
* Shared-Data Mode: In this mode, StarRocks does not store data on local disks (except for cache); it stores all data in your Azure Storage Account. This is the standard "Cloud Native" deployment.
* Webhook Injection: The azure.workload.identity/use: "true" label is critical; it tells the Azure Workload Identity webhook to inject the identity token file into the pod at the path specified in azure_adls2_oauth2_token_file.Rocky
05/19/2026, 9:19 AMshared_data mode, as CNs are stateless and easier to scale.
References
• deployment/shared_data/azure.mdGuillaume Bienkowski
05/19/2026, 9:31 AMcluster1/ for cluster1 files, etc) ?Rocky
05/19/2026, 9:31 AMStarRocksCluster CRD), you use the azure_adls2_path parameter. This parameter follows the format <container>/<directory>.
To isolate your clusters, simply provide a different directory name for each one:
* Cluster 1 Configuration:
yaml
azure_adls2_endpoint = <https://mystorageaccount.dfs.core.windows.net>
azure_adls2_path = starrocks-container/cluster1
* Cluster 2 Configuration:
yaml
azure_adls2_endpoint = <https://mystorageaccount.dfs.core.windows.net>
azure_adls2_path = starrocks-container/cluster2
Important Considerations:
1. Unique Metadata: Each shared-data cluster manages its own metadata and data files. By pointing them to different sub-paths, they will remain completely independent and will not interfere with each other's data.
2. Shared Resources/Throttling: While the data is isolated logically, remember that both clusters will share the IOPS and throughput limits of the single Azure Storage Account. If you have multiple high-concurrency clusters, monitor the storage account metrics for throttling.
3. Workload Identity Permissions: Your Managed Identity needs Storage Blob Data Contributor permissions on the storage account. If you use a single identity for both clusters, it will have access to both prefixes. If you need stricter security isolation, you could use two different Managed Identities and restrict their access to specific directories using Azure RBAC (though assigning roles at the directory level in ADLS Gen2 is typically done via ACLs rather than standard Azure RBAC).
4. Cleaning Up: If you delete a cluster, it will not automatically delete the files in the Azure Storage Account. You will need to manually remove the cluster1/ or cluster2/ directory if you want to reclaim space.
References
• deployment/shared_data/feature-support-shared-data.md
• integrations/authenticate_to_azure_storage.md
• administration/management/FE_configuration.mdGuillaume Bienkowski
05/19/2026, 9:37 AMenable_load_volume_from_conf in the FE ? So that the volume is directly created? Also, will this volume be automatically used when I create databases?Rocky
05/19/2026, 9:38 AMenable_load_volume_from_conf = true if you want a seamless deployment where the storage account defined in your configuration is automatically used as the primary storage for your databases.
Here is how it works and why you would use it:
1. Does it create the volume directly?
Yes. When enable_load_volume_from_conf is set to true, StarRocks FE will automatically create a storage volume named builtin_storage_volume during its first startup. It uses the azure_adls2_path, azure_adls2_endpoint, and credential settings (Workload Identity) you provided in the configuration file.
* Note: From StarRocks v3.4.1 onwards, the default value for this parameter is false. Therefore, you must explicitly set it to true in your FE configuration if you want this automated behavior.
2. Is it automatically used for new databases?
Yes. When this built-in volume is created, StarRocks automatically sets it as the Default Storage Volume for the cluster. In Shared-Data mode, every database and table needs a storage volume to know where to store data. Since this volume is the default, any CREATE DATABASE or CREATE TABLE statement you run will automatically use this Azure storage path without you needing to specify a STORAGE VOLUME clause in your SQL.
Summary of the Setup
In your StarRocksCluster CRD, ensure your FE config includes:
yaml
spec:
starRocksFeSpec:
config: |
run_mode = shared_data
enable_load_volume_from_conf = true # <--- Add this
cloud_native_storage_type = ADLS2
azure_adls2_endpoint = https://<ACCOUNT>.<http://dfs.core.windows.net|dfs.core.windows.net>
azure_adls2_path = <CONTAINER>/<PREFIX>
# ... rest of your Workload Identity config
Recommendation
* Use true for your first cluster or if you want the "standard" Kubernetes experience where the infrastructure setup is handled by the initial configuration.
* Use false only if you prefer to manually manage storage volumes via SQL (using CREATE STORAGE VOLUME) after the cluster is up, which gives you more control over the volume name but requires an extra manual step before you can create any data.
References
• administration/management/FE_configuration.md
• deployment/shared_data/azure.md
References
• administration/management/FE_configuration.md
• deployment/shared_data/s3.md
• deployment/shared_data/gcs.md
• deployment/shared_data/minio.md