Deploy the u4a-component helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy a Helm chart on an Azure Kubernetes Service (AKS) cluster, you generally need to take the following steps:
- Create an AKS cluster or use an existing one.
- Configure your local machine to communicate with the AKS cluster (typically via
kubectl
). - Ensure Helm is installed on your local machine.
- Add the Helm repository that contains the
u4a-component
chart. - Install the
u4a-component
chart using Helm.
Since we are focusing on Pulumi to automate this process, I will show you how to:
- Provision an AKS cluster in Azure using Pulumi's
azure-native
package. - Deploy the
u4a-component
Helm chart to the created AKS cluster using Pulumi'skubernetes
package.
Here's a Pulumi program written in TypeScript that creates an AKS cluster and deploys a Helm chart to it:
import * as pulumi from "@pulumi/pulumi"; import * as azure_native from "@pulumi/azure-native"; import * as kubernetes from "@pulumi/kubernetes"; // Replace these variables with actual values or retrieve them from configuration const environment = "dev"; const location = "WestUS"; const resourceGroupName = `aks-rg-${environment}`; const aksClusterName = `aks-cluster-${environment}`; // Create an Azure Resource Group if it doesn't exist const resourceGroup = new azure_native.resources.ResourceGroup(resourceGroupName, { location, }); // Create an Azure AD application for the AKS cluster const adApp = new azure_native.graphrbac.Application(`aks-app-${environment}`, { displayName: `aksApp${environment}`, }); // Create a service principal for the Azure AD application const adSp = new azure_native.graphrbac.ServicePrincipal(`aks-sp-${environment}`, { applicationId: adApp.applicationId, }); // Create the AKS cluster const aksCluster = new azure_native.containerservice.ManagedCluster(aksClusterName, { resourceGroupName: resourceGroup.name, location, agentPoolProfiles: [{ name: "agentpool", count: 2, vmSize: "Standard_DS2_v2" }], dnsPrefix: `${environment}-aks`, linuxProfile: { adminUsername: "aksuser", ssh: { publicKeys: [{ keyData: "ssh-rsa ...", // replace with your SSH public key }], }, }, servicePrincipalProfile: { clientId: adApp.applicationId, secret: "<client-secret>", // specify the client secret }, // Enable RBAC enableRBAC: true, }); // Export the Kubeconfig export const kubeconfig = pulumi. all([aksCluster.name, resourceGroup.name]). apply(([clusterName, rgName]) => { return aksCluster.name.apply(name => { const creds = pulumi.all([rgName, name]).apply(([rg, cluster]) => azure_native.containerservice.listManagedClusterUserCredentials({ resourceGroupName: rg, resourceName: cluster, }) ); return creds.kubeconfigs[0].value.apply(enc => Buffer.from(enc, 'base64').toString() ); }); }); // Create a Kubernetes provider instance using the generated kubeconfig const k8sProvider = new kubernetes.Provider(`k8sprovider-${environment}`, { kubeconfig: kubeconfig, }); // Deploy the `u4a-component` Helm chart const u4aComponentChart = new kubernetes.helm.v3.Chart(`u4a-component-chart-${environment}`, { chart: "u4a-component", version: "1.2.3", // specify the chart version fetchOpts: { repo: "https://example.com/helm-charts", // specify the Helm chart repository URL }, }, { provider: k8sProvider }); // Export the Kubernetes provider's kubeconfig export const k8skubeconfig = k8sProvider.kubeconfig;
This program performs the following steps:
- It starts by importing dependencies, which include Pulumi SDK, the Azure Native Pulumi package for working with Azure resources, and the Kubernetes Pulumi package for deploying Helm charts.
- Next, it creates a new resource group specific to our environment (in this case,
dev
). - An Azure AD application and service principal for AKS are created. These are used by AKS for interactions with other Azure resources.
- Then it defines an AKS cluster with a default node pool. Note that you should supply your own SSH key and client secret.
- It exports the cluster's
kubeconfig
, which is required for configuring the Kubernetes client (kubectl
) to interact with the AKS cluster. - A Kubernetes provider is set up with the exported
kubeconfig
. This provider is used by Pulumi to communicate with the AKS cluster. - Finally, it uses the Helm (v3) component in Pulumi to deploy the
u4a-component
Helm chart to the AKS cluster, specifying the chart version and Helm repository. - It exports a
kubeconfig
from the Kubernetes provider, if you need to interact with your AKS cluster usingkubectl
directly.
To use this Pulumi program:
- Replace
<client-secret>
and the SSH public key data with your own. - If the
u4a-component
Helm chart is hosted at a different location, update the repository URL. - You might also want to customize the AKS cluster parameters such as its name, node size, and count per your requirements.
- Run
pulumi up
to deploy these resources. Pulumi will automatically handle the dependency chaining.
Make sure you have Azure CLI and Pulumi CLI installed and logged in.