Deploy the devlake helm chart on Azure Kubernetes Service (AKS)
TypeScriptDeploying a Helm chart on Azure Kubernetes Service (AKS) using Pulumi involves several steps. We need to first create an AKS cluster and then deploy the Helm chart onto that cluster.
Creating an AKS Cluster
To begin, we will create an AKS cluster using resources from the
azure-native
package. TheProvisionedCluster
resource represents an AKS cluster in Azure.Setting up Helm Deployment
Once we have our Kubernetes cluster, we can proceed to deploy the Helm chart. We use the
Chart
resource from thekubernetes
package to deploy thedevlake
Helm chart onto our AKS cluster.Below is the TypeScript program to achieve this:
import * as pulumi from '@pulumi/pulumi'; import * as azure_native from '@pulumi/azure-native'; import * as k8s from '@pulumi/kubernetes'; // Step 1: Create an AKS cluster const resourceGroup = new azure_native.resources.ResourceGroup('rg', { resourceGroupName: 'myResourceGroup', location: 'EastUS', // Choose the appropriate location }); const cluster = new azure_native.containerservice.ManagedCluster('aksCluster', { resourceGroupName: resourceGroup.name, agentPoolProfiles: [{ count: 2, // Set the number of nodes you wish to have in your AKS cluster maxPods: 110, mode: "System", name: "agentpool", osType: "Linux", vmSize: "Standard_DS2_v2", // A standard VM size for AKS }], dnsPrefix: 'myAKSCluster', kubernetesVersion: '1.20.9', location: resourceGroup.location, resourceGroupName: resourceGroup.name, }); // Step 2: Use the K8s provider to interact with the AKS cluster const k8sProvider = new k8s.Provider('k8sProvider', { kubeconfig: cluster.kubeConfigRaw, }); // Step 3: Deploy the Helm chart to the AKS cluster const devlakeChart = new k8s.helm.v3.Chart('devlakeChart', { chart: 'devlake', // Assuming 'devlake' is published in a Helm repository, specify its URL // If it's not in a Helm repo, you can set the 'path' field to the local chart directory fetchOpts: { repo: 'http://<helm-repo-url>/', }, // Specify any custom values for the Helm chart, if necessary // values: { ... }, }, { provider: k8sProvider }); // Export the kubeconfig to enable interacting with the AKS cluster export const kubeconfig = cluster.kubeConfigRaw;
Explanation
-
We start by importing the required Pulumi packages.
-
Then, we create a resource group in Azure using
azure_native.resources.ResourceGroup
, which acts as a logical container for the AKS resources. -
We define the AKS cluster configuration with
azure_native.containerservice.ManagedCluster
, specifying details such as the number and size of nodes, the OS type, and the Kubernetes version we want to deploy. -
With the help of the
@pulumi/kubernetes
library, we create ak8s.Provider
instance which allows us to interact with the AKS cluster using thekubeconfig
obtained from the cluster resource. -
We deploy the
devlake
Helm chart using thek8s.helm.v3.Chart
resource. The chart is specified by name, and the repository from where it can be fetched is provided. -
Finally, we export the kubeconfig of the cluster which you may use to interact with your cluster using kubectl or any Kubernetes dashboard.
Replace placeholders like
<helm-repo-url>
with the actual information for your Helm chart sources.To apply this program, save it in a file named
index.ts
, and then runpulumi up
from your command line in the same directory as the file. This will initiate the provisioning of the AKS cluster and, once successful, the deployment of thedevlake
Helm chart onto the cluster.-