Deploy the helm-state-metrics helm chart on Google Kubernetes Engine (GKE)
TypeScriptTo deploy the
helm-state-metrics
Helm chart on a Google Kubernetes Engine (GKE) cluster using Pulumi, we need to perform a few high-level steps:-
Create a GKE Cluster: First, we'll set up a GKE cluster, which will act as the Kubernetes environment where our Helm chart will be deployed.
-
Deploy the Helm Chart: Once the cluster is ready, we'll deploy the
helm-state-metrics
chart to the GKE cluster.
Let's break down these steps into Pulumi code. We'll use the following Pulumi resources:
google-native.container/v1beta1.Cluster
: To create the GKE cluster.kubernetes.helm.sh/v3.Release
: To deploy the Helm chart on our GKE cluster.
Here's a Pulumi program written in TypeScript to achieve our goal:
import * as pulumi from "@pulumi/pulumi"; import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes"; const projectName = pulumi.getProject(); const config = new pulumi.Config(); // Step 1: Creating a GKE cluster const gkeCluster = new gcp.container.Cluster("helm-state-metrics-gke-cluster", { initialNodeCount: 1, // Define the machine type and other node configuration nodeConfig: { machineType: "n1-standard-1", // or any other preferred type oauthScopes: [ "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } }); // Step 2: Deploying the Helm chart const k8sProvider = new k8s.Provider("k8s-provider", { kubeconfig: gkeCluster.kubeConfigRaw, }); const helmRelease = new k8s.helm.v3.Release("helm-state-metrics", { chart: "helm-exporter", repositoryOpts: { repo: "https://prometheus-community.github.io/helm-charts", }, version: "0.1.1", // Specify the version of the chart you wish to deploy }, { provider: k8sProvider }); // Export the Kubeconfig and Helm Release status export const kubeConfig = gkeCluster.kubeConfigRaw; export const helmReleaseStatus = helmRelease.status;
Explanation
-
GKE Cluster: We start by creating an instance of
gcp.container.Cluster
which creates a GKE cluster. We setinitialNodeCount
to1
, indicating the number of nodes for the GKE cluster. ThenodeConfig
includes machine type and the OAuth scopes necessary for the node instances. -
Helm Release: We then create a
k8s.helm.v3.Release
to deploy thehelm-state-metrics
Helm chart using thekubeconfig
provided by the GKE cluster we just created. -
Exported Outputs: Finally, we export the
kubeConfig
andhelmReleaseStatus
. You can use the kubeconfig to manage your Kubernetes cluster usingkubectl
or other Kubernetes tools.
Next Steps
To run this program:
- Ensure you have Pulumi installed and configured with GCP access.
- Create a new directory, change into it, and run
pulumi new typescript
. - Replace the contents of
index.ts
with the code provided above. - Run
pulumi up
to deploy your GKE cluster and thehelm-state-metrics
Helm chart.
Pulumi will perform the deployment, and once done, you can manage the cluster using the outputted kubeconfig file. Please be aware of GCP costs associated with running resources and the Pulumi Service pricing if you use the Pulumi SaaS backend.
-