Skip to content

docs(kubernetes-azure-aks): update guide #2862

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 24, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 38 additions & 36 deletions content/docs/02.installation/06.kubernetes-azure-aks.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ title: Kubernetes on Azure AKS with Azure Database and Blob Storage
icon: /docs/icons/azure-aks.svg
---

Deploy Kestra to Azure AKS with Azure Database for PostgreSQL servers as a database backend and Blob Storage as internal storage backend.
Deploy Kestra to Azure AKS with Azure Database for PostgreSQL as the database backend and Blob Storage as the internal storage backend.

## Overview
This guide provides detailed instructions for deploying Kestra to Azure Kubernetes Service (AKS) with Azure Database for PostgreSQL servers as database backend and Blob Storage for internal storage.

**Prerequisites:**
- Basic command line interface skills
- Basic command-line interface (CLI) skills
- Familiarity with Azure AKS, PostgreSQL, Blob Storage, and Kubernetes

## Launch an AKS Cluster
First, login to Azure using `az login`.
First, log in to Azure using `az login`.

Run the following command to create an AKS cluster named `my-kestra-cluster`:

Expand All @@ -28,7 +28,7 @@ az aks create \

Confirm that the cluster is up.

Run the following command to have your kubecontext point to the newly created cluster:
Run the following command to set your kubecontext to the newly created cluster:

```shell
az aks get-credentials --resource-group <resource-group> --name my-kestra-cluster
Expand All @@ -52,21 +52,21 @@ helm install my-kestra kestra/kestra

This first installation relies on a PostgreSQL database running alongside the Kestra server - on a separate pod.

However, for a production-grade installation, we recommend a managed database service such as [Azure Database for PostgreSQL servers](https://azure.microsoft.com/en-gb/products/postgresql/).
For a production-grade installation, we recommend a managed database service such as [Azure Database for PostgreSQL servers](https://azure.microsoft.com/en-gb/products/postgresql/).

**Launch a database using Azure Database for PostgreSQL servers**

1. Go to the [Azure Database for PostgreSQL servers](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.DBforPostgreSQL%2Fservers).
2. Click on `Create Azure Database for PostgreSQL server` (Kestra also supports MySQL, but PostgreSQL is recommended).
3. Choose an appropriate `Subscription` and `Resource Group`.
4. Put an appropriate `Server name` and select the preferred `Region`.
5. Choose the latest `PostgreSQL version`. We recommend version 17.
6. Select the `Workload type` as per your requirement.
7. Choose `Authentication method` as `PostgreSQL authentication only`.
8. Provide an appropriate `Admin username` and `Password`.
9. Click on `Next: Networking`.
10. Select the box for `Allow public access from any Azure service within Azure to this server`.
11. Click on `Review + Create`. Review the configurations and click on `Create`.
2. Click on **Create Azure Database for PostgreSQL server** (Kestra also supports MySQL, but PostgreSQL is recommended).
3. Choose an appropriate **Subscription** and **Resource Group**.
4. Put an appropriate **Server name** and select the preferred **Region**.
5. Choose the latest **PostgreSQL version**. We recommend version 17.
6. Select the **Workload type** as per your requirement.
7. Choose **Authentication method** as **PostgreSQL authentication only**.
8. Provide an appropriate **Admin username** and **Password**.
9. Click on **Next: Networking**.
10. Check the box for **Allow public access from any Azure service within Azure to this server**.
11. Click **Review + Create**. Review the configurations and click **Create**.
12. Wait for the database to be provisioned.

![db_setup1](/docs/administrator-guide/deployment/kubernetes-azure-aks/db_setup1.png)
Expand All @@ -77,9 +77,9 @@ However, for a production-grade installation, we recommend a managed database se

**Create a Kestra database**

1. Go to the database overview page and click on `Databases` from the left side navigation menu.
2. Click on `Add`.
3. Put an appropriate database name and click on `Save` at the top.
1. Go to the database overview page and click on **Databases** from the left-side navigation menu.
2. Click on **Add**.
3. Put an appropriate database name and click **Save** at the top.

**Update Kestra configuration**

Expand All @@ -100,7 +100,8 @@ configuration:
password: <your-password>
```

Also, disable the PostgreSQL pod by changing `enabled` value in the `postgresql` section from `true` to `false` in the same file.
Also, disable the PostgreSQL pod by changing the `enabled` value in the `postgresql` section from `true` to `false` in the same file.

```yaml
postgresql:
enabled: false
Expand All @@ -114,21 +115,21 @@ helm upgrade my-kestra kestra/kestra -f values.yaml

## Prepare an Azure Blob Storage container

By default, Minio pod is being used as storage backend. This section guides you how to change the storage backend to Blob Storage.
By default, Minio pod is being used as storage backend. This section guides you on how to change the storage backend to Blob Storage.

1. Go to the [Storage Accounts](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Storage%2FStorageAccounts).
2. Click on `Create`.
3. Choose an appropriate `Subscription` and `Resource Group`.
4. Put an appropriate `Storage account name` and select the preferred `Region`.
5. Select `Performance` and `Redundancy` as per your requirement.
6. Click on `Review` and post reviewing the configurations, click on `Create`.
7. Click on the newly created storage account.
8. On the storage account overview page, click on the `Containers` from the left side navigation menu.
9. Click on `Create` button at the top to create a new container.
10. Put an appropriate name for the container and click on `Create`. A new container will be created.
11. Now, click on `Access keys` from the left side navigation menu.
12. For one of the keys, either key1 or key2, click on `Show` for the `Connection string` and click on `Copy to clipboard` button.
13. Note down the connection string with you. We will require this for configuring the storage backend.
2. Click on **Create**.
3. Choose an appropriate **Subscription** and **Resource Group**.
4. Put an appropriate **Storage account name** and select the preferred **Region**.
5. Select **Performance** and **Redundancy** as per your requirement.
6. Click **Review** and post reviewing the configurations, click **Create**.
7. Click the newly created storage account.
8. On the storage account overview page, click the **Containers** from the left-side navigation menu.
9. Click **Create** at the top to create a new container.
10. Put an appropriate name for the container and click **Create**. A new container will be created.
11. Now, click **Access keys** from the left-side navigation menu.
12. For one of the keys, either key1 or key2, click **Show** for the **Connection string** and click the **Copy to clipboard** button.
13. Make a note of the connection string for later use. We will require this for configuring the storage backend.
14. Add Blob Storage configuration in the [Helm chart's values](https://github.com/kestra-io/helm-charts/blob/master/charts/kestra/values.yaml#L11) like in the following example:

```yaml
Expand All @@ -143,6 +144,7 @@ configuration:
```

Also, disable the MinIO pod by changing the `enabled` value in the `minio` section from `true` to `false` in the same file.

```yaml
minio:
enabled: false
Expand All @@ -157,7 +159,7 @@ helm upgrade my-kestra kestra/kestra -f values.yaml
## Access Kestra UI

::alert{type="info"}
Note that you will have to create an [Application Gateway in Azure](https://portal.azure.com/#view/Microsoft_Azure_Network/LoadBalancingHubMenuBlade/~/applicationgateways) for creating an ingress controller.
Note: You must create an [Application Gateway in Azure](https://portal.azure.com/#view/Microsoft_Azure_Network/LoadBalancingHubMenuBlade/~/applicationgateways) for creating an ingress controller.
::

Implement an ingress controller for access. You can install AKS Load Balancer Controller via Helm:
Expand All @@ -176,10 +178,10 @@ helm install aks-load-balancer-controller application-gateway-kubernetes-ingress
--set aksClusterConfiguration.apiServerAddress=<aks-server-address>
```

Once the load balancer is set, you can access the Kestra UI through the ALB URL.
Once the load balancer is deployed, you can access the Kestra UI through the ALB URL.

## Next steps

This guide walked you through installing Kestra to [Azure AKS](https://learn.microsoft.com/en-us/azure/aks/) with Azure Database for PostgreSQL as database and Blob Storage as storage backend.
This guide walked you through installing Kestra to [Azure AKS](https://learn.microsoft.com/en-us/azure/aks/) with Azure Database for PostgreSQL as the database and Blob Storage as the storage backend.

Reach out via [Slack](/slack) if you encounter any issues or if you have any questions regarding deploying Kestra to production.
Reach out via [Slack](/slack) if you encounter any issues or have any questions regarding deploying Kestra to production.