Deploy the pubsub-emulator helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
pubsub-emulator
Helm chart on Azure Kubernetes Service (AKS), you'll need to accomplish several steps using Pulumi:- Provision an AKS cluster where your applications will run.
- Install the Helm chart for the
pubsub-emulator
within the AKS cluster.
For this task, let's break it down into smaller, understandable pieces:
Provisioning the AKS Cluster
Firstly, we need an AKS cluster. In Pulumi, we can define a cluster using the
azure.containerservice.KubernetesCluster
resource. This resource allows us to specify the configurations for an AKS cluster, such as the node size, the number of nodes, and other Kubernetes settings.Installing Helm Chart on AKS
After the AKS cluster is up and running, we'll deploy the
pubsub-emulator
Helm chart onto it. Pulumi provides a Helm chart resource viakubernetes.helm.v3.Chart
. With this resource, you can indicate the Helm chart you wish to deploy (by name and repository or by specifying a local path), as well as any values you want to override.Now, let's put it all together into a Pulumi program written in TypeScript:
import * as azure from "@pulumi/azure"; import * as k8s from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; const name = "pubsub-emulator-aks"; // Step 1: Provision an AKS cluster const resourceGroup = new azure.core.ResourceGroup(`${name}-rg`, { location: "East US", // Choose the appropriate Azure region }); const k8sCluster = new azure.containerservice.KubernetesCluster(`${name}-cluster`, { // Ensure your Pulumi program has the appropriate permissions to create an AKS cluster // and that you have already set up the configuration with `pulumi config set azure:apiKey <YOUR_API_KEY>` resourceGroupName: resourceGroup.name, location: resourceGroup.location, agentPoolProfiles: [{ count: 2, // Specify the desired number of nodes vmSize: "Standard_B2s", // Determine the appropriate VM size }], dnsPrefix: `${pulumi.getStack()}-kube`, // Choose a unique DNS prefix for your cluster linuxProfile: { // Specify an SSH key to use for the Kubernetes nodes adminUsername: "adminuser", sshKeys: [{ keyData: "<YOUR_SSH_PUBLIC_KEY>", // Replace with your SSH public key }], }, servicePrincipal: { // Replace with your own service principal details or set up appropriate configuration clientId: "<YOUR_CLIENT_ID>", clientSecret: "<YOUR_CLIENT_SECRET>", }, }); // Export the cluster's kubeconfig export const kubeconfig = k8sCluster.kubeConfigRaw; // Step 2: Setting up a K8s provider to use the kubeconfig from the newly created AKS cluster const k8sProvider = new k8s.Provider(`${name}-k8sProvider`, { kubeconfig: k8sCluster.kubeConfigRaw, }); // Step 3: Deploy the `pubsub-emulator` Helm chart onto the AKS cluster const pubsubEmulatorChart = new k8s.helm.v3.Chart("pubsub-emulator", { chart: "pubsub-emulator", // Helm chart name version: "0.2.1", // Specify the chart version if necessary fetchOpts: { repo: "https://helm-repo-url/where/chart/is/located", // Replace with the Helm repository URL that hosts the `pubsub-emulator` chart }, }, { provider: k8sProvider, }); // Export any necessary stack outputs export const pubsubEmulatorServiceIP = pubsubEmulatorChart.getResourceProperty( "v1/Service", "pubsub-emulator", "status", "loadBalancer", "ingress", 0, "ip", );
In this program, replace
<YOUR_SSH_PUBLIC_KEY>
,<YOUR_CLIENT_ID>
, and<YOUR_CLIENT_SECRET>
with your actual SSH public key and Azure service principal credentials. Thekubeconfig
output will enable you to interact with your AKS cluster usingkubectl
or other Kubernetes tools once the cluster is provisioned.Furthermore, if
pubsub-emulator
Helm chart has any specific configurations or prerequisites, adjust the values in theChart
resource accordingly to match those requirements. You will also need to replace the placeholder Helm repository URL with the actual URL where thepubsub-emulator
chart can be found.Once you run this Pulumi program with
pulumi up
, it will provision a new AKS cluster and deploy thepubsub-emulator
onto it. The outputpubsubEmulatorServiceIP
will provide you with the external IP address for accessing the deployed Pub/Sub emulator after it's available.