Deploy the thanos-operator helm chart on Kubernetes
TypeScriptTo deploy a Helm chart on Kubernetes using Pulumi, we will use the
Chart
resource from the@pulumi/kubernetes
package. Helm charts are a great way to package and deploy applications on Kubernetes clusters, and Pulumi makes it easy to manage these deployments through Infrastructure as Code.Below is a detailed explanation of a Pulumi program in TypeScript that will deploy the
thanos-operator
Helm chart on a Kubernetes cluster:-
Importing necessary modules: We begin by importing the required Pulumi and Kubernetes modules.
-
Creating a Kubernetes Provider: Although this step isn't required if you're using the default kubeconfig on your local machine, you can explicitly create a provider if you need to target a specific Kubernetes cluster or provide custom configurations.
-
Deploying the Helm Chart: The
Chart
resource from Pulumi Kubernetes is used to deploy a Helm chart to your cluster. You specify the chart name, version (optional), and any custom values you want to pass to the Helm chart in thevalues
property. -
Exporting Outputs: After deployment, you may want to export certain outputs, such as service URLs or other useful information that results from the deployment.
Now, let's see this process in action within the Pulumi program:
import * as k8s from "@pulumi/kubernetes"; // Specify the version of the thanos-operator you want to deploy. If omitted, the latest version will be used. const chartVersion = "x.y.z"; // Replace x.y.z with the desired chart version. // Create the thanos-operator Helm Chart const thanosOperatorChart = new k8s.helm.v3.Chart("thanos-operator", { // The repository where the helm chart is located repo: "thanos-operator-repo", // Replace with the actual repository name, if it is different. chart: "thanos-operator", version: chartVersion, // Values can be provided to customize the Helm chart. values: { // Custom values set here if needed, for example: // image: { repository: "thanos", tag: "latest" }, }, }); // Export relevant outputs that you may want to access or display // For example, you might want to export the name of a Kubernetes service or endpoint export const thanosOperatorName = thanosOperatorChart.getResourceProperty("v1/Service", "thanos-operator", "metadata").apply(m => m.name);
Explanation of the program
In the given program:
- We start by importing the necessary Pulumi Kubernetes package.
- A specific chart version is defined as a constant, which you can update to the version you require.
- Using the
new k8s.helm.v3.Chart
constructor, we create a new instance of thethanos-operator
chart found within a specified Helm repository. Note that you'll need to replace"thanos-operator-repo"
with the actual name of the Helm repository where thethanos-operator
chart is located. - We include a placeholder for custom values (
values
) which you can specify based on your configuration needs. These could be settings related to the image version, resource limits, persistence settings, and more. - Finally, we export a relevant output using the
export const
statement. In this case, we're exporting the name of theService
created by the Helm chart for referencing outside of the Pulumi program. This is an example, and the actual resources created by the Helm chart may vary.
What to do next
- Before running the program, ensure that you have set up your Pulumi project and have configured access to your Kubernetes cluster.
- Install the Pulumi CLI and log in to the Pulumi service where your state will be stored.
- Save the above program in a TypeScript file, for example,
index.ts
. - Deploy your code by running
pulumi up
in the terminal, within the directory containing your Pulumi program. This will prompt you to review the resources that will be created, updated, or deleted.
This process will deploy the
thanos-operator
Helm chart to your Kubernetes cluster, and you can observe the progress and results directly in your terminal. If you want to make any changes to the deployment, you can adjust thevalues
field in the program or update the chart version, then runpulumi up
again.-