Deploy the ts-server helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
ts-server
Helm chart on an Azure Kubernetes Service (AKS) cluster using Pulumi, we first need to provision an AKS cluster. Then we will install the Helm chart into the newly created AKS cluster.Below are the steps we'll follow:
- Set up an AKS cluster.
- Configure kubectl to connect to the newly created AKS cluster.
- Install the
ts-server
Helm chart using Pulumi's Helm package.
Preliminary requirements:
Before running the code, make sure that:
- You have Pulumi CLI installed.
- You have configured the Pulumi CLI to connect to your Azure account.
- You have
kubectl
installed to interact with your AKS cluster.
Let's start with the Pulumi program in TypeScript:
import * as azure from "@pulumi/azure"; import * as k8s from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Step 1: Create an AKS cluster const resourceGroupName = new azure.core.ResourceGroup("aksResourceGroup", { location: "EastUS", // You can choose a different location }); const aksCluster = new azure.containerservice.KubernetesCluster("aksCluster", { resourceGroupName: resourceGroupName.name, location: resourceGroupName.location, defaultNodePool: { name: "aksagentpool", nodeCount: 2, // You can specify the number of nodes as needed vmSize: "Standard_DS2_v2", // You can choose a different VM size }, dnsPrefix: "aksk8s", // Ensure this DNS prefix is unique identity: { type: "SystemAssigned", }, }); // Export the Kubeconfig for the AKS cluster export const kubeconfig = aksCluster.kubeConfigRaw; // Step 2: Using Pulumi to set up kubectl to point at the AKS cluster const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: aksCluster.kubeConfigRaw, }); // Step 3: Install the `ts-server` Helm chart on the AKS cluster const tsServerChart = new k8s.helm.v3.Chart("ts-server-chart", { chart: "ts-server", version: "1.0.0", // Replace with the desired chart version // If your Helm chart is located in a repository, specify `fetchOpts` here: /* fetchOpts: { repo: "http://example.com/helm-charts", }, */ // You can also add values to configure your Helm chart deployment values: { service: { type: "LoadBalancer", }, }, }, { provider: k8sProvider }); // Step 4: Export any desired outputs from the Helm chart export const tsServerServiceIP = tsServerChart .getResourceProperty("v1/Service", "ts-server-chart-ts-server", "status") .apply(status => status.loadBalancer.ingress[0].ip);
Explanation:
-
Resource Group: We create an Azure Resource Group named
aksResourceGroup
which is a logical container for our AKS resources. -
AKS Cluster: The
azure.containerservice.KubernetesCluster
resource defines the AKS cluster. Here,defaultNodePool
specifies the details of the primary node pool used by AKS, such as the size and count of the VMs. -
Kubeconfig: We export the raw kubeconfig string from the AKS cluster. This will be used by kubectl and Pulumi's Kubernetes provider to communicate with the AKS cluster.
-
K8s Provider: The
k8s.Provider
resource is used to configure Pulumi's Kubernetes provider with the kubeconfig of our AKS cluster. -
Helm Chart: The
ts-server-chart
is the Pulumi resource handling the deployment of thets-server
Helm chart. The chart field specifies the name of the chart, and you can specify the version of the chart you wish to deploy.If the Helm chart is hosted in a Helm repository, you can specify
fetchOpts.repo
with the repository URL. Moreover, you can configure your Helm chart with custom values undervalues
. -
Service IP Export: Finally, we are exporting the IP address assigned to the service that gets created by the Helm chart. This IP can be used to access the
ts-server
.
Run this code using the Pulumi CLI by navigating to the directory containing your Pulumi program and running
pulumi up
. This command will provision the AKS cluster and deploy the Helm chart as specified. After completing, the command will output the IP address of thets-server
.