Deploy the podtato-head helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
podtato-head
Helm chart on Azure Kubernetes Service (AKS), we need to perform several steps using Pulumi. We will write a TypeScript program to accomplish the following:- Create an AKS cluster: To serve as the Kubernetes environment where the
podtato-head
application will run. - Install the Helm chart for
podtato-head
: To deploy the application onto the AKS cluster.
Below is a step-by-step guide and a Pulumi program for setting up AKS and deploying the
podtato-head
Helm chart on it.Step 1: Set up an Azure Resource Group
Before we can create an AKS cluster, we need to have an Azure resource group, which is a container that holds related resources for an Azure solution.
Step 2: Create an AKS cluster
Using Pulumi's Azure Native provider, we will create an AKS cluster within the specified resource group. This AKS cluster will be the foundational infrastructure for deploying our Helm chart.
Step 3: Deploy the Helm chart
Once the AKS cluster is available, we'll use the Helm Chart resource from the Kubernetes provider to deploy the
podtato-head
application. Pulumi allows us to specify the Helm chart directly within our TypeScript program, so the program has everything needed to deploy and manage our application.Let's write the Pulumi program in TypeScript:
import * as azure from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Step 1: Create an Azure Resource Group const resourceGroup = new azure.resources.ResourceGroup("myResourceGroup"); // Step 2: Create the AKS cluster const aksCluster = new azure.containerservice.ManagedCluster("myAksCluster", { resourceGroupName: resourceGroup.name, agentPoolProfiles: [{ count: 2, maxPods: 110, mode: "System", name: "agentpool", osDiskSizeGB: 30, osType: "Linux", vmSize: "Standard_DS2_v2", }], dnsPrefix: pulumi.interpolate`${resourceGroup.name}-kube`, }); // Expose the kubeconfig from AKS Cluster to interact using kubectl const creds = pulumi.all([resourceGroup.name, aksCluster.name]).apply(([resourceGroupName, clusterName]) => azure.containerservice.listManagedClusterUserCredentials({ resourceGroupName: resourceGroupName, resourceName: clusterName, })); const kubeconfig = creds.kubeconfigs[0].value.apply((enc) => Buffer.from(enc, "base64").toString()); // Step 3: Deploy the Helm chart for podtato-head const podtatoHeadChart = new k8s.helm.v3.Chart("podtato-head", { chart: "podtato-head", version: "0.1.1", // Specify the version of the Helm chart. fetchOpts: { repo: "https://helm.sh/docs/examples", // The Helm chart repository. }, }, { provider: new k8s.Provider("k8s-provider", { kubeconfig }) }); // Export the Kubernetes resources and the AKS cluster details export const aksClusterName = aksCluster.name; export const resourceGroupName = resourceGroup.name; export const kubeconfigExport = kubeconfig;
In the code above:
- We first create an Azure Resource Group named
myResourceGroup
which will hold our AKS cluster. - Then we create an AKS cluster named
myAksCluster
within this resource group. It has an agent pool with 2 VMs of sizeStandard_DS2_v2
. - After the cluster is created, we retrieve the kubeconfig which enables us to interact with our AKS cluster using
kubectl
or other Kubernetes tools. - Finally, we deploy the
podtato-head
Helm chart into our AKS cluster. We specify theversion
andrepo
properties to tell Pulumi where to find the Helm chart and which version to use.
After deploying with this Pulumi program, the
podtato-head
service will be running on your AKS cluster and be available for use.Remember to install all required packages with npm before running the Pulumi program:
npm install @pulumi/azure-native @pulumi/kubernetes @pulumi/pulumi
This program requires you to have your Azure account set up with the Pulumi CLI and be authenticated. It is designed to give you a smooth and straightforward experience in infrastructure as code with Pulumi.
- Create an AKS cluster: To serve as the Kubernetes environment where the