Deploy the circleci-runner helm chart on Azure Kubernetes Service (AKS)
TypeScriptDeploying the CircleCI runner Helm chart on Azure Kubernetes Service (AKS) involves several steps. The process includes creating an AKS cluster, installing the Helm CLI tool, configuring Helm to work with the AKS cluster, and finally deploying the CircleCI runner Helm chart.
Here's how you accomplish this using Pulumi with TypeScript:
Setting Up the AKS Cluster
First, we need to set up an AKS cluster on Azure. The
azure-native
package will be used to provision the cluster, as it provides fine-grained control over Azure resources. Specifically, we'll use theManagedCluster
resource from the package to create our AKS cluster.import * as pulumi from "@pulumi/pulumi"; import * as azure_native from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Create an Azure Resource Group const resourceGroup = new azure_native.resources.ResourceGroup("myResourceGroup", { resourceGroupName: "myResourceGroup", location: "WestUS", // You can choose the appropriate Azure region. }); // Now let's create an AKS cluster using the `ManagedCluster` class. const managedCluster = new azure_native.containerservice.ManagedCluster("myManagedCluster", { resourceGroupName: resourceGroup.name, location: resourceGroup.location, agentPoolProfiles: [{ count: 2, // Number of nodes in the Node Pool. maxPods: 110, mode: "System", name: "agentpool", osType: "Linux", vmSize: "Standard_DS2_v2", // These are basic settings. For a production environment, you might want more nodes, different VM sizes, etc. }], dnsPrefix: "myaks", // Your DNS prefix for the AKS cluster. kubernetesVersion: "1.21.2", // Use a supported version for AKS. }); // To manage Kubernetes resources, we need the kubeconfig of the newly created AKS cluster. const credential = pulumi.all([resourceGroup.name, managedCluster.name]).apply(([rgName, clusterName]) => { return azure_native.containerservice.listManagedClusterUserCredentials({ resourceGroupName: rgName, resourceName: clusterName, }); }); const kubeconfig = credential.apply(creds => { const encoded = creds.kubeconfigs[0].value; if (!encoded) { throw new Error("Kubeconfig was not generated"); } return Buffer.from(encoded, 'base64').toString(); }); // Now, we'll use Pulumi's `kubernetes` provider to connect to the AKS cluster. const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: kubeconfig, });
Installing the CircleCI Runner Helm Chart
After setting up the AKS cluster, we'll use Pulumi’s Kubernetes provider to deploy the CircleCI Runner Helm chart. This involves creating a
Chart
resource from thekubernetes
package.// Deploy CircleCI Runner Helm chart. const circleCiRunnerChart = new k8s.helm.v3.Chart("circleci-runner-chart", { chart: "circleci-runner", version: "0.1.0", // Specify the correct chart version. fetchOpts: { repo: "https://circleci.github.io/circleci-runner-helm", // Use the correct repository URL. }, }, { provider: k8sProvider }); // Export the kubeconfig to access the cluster with kubectl. export const kubeconfigOutput = kubeconfig;
This block defines the Helm chart from the repository where the CircleCI runner chart is located, sets the version to deploy, and associates it with the AKS cluster we created.
Summary
In this TypeScript program:
- We created a new resource group using
azure_native.resources.ResourceGroup
. - We provisioned an AKS cluster using
azure_native.containerservice.ManagedCluster
. - We obtained the
kubeconfig
for the AKS cluster to interact with it using Kubernetes commands. - We established a
kubernetes
provider to interact with the cluster using Pulumi. - We deployed the CircleCI runner Helm chart on the AKS cluster using
k8s.helm.v3.Chart
.
To apply this Pulumi program, you would run
pulumi up
, which will execute the code and provision the resources as defined. Please ensure that you have the Pulumi CLI installed and your Azure credentials configured correctly before running the command.Remember, this code assumes that you are familiar with both Pulumi and Azure. Make sure you review each resource and adjust the configuration to match your needs and the proper Helm chart version for the CircleCI runner.
- We created a new resource group using