Deploy the tt-workflow-driver helm chart on Digital Ocean Kubernetes Service
TypeScriptTo deploy a Helm chart on the Digital Ocean Kubernetes Service using Pulumi, we'll perform a series of steps within our TypeScript program:
- Create a new Kubernetes cluster on DigitalOcean.
- Use the Pulumi Kubernetes provider to deploy a Helm chart onto the cluster.
We'll use the
digitalocean.KubernetesCluster
resource to provision the cluster andkubernetes.helm.v3.Chart
to deploy the Helm chart.Here's a step-by-step program for deploying the
tt-workflow-driver
Helm chart on a Digital Ocean Kubernetes cluster:import * as digitalocean from "@pulumi/digitalocean"; import * as kubernetes from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Step 1: Create a new DigitalOcean Kubernetes cluster const cluster = new digitalocean.KubernetesCluster("do-cluster", { region: "nyc1", version: "latest", // Specify your desired Kubernetes version nodePool: { size: "s-2vcpu-2gb", // Choose the node size that fits your needs name: "default", nodeCount: 2, // Specify the number of nodes in the node pool }, }); // Export the cluster's kubeconfig export const kubeconfig = cluster.kubeConfigs.apply((kc) => kc[0].rawConfig); // Step 2: Deploy a Helm chart onto our DigitalOcean Kubernetes cluster const kubeconfigProvider = new kubernetes.Provider("kubeconfig-provider", { kubeconfig: kubeconfig, }); const helmChart = new kubernetes.helm.v3.Chart("tt-workflow-driver", { chart: "tt-workflow-driver", // You might need to specify a repository URL if the chart is not in the default Helm repo // e.g., repo: "http://charts.example.com/" // If the chart requires custom values, specify them here, for example: // values: { // service: { // type: "ClusterIP", // }, // }, }, { provider: kubeconfigProvider }); // Optionally, if you want to access the chart externally, assuming there's a Service of LoadBalancer type, // you would wait for it to be allocated an external IP and then export that information. // For example: export const frontendIp = helmChart.getResourceProperty("v1/Service", "tt-workflow-driver", "status") .apply(status => status.loadBalancer.ingress[0].ip);
Explanation:
- We started by importing the necessary Pulumi packages for DigitalOcean (
@pulumi/digitalocean
) and Kubernetes (@pulumi/kubernetes
). - We created a Kubernetes cluster on DigitalOcean with the desired region, Kubernetes version, node size, and number of nodes.
- We exported the
kubeconfig
file which contains the credentials to connect to our Kubernetes cluster. - A new Pulumi Kubernetes provider was instantiated to interact with our cluster using the
kubeconfig
. - We then created a new Helm chart resource that targets our DigitalOcean Kubernetes cluster. Make sure you specify any custom values your Helm chart may require.
- Finally, we exported the front-end IP address assuming our Helm chart contained a LoadBalancer service to access the application externally.
Remember to replace
"tt-workflow-driver"
with the correct name of the Helm chart you're using, and you may need to specify therepo
field with an appropriate value if your chart is hosted in a custom Helm repository that is not the default public one.To apply this Pulumi program:
- Ensure you have Pulumi and the necessary cloud CLI tools installed and configured.
- Save this program to a file named
index.ts
. - Run
pulumi up
to execute the Pulumi program that provisions the resources.
This program will create a new Kubernetes cluster on DigitalOcean and deploy the specified
tt-workflow-driver
Helm chart into it. If the Helm chart contains externally accessible services, such as a LoadBalancer, the relevant IP address will be exported for your convenience.