Deploy the redpanda-operator helm chart on Azure Kubernetes Service (AKS)
TypeScriptDeploying a Helm chart on an Azure Kubernetes Service (AKS) cluster using Pulumi is a two-step process:
- Provision an AKS cluster: You will first create an AKS cluster where your applications will run.
- Deploy the Helm chart: Once you have an AKS cluster, you can deploy the Helm chart for the redpanda-operator or any other applications.
In the following Pulumi TypeScript program, we will accomplish both steps. We'll start by creating a new AKS cluster, and then we'll deploy the redpanda-operator using the Helm chart.
First, make sure you have the Pulumi CLI installed and you're logged in. You should also have configured your Azure credentials appropriately.
Step 1: Define the AKS Cluster
To define an AKS cluster, we will use the
azure-native
provider, specifically theManagedCluster
resource which represents an AKS cluster.Step 2: Deploy the redpanda-operator Helm Chart
For deploying the Helm chart, we'll use the
Chart
resource from thekubernetes
provider. Note that Pulumi'sChart
resource is a representation of the Helm Chart that should be applied to your cluster.Program Explanation and Code
Below is the Pulumi program that fulfills the goal:
import * as pulumi from "@pulumi/pulumi"; import * as azureNative from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Step 1: Provision an AKS cluster const resourceGroup = new azureNative.resources.ResourceGroup("resourceGroup"); const cluster = new azureNative.containerservice.ManagedCluster("cluster", { resourceGroupName: resourceGroup.name, agentPoolProfiles: [{ count: 3, maxPods: 110, mode: "System", name: "agentpool", osType: "Linux", vmSize: "Standard_DS2_v2", }], enableRBAC: true, dnsPrefix: pulumi.interpolate`${pulumi.getStack()}-kube`, kubernetesVersion: "1.18.14", }); // Export the kubeconfig export const kubeconfig = pulumi.all([cluster.name, resourceGroup.name]).apply(([clusterName, rgName]) => { return azureNative.containerservice.listManagedClusterUserCredentials({ resourceName: clusterName, resourceGroupName: rgName, }).then(creds => { const encoded = creds.kubeconfigs[0].value; return Buffer.from(encoded, 'base64').toString(); }); }); // Step 2: Deploy the redpanda-operator Helm Chart onto the AKS cluster const redpandaChart = new k8s.helm.v3.Chart("redpanda-operator", { chart: "redpanda-operator", version: "0.1.0", // replace with the desired chart version fetchOpts: { repo: "https://charts.vectorized.io/" }, }, { provider: new k8s.Provider("k8s-provider", { kubeconfig }) }); // Export the redpanda-operator Helm chart status export const redpandaOperatorStatus = redpandaChart.status;
Here’s what each part of the program is doing:
- The
azureNative.resources.ResourceGroup
resource creates a new resource group to contain the AKS cluster. azureNative.containerservice.ManagedCluster
creates the AKS cluster itself. We specify the size and number of nodes, enable RBAC, and set the Kubernetes version.kubeconfig
is exported, which contains the configuration needed to connect to your AKS cluster with kubectl.k8s.helm.v3.Chart
represents the helm chart for the redpanda-operator. We specify the chart name and version, and provide the repository URL. We also pass the kubeconfig of the AKS cluster to the Kubernetes provider which is necessary for Pulumi to communicate with our cluster.- Lastly, we export
redpandaOperatorStatus
to reveal the status of the deployed Helm chart.
After executing this program, Pulumi will output the
kubeconfig
you can use to access the cluster and the status of the deployed Helm chart, indicating if it was successful. You can run this program usingpulumi up
, which will execute the deployment.Please ensure the version of the Helm chart specified is the one you want to deploy, you might need to check for the latest versions on the chart repository.