Deploy the drain-node-on-crash helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
drain-node-on-crash
Helm chart on an Azure Kubernetes Service (AKS) cluster using Pulumi, we will follow these steps:-
Create an AKS Cluster: We will use the
ProvisionedCluster
resource from theazure-native
package to create a new AKS cluster within a specified resource group. -
Integrate Kubernetes Configuration: Using the
SourceControlConfiguration
resource, we can manage Kubernetes configurations within the AKS clusters. This resource allows us to apply configurations automatically across the cluster, which includes deploying our desired Helm chart. -
Deploy Helm Chart using Kubernetes Configuration: After setting up the AKS cluster and SourceControlConfiguration, the next step will be to define the Helm chart's configuration that we want to apply to the cluster.
Let's go ahead and set up the Pulumi program in TypeScript to accomplish these steps:
import * as pulumi from "@pulumi/pulumi"; import * as azureNative from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Create a new resource group if one doesn't exist const resourceGroupName = "aksResourceGroup"; const resourceGroup = new azureNative.resources.ResourceGroup(resourceGroupName, { resourceGroupName: resourceGroupName, }); // Create the AKS cluster const aksCluster = new azureNative.containerservice.ManagedCluster(`${resourceGroupName}-aks`, { // Replace below with your actual configuration details resourceGroupName: resourceGroup.name, location: resourceGroup.location, agentPoolProfiles: [{ count: 1, maxPods: 110, mode: "System", name: "agentpool", osDiskSizeGB: 30, osType: "Linux", vmSize: "Standard_DS2_v2", }], dnsPrefix: pulumi.interpolate`${resourceGroupName}-kube`, kubernetesVersion: "1.18.14", linuxProfile: { adminUsername: "adminuser", ssh: { publicKeys: [{ keyData: "<SSH-RSA PUBLIC KEY>", }], }, }, // Enable RBAC enableRBAC: true, }); // Use the AKS cluster's kubeconfig for subsequent resources const kubeconfig = aksCluster.kubeConfigRaw; // Create a Kubernetes provider instance with the kubeconfig from the AKS cluster const k8sProvider = new k8s.Provider(`k8sprovider`, {kubeconfig}); // Deploy the drain-node-on-crash Helm chart const helmRelease = new k8s.helm.v3.Release("drain-node-on-crash", { name: "drain-node-on-crash", // Name of the Helm release repositoryOpts: { repo: "https://example.com/helm-charts", // URL of your Helm chart repository }, chart: "drain-node-on-crash", // The name of the chart in your repository // Specify the version of Helm chart if necessary valueYamlFiles: [ new pulumi.asset.AssetArchive({ "values.yaml": new pulumi.asset.StringAsset(` # Place the desired values here `) }), ], }, {provider: k8sProvider}); // When pulumi up is run, Pulumi will now create the AKS cluster, // configure the Kubernetes provider and deploy the Helm chart using the AKS cluster's kubeconfig. // Export the kubeconfig and the cluster's name export const kubeconfigOutput = kubeconfig; export const clusterName = aksCluster.name;
Details of the Pulumi Program:
- The
azureNative.resources.ResourceGroup
creates a new resource group to host all resources. - The
azureNative.containerservice.ManagedCluster
creates an AKS cluster. You must replace the placeholder<SSH-RSA PUBLIC KEY>
with your actual SSH public key, which provides access to the cluster nodes. - The
kubeconfig
variable holds the kubeconfig of the created AKS cluster, which is required to deploy resources to the cluster. - The
k8s.Provider
is a Kubernetes provider resource that uses the AKS cluster's kubeconfig to deploy Kubernetes resources. - The
k8s.helm.v3.Release
resource represents the Helm chart deployment. The actual Helm repository URL needs to replacehttps://example.com/helm-charts
. - The
valuesYamlFiles
property allows you to provide a customizedvalues.yaml
file with specific settings for the Helm chart if needed.
Running the Program:
To run this program, you need to have Pulumi CLI installed and configured for use with Azure. Then, save the above code in a file named
index.ts
, install the necessary dependencies in your Pulumi project usingnpm
oryarn
, and runpulumi up
to launch the resources.-