Deploy the java-observability helm chart on Google Kubernetes Engine (GKE)
TypeScriptTo deploy the
java-observability
Helm chart on Google Kubernetes Engine (GKE), we will go through a multi-step process. We'll start by creating a GKE cluster, and then we'll proceed to install the Helm chart onto that cluster. For this task, we'll use Pulumi with TypeScript.Firstly, ensure you have the following prerequisites taken care of:
- Pulumi CLI installed
- Google Cloud SDK installed and configured with access to your cloud resources
- Node.js and npm installed to run TypeScript programs
Next, we're going to write a Pulumi program in TypeScript. The following steps are encapsulated in the program:
- Import necessary Pulumi libraries.
- Create a GKE cluster.
- Use the Pulumi Kubernetes provider to interact with the cluster.
- Deploy the
java-observability
Helm chart to the cluster.
Below is a complete TypeScript program to achieve these steps. You'll need to run
npm install
to fetch the necessary Pulumi packages before running this Pulumi program.import * as pulumi from "@pulumi/pulumi"; import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes"; // Create a GKE cluster const cluster = new gcp.container.Cluster("java-observability-cluster", { initialNodeCount: 2, nodeVersion: "latest", minMasterVersion: "latest", nodeConfig: { machineType: "n1-standard-1", // Select an appropriate machine type for your needs 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", ], }, }); // Export the Kubeconfig file const kubeconfig = pulumi. all([cluster.name, cluster.endpoint, cluster.masterAuth]). apply(([name, endpoint, masterAuth]) => { const context = `${gcp.config.project}_${gcp.config.zone}_${name}`; return `apiVersion: v1 clusters: - cluster: certificate-authority-data: ${masterAuth.clusterCaCertificate} server: https://${endpoint} name: ${context} contexts: - context: cluster: ${context} user: ${context} name: ${context} current-context: ${context} kind: Config preferences: {} users: - name: ${context} user: auth-provider: config: cmd-args: config config-helper --format=json cmd-path: gcloud expiry-key: '{.credential.token_expiry}' token-key: '{.credential.access_token}' name: gcp `; }); // Create a Kubernetes provider instance that uses our cluster from above. const clusterProvider = new k8s.Provider("gkeK8s", { kubeconfig: kubeconfig, }); // Deploy the 'java-observability' Helm chart const javaObservabilityChart = new k8s.helm.v3.Chart("java-observability", { chart: "java-observability", version: "1.0.0", // Use the correct chart version fetchOpts: { repo: "<YOUR_HELM_CHART_REPOSITORY_HERE>", // Specify your Helm chart repository URL }, }, { provider: clusterProvider }); // Export the URLs of the service to access the `java-observability` deployment export const javaObservabilityServiceUrls = javaObservabilityChart.getResourceProperty("v1/Service", "java-observability", "status");
In this program:
- We define a new GKE cluster with a specified number of nodes and machine type that suits our needs.
- We export the kubeconfig of the created cluster. This kubeconfig is used to communicate with the cluster.
- We create a Kubernetes provider configured to use our created cluster.
- We then deploy the
java-observability
Helm chart to our cluster using Pulumi's Helm package.
Replace
"<YOUR_HELM_CHART_REPOSITORY_HERE>"
with the actual repository where thejava-observability
Helm chart is hosted.After writing this code in a file named
index.ts
, run the following commands:npm install @pulumi/pulumi @pulumi/gcp @pulumi/kubernetes pulumi up
This will start the deployment process handled by Pulumi. Follow the prompts to preview and confirm the execution of actions. When the command completes, the Helm chart will be deployed to the GKE cluster.
The output
javaObservabilityServiceUrls
will provide you with the URLs to access the deployed services after the Pulumi run. Note that this assumes the services are of a type that provides a URL (like LoadBalancer services).If there are any configurations specific to the Helm chart that need to be set, you can include an
values
argument within theChart
resource where you can specify your values. For example:values: { // ... your chart value overrides here },
Make sure to consult the
java-observability
chart's documentation for specific values you might need to set based on the observability tools and configuration it includes.