Deploy the pg-db helm chart on Azure Kubernetes Service (AKS)
TypeScriptDeploying a PostgreSQL database using a Helm chart onto an Azure Kubernetes Service (AKS) cluster involves several steps. You'll need to provision an AKS cluster first, then deploy the Helm chart to the cluster. Below we will walk through this process using Pulumi in TypeScript.
Provision an Azure Kubernetes Service (AKS) Cluster
We'll start by provisioning an AKS cluster. To do this, we use
azure-native
resources which provide native Azure provider support with Pulumi. For this example, make sure you have the necessary Azure credentials configured for Pulumi to use.-
ProvisionedCluster: This resource represents an AKS cluster in Azure. We'll configure properties like node count, VM size, and Kubernetes version here.
-
Identity: AKS can use Azure AD for identity services. So, you may wish to configure an identity for your cluster. Here we use a SystemAssigned identity for simplicity.
-
AgentPool: This represents the node pool for the AKS cluster where your workloads will run. You can configure the size of nodes and the number of nodes in the pool.
Deploy a Helm Chart to AKS
Once the AKS cluster is up and running, we will deploy the PostgreSQL (
pg-db
) Helm chart.- Chart: This resource represents a Helm chart deployment in Kubernetes. Pulumi's Kubernetes provider can deploy charts from a Helm repository, or from a local path if the Chart is packaged locally.
We use the
kubernetes
provider to interact with AKS to deploy resources to it, which includes the Helm chart in this case.Let's put it all together with the program below, which will create the AKS cluster and then deploy the PostgreSQL database using the Helm chart:
import * as pulumi from "@pulumi/pulumi"; import * as azure_native from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Create an AKS cluster const aksCluster = new azure_native.containerservice.ManagedCluster("aksCluster", { // Make sure to provide the appropriate location and resource group name location: "East US", resourceGroupName: "pulumi-aks-rg", agentPoolProfiles: [{ count: 3, maxPods: 110, name: "aksagentpool", osDiskSizeGB: 30, osType: "Linux", vmSize: "Standard_DS2_v2", }], // A AKS-managed Azure AD integration (optional) identity: { type: "SystemAssigned", }, dnsPrefix: "pulumi-aks-kube", kubernetesVersion: "1.18.14", }); // Export the AKS cluster kubeconfig. export const kubeconfig = aksCluster.kubeConfig; // Create a Kubernetes provider instance that uses the AKS cluster's kubeconfig. const k8sProvider = new k8s.Provider("aksK8s", { kubeconfig: aksCluster.kubeConfig.apply(JSON.stringify), }); // Use the Helm Chart resource to deploy PostgreSQL const pgDbChart = new k8s.helm.v3.Chart("pg-db-chart", { chart: "postgresql", version: "9.1.2", // Specify the version of the Chart to use fetchOpts: { repo: "https://charts.bitnami.com/bitnami", }, }, { provider: k8sProvider }); // Export the Helm chart deployment status export const postgresStatus = pgDbChart.status;
Explanation
-
We use
ManagedCluster
from@pulumi/azure-native/containerservice
to create the AKS cluster. Replace the values oflocation
andresourceGroupName
with your actual Azure resource group details. -
agentPoolProfiles
array configures the AKS VM size, node count, and other properties related to the VMs where your Kubernetes workloads will run. -
The
kubeconfig
is exported so you can easily access your cluster withkubectl
or other Kubernetes tools. -
We then instantiate a Kubernetes provider by passing our
kubeconfig
to@pulumi/kubernetes
which allows Pulumi to interact with our newly created AKS cluster. -
Finally, we use the
Chart
class from@pulumi/kubernetes/helm/v3
to deploy thepostgresql
Helm chart from Bitnami's chart repository. Make sure to specify the correct version of the chart you want to deploy.
What's Next?
Once you've got this program set up, you can run it using the Pulumi CLI:
- Initialize a new Pulumi project in your preferred language.
- Install the necessary Pulumi packages for Azure and Kubernetes.
- Save the code in an
index.ts
file. - Run
pulumi up
to preview and deploy the changes.
Remember, if you want to interact with your AKS cluster using
kubectl
, Pulumi can export the generatedkubeconfig
file. Also, don't forget to check the AKS documentation and the Helm chart resource documentation for an in-depth understanding of the parameters and functionality available.-