Deploy the fluentd-kubernetes helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
fluentd-kubernetes
Helm chart on Azure Kubernetes Service (AKS), we need to follow these steps:- Provision an AKS cluster: We'll use the
ProvisionedCluster
resource from theazure-native
package. - Install Helm chart: For deploying Helm charts, the
helm.v3.Chart
resource from thepulumi/kubernetes
package will be used.
Below is a Pulumi program that demonstrates how to do this. The program is in TypeScript, a strongly typed JavaScript superset, which is one of the supported languages for Pulumi.
The program is divided into three major parts:
- Importing the required packages.
- Creating an AKS cluster.
- Deploying the
fluentd-kubernetes
Helm chart on the created AKS cluster.
import * as azure from '@pulumi/azure-native'; import * as pulumi from '@pulumi/pulumi'; import * as k8s from '@pulumi/kubernetes'; // Create an Azure Resource Group const resourceGroup = new azure.resources.ResourceGroup("resourceGroup"); // Create an AKS cluster const aksCluster = new azure.containerservice.ManagedCluster("aksCluster", { resourceGroupName: resourceGroup.name, agentPoolProfiles: [{ count: 2, maxPods: 110, mode: "System", name: "agentpool", osDiskSizeGB: 30, osType: "Linux", vmSize: "Standard_DS2_v2", }], dnsPrefix: `${pulumi.getStack()}-kube`, enableRbac: true, kubernetesVersion: "1.20.7", linuxProfile: { adminUsername: "adminuser", ssh: { keys: [{ keyData: "<SSH PUBLIC KEY>", // SSH Key for node VMs access, replace <SSH PUBLIC KEY> with your SSH public key. }], }, }, nodeResourceGroup: `MC_${resourceGroup.name}_aksCluster_${resourceGroup.location}`, servicePrincipalProfile: { clientId: "<AZURE_CLIENT_ID>", // Azure AD app registration Client ID, replace <AZURE_CLIENT_ID> with your registered application Client ID. secret: "<AZURE_CLIENT_SECRET>", // Azure AD app registration Client Secret, replace <AZURE_CLIENT_SECRET> with your registered application Secret. }, }); // Get the AKS cluster's kubeconfig const creds = pulumi.all([aksCluster.name, resourceGroup.name]).apply(([name, rg]) => { return azure.containerservice.listManagedClusterUserCredentials({ resourceGroupName: rg, resourceName: name, }); }); const kubeconfig = creds.kubeconfigs[0].value.apply(c => Buffer.from(c, 'base64').toString()); // Create Kubernetes provider based on the generated kubeconfig const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: kubeconfig, }); // Deploy the fluentd-kubernetes Helm chart const fluentdChart = new k8s.helm.v3.Chart("fluentd-helm", { chart: "fluentd", version: "1.7.2", fetchOpts: { repo: "https://fluent.github.io/helm-charts", }, }, { provider: k8sProvider }); // Export the kubeconfig export const kubeConfigOutput = kubeconfig;
Let's break this down:
- Resource Group: A resource group is a container that holds related resources for an Azure solution. We create a new one to hold the AKS cluster.
- Managed Cluster: This is the AKS cluster. It specifies configuration details such as the number of nodes, VM sizes, and the Kubernetes version.
- SSH key: This allows you secure access to your Kubernetes nodes. You need to replace
<SSH PUBLIC KEY>
with your actual SSH public key. - Service Principal: AKS uses a service principal to interact with Azure APIs. Replace
<AZURE_CLIENT_ID>
and<AZURE_CLIENT_SECRET>
with the credentials from your Azure AD application.
- SSH key: This allows you secure access to your Kubernetes nodes. You need to replace
- Kubeconfig: After the cluster is created, we retrieve the kubeconfig that you use to interact with your cluster through kubectl.
- Kubernetes Provider: We create a Pulumi Kubernetes provider with the kubeconfig obtained from AKS. This allows us to deploy Kubernetes resources on the cluster.
- Fluentd Helm Chart: We deploy the
fluentd-kubernetes
Helm chart using the Kubernetes provider. The chart is fetched from the given repository URL and installed into the AKS cluster.
Remember to replace placeholders with real values like
<SSH PUBLIC KEY>
,<AZURE_CLIENT_ID>
, and<AZURE_CLIENT_SECRET>
with your actual data.To run this Pulumi program, save the code in an
index.ts
file, ensure you have Pulumi installed and the Azure CLI authenticated, and then executepulumi up
in the terminal.This script will output the kubeconfig that you can use with
kubectl
to interact with your AKS cluster.- Provision an AKS cluster: We'll use the