Deploy the kusk-gateway helm chart on Kubernetes
TypeScriptTo deploy the
kusk-gateway
Helm chart on Kubernetes using Pulumi, we'll use thekubernetes.helm.v3.Chart
class from the@pulumi/kubernetes
package. This class allows you to deploy Helm charts into a Kubernetes cluster. A Helm chart is a collection of pre-configured Kubernetes resources that can be deployed as a package. Thekusk-gateway
is presumably such a Helm chart that you want to install on your cluster.Here is a step-by-step guide to deploying the
kusk-gateway
Helm chart:-
Setting Up Your Environment: Before you run this Pulumi program, ensure that you have installed Pulumi and configured it to connect to your Kubernetes cluster. The Kubernetes cluster could be local (like minikube or Docker Desktop) or a managed Kubernetes service provided by a cloud provider (like Amazon EKS, Google GKE, or Microsoft AKS).
-
Programming Language: We will be using TypeScript, a statically typed language that builds on JavaScript.
-
Directory Structure: Your project directory structure should have at minimum:
index.ts
: This is where we'll write our TypeScript code.package.json
: This file contains the project dependencies.Pulumi.yaml
: This file contains the Pulumi project metadata.node_modules/
: This directory contains the installed npm packages.
-
Adding Dependencies: To execute the program, you need to have the
@pulumi/kubernetes
package in yourpackage.json
file. You can add it by runningnpm install @pulumi/kubernetes
. -
Creating the Program: We'll write our Pulumi code in
index.ts
. -
Running the Program: You can deploy your Helm chart using the command
pulumi up
. Pulumi will perform a preview, and once you confirm, it will apply the changes to your cluster.
Below is a detailed TypeScript program illustrating how to deploy the
kusk-gateway
Helm chart. Make sure you have installed the Pulumi CLI and configured access to your Kubernetes cluster.import * as k8s from "@pulumi/kubernetes"; // Create a new Kubernetes Helm Chart for `kusk-gateway` // The 'chart' parameter specifies the name of the chart as found in the Helm repository // 'repo' specifies the URL of the Helm repository where `kusk-gateway` is located // 'namespace' optionally specifies the Kubernetes namespace to deploy the chart in // If the namespace is not provided, it defaults to the 'default' namespace const kuskGatewayChart = new k8s.helm.v3.Chart("kusk-gateway", { repo: "https://charts.kubeshop.io/", // Replace with the correct repository URL for `kusk-gateway` chart: "kusk-gateway", version: "0.1.0", // Replace with the specific version of the chart you want to deploy namespace: "kusk-gateway-ns", // Optional: specify if you want to deploy it in a custom namespace // You can specify additional configuration values for the chart as needed values: { // For example, you might want to set custom resource limits for the gateway pods resources: { limits: { cpu: "200m", memory: "256Mi", }, requests: { cpu: "100m", memory: "128Mi", }, }, // Add other values as needed for your deployment }, }); // Export the status URL by querying the load balancer status export const statusUrl = kuskGatewayChart.getResourceProperty("v1/Service", "kusk-gateway", "status").apply(status => { // If your chart exposes a LoadBalancer service type, replace "<service-name>" with the name of your service to get the actual load balancer status // Note that it may take a while for a LoadBalancer IP to be available after deployment const ingress = status.loadBalancer.ingress[0]; if (ingress) { return ingress.ip ? `http://${ingress.ip}` : `http://${ingress.hostname}`; } return "LoadBalancer IP not available yet."; });
In this program:
- We import the
@pulumi/kubernetes
package to interact with Kubernetes. - We instantiate a
Chart
resource which represents the Helm chart we want to deploy. - We specify the Helm repository URL, the chart name, desired version, and optionally, the Kubernetes namespace.
- We can provide a
values
object to override or set additional configuration values of the Helm chart. This object's structure will depend on the specific Helm chart's defined values, which can usually be found in the chart'svalues.yaml
file or chart documentation. - Finally, we export a
statusUrl
which will contain the IP address or hostname of the LoadBalancer if your Helm chart creates a service of typeLoadBalancer
. This allows you to access the deployed gateway after it's up and running.
Remember, the Helm repository URL and chart version need to be specified correctly for your specific
kusk-gateway
Helm chart. Ifkusk-gateway
requires special configuration, you can modify thevalues
object accordingly.-