Deploy the dummy-nginx-html helm chart on Digital Ocean Kubernetes Service
TypeScriptTo deploy a Helm chart on a Digital Ocean Kubernetes (DOKS) cluster using Pulumi, you'll take the following steps:
- Set up a new Pulumi project and configure it for use with TypeScript.
- Install the necessary Pulumi provider packages for DigitalOcean and Kubernetes.
- Create a Kubernetes cluster on DigitalOcean using the
@pulumi/digitalocean
package. - Deploy the
dummy-nginx-html
Helm chart to the DOKS cluster using the@pulumi/kubernetes
package.
Here is a detailed Pulumi program written in TypeScript that accomplishes this:
Start by setting up a new directory for the Pulumi project, initialize it with
pulumi new
, select the TypeScript template, and then install the necessary npm packages:mkdir pulumi-doks-helm cd pulumi-doks-helm pulumi new typescript npm install @pulumi/digitalocean @pulumi/kubernetes
After initializing the project and installing the dependencies, you can write the following TypeScript Pulumi code:
import * as digitalocean from "@pulumi/digitalocean"; import * as kubernetes from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Create a DigitalOcean Kubernetes cluster const cluster = new digitalocean.KubernetesCluster("do-cluster", { region: "nyc3", version: "1.22.5-do.0", nodePool: { size: "s-2vcpu-2gb", name: "default", nodeCount: 2, }, }); // Export the cluster's kubeconfig export const kubeconfig = cluster.kubeConfigs[0].rawConfig; // Use the kubeconfig to create a Provider for deploying Helm charts to the cluster const k8sProvider = new kubernetes.Provider("k8s-provider", { kubeconfig: kubeconfig, }); // Deploy the "dummy-nginx-html" Helm chart using the Provider created above const nginxHelmChart = new kubernetes.helm.v3.Chart("nginx", { chart: "nginx", version: "1.16.0", fetchOpts: { repo: "https://charts.bitnami.com/bitnami", // Replace with the repository that has "dummy-nginx-html" chart }, }, { provider: k8sProvider }); // Export the nginx service's cluster-internal IP export const nginxServiceIp = nginxHelmChart.getResourceProperty("v1/Service", "nginx-nginx", "spec").clusterIP;
In this program:
- A DigitalOcean Kubernetes cluster is created using a specified region, version, and node pool configuration.
- The cluster's kubeconfig is exported for use with kubectl or other Kubernetes tooling.
- A Pulumi Kubernetes Provider is instantiated using the kubeconfig which allows Pulumi to communicate with the DOKS cluster.
- The "dummy-nginx-html" Helm chart (in this example, we're using "nginx" from Bitnami's repo as a placeholder) is deployed to the DOKS cluster using the Pulumi Kubernetes provider.
- The internal IP address of the nginx service created by the Helm chart is exported for reference.
Be sure to replace the
chart
andrepo
parameters with the correct chart name and repository for thedummy-nginx-html
chart you are referring to.To apply this Pulumi program and deploy the Kubernetes cluster and Helm chart:
pulumi up
You will be prompted to confirm the deployment after reviewing the plan. Once confirmed, Pulumi will provision the cluster and deploy the Helm chart according to the code above. After the deployment is complete, you can use the exported
kubeconfig
to manage your Kubernetes cluster withkubectl
or any Kubernetes-compatible tool. ThenginxServiceIp
is the internal IP address of the nginx service, which you can use to communicate with your nginx instance within your cluster.