Deploy the mydannyapp helm chart on Digital Ocean Kubernetes Service
TypeScriptDeploying a Helm chart to a Digital Ocean Kubernetes Service (DOKS) cluster using Pulumi involves multiple steps:
- Set up a new Digital Ocean Kubernetes Cluster: Provision a new DOKS cluster where the Helm chart will be deployed.
- Install the Helm Chart: Once the cluster is ready, use the Pulumi Kubernetes provider to install the
mydannyapp
Helm chart onto the cluster.
The resources we will use for this are:
digitalocean.KubernetesCluster
: to create the Kubernetes cluster on Digital Ocean.kubernetes.helm.sh/v3.Chart
: to deploy the Helm chart onto the Kubernetes cluster.
Here is a walkthrough on how to use Pulumi with TypeScript to perform this deployment:
Step 1: Install Pulumi
Ensure that you have Pulumi installed on your system and you have set up the Digital Ocean provider with the necessary credentials configured.
Step 2: Create a new Pulumi TypeScript project
Create a new directory for your Pulumi project and switch to it:
mkdir my-dannyapp-deployment cd my-dannyapp-deployment
Then, run
pulumi new typescript
and follow the prompts.Step 3: Define the Deployment
Let's start by creating a new file named
index.ts
and adding our deployment code to it. I'll explain each part of the code as we go along:import * as pulumi from "@pulumi/pulumi"; import * as digitalocean from "@pulumi/digitalocean"; import * as kubernetes from "@pulumi/kubernetes"; // Step 1: Create a Digital Ocean Kubernetes Cluster. const cluster = new digitalocean.KubernetesCluster("my-dannyapp-cluster", { region: "nyc1", // Assuming we want our cluster in the New York 1 region. version: "latest", // Specify the version or use 'latest' nodePool: { name: "node-pool", // Name of the node pool size: "s-1vcpu-2gb", // Size of the nodes (droplets) in the node pool nodeCount: 2, // Number of nodes in the node pool }, }); // Step 2: Deploy the Helm Chart on the Digital Ocean Kubernetes Cluster const helmChart = new kubernetes.helm.v3.Chart("mydannyapp-chart", { chart: "mydannyapp", // Specify the version of your Helm chart if necessary, for example: // version: "1.0.0", fetchOpts: { repo: "http://charts.mycompany.com/", // The URL where your Helm chart is hosted }, }, { provider: new kubernetes.Provider("k8s-provider", { kubeconfig: cluster.kubeConfigs[0].rawConfig }) }); // Export the cluster's kubeconfig and the service's status. export const kubeconfig = cluster.kubeConfigs[0].rawConfig; export const chartStatus = helmChart.status;
Step-by-Step Explanation:
-
Digital Ocean Kubernetes Cluster: First, we create a Kubernetes cluster using the
digitalocean.KubernetesCluster
class from the Digital Ocean Pulumi package. We provide necessary details like the region, Kubernetes version, and specifications for the node pool. -
Deploy Helm Chart: Next, we instantiate a Helm chart using the
kubernetes.helm.v3.Chart
class from the Kubernetes Pulumi package. This requires specifying the name of the chart to deploy (mydannyapp
) and the repository where the Helm chart is located. We also create a Kubernetes provider associated with the Digital Ocean cluster to ensure the Helm chart gets deployed to the correct cluster. The parameterkubeconfig
that we pass tokubernetes.Provider
is the raw Kubernetes configuration string obtained from the Digital Ocean Kubernetes cluster, which tells the provider how to communicate with the cluster. -
Exports: At the bottom of the script, we export the
kubeconfig
and the chart's status from our Pulumi program so we can easily access them after the deployment is completed.
Conclusion:
This Pulumi program will set up a new Digital Ocean Kubernetes cluster and deploy the
mydannyapp
Helm chart to that cluster. To deploy this configuration, save the code toindex.ts
, and runpulumi up
in your project directory. Pulumi will print a preview of the resources that will be created and prompt you to continue with the deployment. After confirming, Pulumi will provision the cluster and deploy the Helm chart.You can find detailed documentation for the
digitalocean.KubernetesCluster
resource here and for thekubernetes.helm.v3.Chart
resource here.