Deploy the zipkin-stackdriver-proxy helm chart on Google Kubernetes Engine (GKE)
TypeScriptTo deploy a Helm chart on Google Kubernetes Engine (GKE) with Pulumi, you need to perform several steps:
-
Create a GKE cluster: Before deploying the Helm chart, you need a running Kubernetes cluster. The GKE cluster will serve as the environment in which your Helm chart application will be deployed.
-
Set up Kubeconfig: To interact with your GKE cluster, you'll need to configure
kubectl
with the proper credentials. Pulumi can retrieve the necessary information to do this for you. -
Deploy the Helm chart: With the GKE cluster running and
kubectl
configured, you can deploy your Helm chart. The Helm chart for thezipkin-stackdriver-proxy
defines the Kubernetes resources needed to run the application.
Let's walk through the detailed Pulumi TypeScript code to perform the deployment.
import * as pulumi from "@pulumi/pulumi"; import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes"; // Step 1: Create a GKE cluster const cluster = new gcp.container.Cluster("gke-cluster", { // Define the properties of your cluster here, like machine type, network, etc. initialNodeCount: 2, minMasterVersion: "latest", nodeVersion: "latest", nodeConfig: { machineType: "n1-standard-1", // Provided as an example, choose an appropriate 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: Set up Kubeconfig 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 `; }); const gkeKubeProvider = new k8s.Provider("gke-kube", { kubeconfig: kubeconfig, }); // Step 3: Deploy the Helm chart const helmChart = new k8s.helm.v3.Chart("zipkin-stackdriver-proxy", { chart: "zipkin-stackdriver-proxy", // Your Helm chart might be in a specific repository, specify it here fetchOpts:{ repo: "http://your-helm-chart-repository/", }, // If you have values you want to override, specify them here values: { // Example of value override // service: { // type: "LoadBalancer" // } }, }, { provider: gkeKubeProvider }); // Export the Kubeconfig and the service endpoint export const kubeconfigOutput = kubeconfig; export const serviceEndpoint = pulumi.interpolate`http://${helmChart.getResourceProperty("v1/Service", "zipkin-stackdriver-proxy", "status").apply(status => status.loadBalancer.ingress[0].ip)}`;
In this program:
- GKE Cluster: We create a GKE cluster using
gcp.container.Cluster
. - Kubeconfig: This configuration is necessary for
kubectl
to communicate with your GKE cluster. Here, we create a kubeconfig file using output properties from our previously created GKE cluster. - Helm Chart Deployment: The
k8s.helm.v3.Chart
class from the Pulumi Kubernetes provider is used to deploy thezipkin-stackdriver-proxy
Helm chart. If this Helm chart requires specific configuration values, you can supply them in thevalues
option.
Lastly, we export the kubeconfig to interact with our cluster using
kubectl
and the service endpoint once it's available.Please note that the
zipkin-stackdriver-proxy
helm chart needs to be available in a Helm repository which you need to specify in thefetchOpts
property. The values override in thevalues
property can be adjusted according to the specific chart's options you wish to customize.Once you deploy this Pulumi program with
pulumi up
, Pulumi will provision all the resources specified and provide you with the Kubeconfig output that you can use to interact with your GKE cluster.-