Deploy the node-web-app helm chart on Kubernetes
TypeScriptDeploying a Helm chart on a Kubernetes cluster using Pulumi involves a few key steps:
-
Setting up the Pulumi Project: Before you start with the actual deployment code, you'll need to set up a Pulumi project and install the necessary dependencies.
-
Accessing the Kubernetes Cluster: Pulumi will need to have access to your Kubernetes cluster. This typically involves setting up a kubeconfig file with the correct credentials.
-
Writing the Pulumi Code: The Pulumi program will define the deployment using the Kubernetes provider and appropriate resources. Since you're asking to deploy a Helm chart, we'll use the
Chart
resource from the@pulumi/kubernetes/helm/v3
package. -
Applying the Deployment: Once you've written the code, you can use the Pulumi CLI to apply the deployment to your cluster.
Below you'll find a program that deploys the
node-web-app
Helm chart onto a Kubernetes cluster. This assumes the Helm chart is publicly available or in a repository that your Kubernetes cluster can access. If the Helm chart is in a private repository, you'll need to provide additional information such as repository credentials.Detailed Explanation
First, you'll want to import the necessary Pulumi and Kubernetes packages. The
@pulumi/kubernetes
package is used to interact with Kubernetes resources, and the helm part of that package (@pulumi/kubernetes/helm/v3
) lets us work with Helm charts.For this example, we'll assume that the
node-web-app
is either a known Helm chart in a public repository or a local chart that you have access to. If it's in a public repository, you can specify the repository URL. If it's a local chart, you would specify the path where the Helm chart is located on your local filesystem.You'll also see that a
namespace
is specified, which is where the Helm chart will be deployed. If you want the Helm chart to install in a different namespace, change thenamespace
value accordingly.Here's the program:
import * as k8s from "@pulumi/kubernetes"; const projectName = "node-web-app-helm-deploy"; const projectVersion = "1.0.0"; // Below you can set the namespace and the chart values const namespace = "default"; // Kubernetes namespace where to deploy const chartValues = { service: { type: "LoadBalancer", }, }; // Deployment of the Helm chart. const nodeWebAppChart = new k8s.helm.v3.Chart("node-web-app-helm", { chart: "node-web-app", // The name of the chart version: projectVersion, // Specify the version of the chart here if needed namespace: namespace, values: chartValues, }, { provider: k8sProvider }); // Export the IP of the deployed service, so you can access the Node Web App export const nodeWebAppServiceIP = nodeWebAppChart.getResourceProperty( "v1/Service", "node-web-app-helm-node-web-app", "status" ).apply(status => status.loadBalancer.ingress[0].ip);
The
nodeWebAppChart
constant is created as a new Helm chart resource, which will tell Pulumi to deploy the Helm chart when you run the program. We've specified somechartValues
, which can be used to customize the deployment.To find the chart values you want to set, you can look at the
values.yaml
file included with the Helm chart or consult the documentation for the chart you're deploying.The
export
statement at the end will give us the public IP address of the service, assuming you've set the service type toLoadBalancer
. This IP address is how you will access your Node Web App running in your Kubernetes cluster once the deployment is complete.Finally, run the Pulumi program using the Pulumi CLI with the following commands:
pulumi up
This command initiates the deployment. Pulumi will provide a preview of the changes and prompt for confirmation before proceeding.
Note
If you are using a private Helm chart repository or the chart requires specific custom values, you will need to adjust the
Chart
resource properties accordingly. You might pass additional properties likerepo
which specifies the Helm chart repository URL, or you might have different custom values that need to be set forchartValues
.-