Deploy the prometheus-beanstalkd-exporter helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the Prometheus-Beanstalkd-Exporter Helm chart on Azure Kubernetes Service (AKS), we will follow these steps:
- Set up an AKS cluster using Pulumi's Azure Native provider.
- Configure
kubectl
to communicate with the AKS cluster. - Use Pulumi's Helm release resource to deploy the Prometheus-Beanstalkd-Exporter chart to the AKS cluster.
Before writing the program, ensure you have the following prerequisites in place:
- Pulumi CLI installed and configured for use with Azure.
- An Azure account with the appropriate permissions to create resources.
- Azure CLI installed and logged into your Azure account.
Here's the TypeScript program to create an AKS cluster and deploy the Helm chart:
import * as azure from "@pulumi/azure"; import * as azuread from "@pulumi/azuread"; import * as pulumi from "@pulumi/pulumi"; import * as k8s from "@pulumi/kubernetes"; // Create an Azure Resource Group const resourceGroup = new azure.core.ResourceGroup("aksResourceGroup", { location: "East US", // You can change the location according to your preference }); // Create an Azure AD service principal for the AKS cluster const adApp = new azuread.Application("aks"); const adSp = new azuread.ServicePrincipal("aksSp", {applicationId: adApp.applicationId}); const adSpPassword = new azuread.ServicePrincipalPassword("aksSpPassword", { servicePrincipalId: adSp.id, endDate: "2099-01-01T00:00:00Z", }); // Create an AKS cluster const k8sCluster = new azure.containerservice.KubernetesCluster("aksCluster", { resourceGroupName: resourceGroup.name, location: resourceGroup.location, agentPoolProfiles: [{ count: 2, maxPods: 110, mode: "System", name: "agentpool", osDiskSizeGb: 30, osType: "Linux", vmSize: "Standard_DS2_v2", vnetSubnetId: null, // If you have an existing VNet/Subnet you would like to attach, pass the ID of subnet here }], dnsPrefix: "aksCluster", linuxProfile: { adminUsername: "aksuser", sshKeys: [{keyData: "ssh-rsa ..."}], // replace ... with your SSH public key }, servicePrincipal: { clientId: adApp.applicationId, clientSecret: adSpPassword.value, }, kubernetesVersion: "1.18.14", roleBasedAccessControl: {enabled: true}, networkProfile: { networkPlugin: "azure", serviceCidr: "10.10.0.0/16", dnsServiceIp: "10.10.0.10", dockerBridgeCidr: "172.17.0.1/16", }, }, {dependsOn: [adApp, adSp, adSpPassword]}); // Export the cluster kubeconfig export const kubeconfig = pulumi.all([k8sCluster.name, resourceGroup.name]).apply(([name, rgName]) => { return azure.containerservice.getKubeConfig({ name: name, resourceGroupName: rgName, }).then(kubeconfig => kubeconfig.kubeconfigs[0].value); }); // Create a Kubernetes provider instance that uses our cluster from above. const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: kubeconfig, }); // Deploy the prometheus-beanstalkd-exporter Helm chart const prometheusBeanstalkdExporter = new k8s.helm.v3.Chart("prometheusBeanstalkdExporter", { chart: "prometheus-beanstalkd-exporter", // Specify the Helm repository here. This example assumes you have the chart available from a known Helm repo. // You may need to add the repository with `helm repo add` command or specify repositoryOpts in ChartArgs. fetchOpts: { repo: "https://helm-repo.example.com/charts", }, version: "1.0.0", // Specify the version of the chart you want to deploy values: { // Configure your Helm chart values here, such as replica count or image versions. }, }, {provider: k8sProvider}); // Export the Prometheus-Beanstalkd-Exporter service endpoint export const beanstalkdExporterEndpoint = prometheusBeanstalkdExporter.getResource("v1/Service", "default", "prometheus-beanstalkd-exporter").status.apply(status => status.loadBalancer.ingress[0].ip);
Let's break down what the program is doing:
-
Resource Group: We create an Azure resource group that will contain our AKS cluster and related resources.
-
Service Principal: An Azure Active Directory (AD) service principal is created for the Kubernetes cluster to interact with other Azure services on your behalf. The
azuread.Application
,azuread.ServicePrincipal
, andazuread.ServicePrincipalPassword
resources are involved here. -
AKS Cluster: Using the
azure.containerservice.KubernetesCluster
resource, we define the characteristics of our AKS cluster, such as the size of the nodes and the version of Kubernetes. -
Kubeconfig Export: We export the kubeconfig, which will allow
kubectl
and Pulumi's Kubernetes provider to interact with the cluster. -
Kubernetes Provider: This is a Pulumi provider that allows us to deploy Kubernetes resources onto the AKS cluster. It uses the exported kubeconfig from the cluster we created.
-
Helm Chart Release: Finally, we deploy the Prometheus-Beanstalkd-Exporter by