Deploy the surf-booking-chart helm chart on AWS EKS
TypeScriptTo deploy a Helm chart called
surf-booking-chart
onto an Amazon EKS (Elastic Kubernetes Service) cluster using Pulumi, you'll need to complete a few key steps:-
Set up an EKS Cluster: We will use Pulumi to programmatically provision an AWS EKS cluster. We'll define the necessary VPC configuration, subnetting, and the EKS cluster itself.
-
Deploy the Helm Chart: After setting up the EKS cluster, we will deploy the Helm chart onto the cluster. Pulumi provides the
kubernetes.helm.v3.Chart
resource which can handle Helm chart deployments.
Here's how you can achieve this using Pulumi and TypeScript:
import * as pulumi from "@pulumi/pulumi"; import * as aws from "@pulumi/aws"; import * as eks from "@pulumi/eks"; import * as kubernetes from "@pulumi/kubernetes"; // Create an EKS cluster. const cluster = new eks.Cluster("surf-booking-cluster", {}); // Once the cluster is created, we can get its kubeconfig to deploy applications. const kubeconfig = cluster.kubeconfig.apply(JSON.stringify); // Create a Kubernetes Provider instance with the kubeconfig from the EKS cluster. const provider = new kubernetes.Provider("k8s-provider", { kubeconfig: kubeconfig, }); // Deploy the surf-booking-chart Helm chart into the EKS cluster. const helmChart = new kubernetes.helm.v3.Chart("surf-booking-chart", { chart: "surf-booking-chart", // You would replace "<REPO-URL>" with the URL of the Helm repository containing the chart. fetchOpts: { repo: "<REPO-URL>", }, // If the Helm chart requires you to provide specific values, you can specify them here. values: { // ...key-value pairs for Helm chart values, e.g., image, replicas, etc. }, }, { provider: provider }); // Associate with the Kubernetes provider we created earlier. // Export the cluster's kubeconfig. export const kubeconfigOutput = kubeconfig; // Export the public URL of the service, if available, after the chart is deployed. // Typically the Helm chart will contain a Kubernetes Service resource that gets a public endpoint. // You'd modify this to align with your Helm chart's specifics. helmChart.getResourceProperty("v1/Service", "surf-booking-service", "status").apply(status => { return status.loadBalancer.ingress[0].hostname || status.loadBalancer.ingress[0].ip; }).then(publicUrl => { export const servicePublicUrl = publicUrl; });
Explanation of the Program
EKS Cluster Setup: We first create an EKS cluster using
eks.Cluster
which automatically sets up the VPC, subnets, and node groups necessary for an EKS cluster. Pulumi takes care of all the underlying AWS resource creation.Kubernetes Provider: Once the cluster is ready, we retrieve the
kubeconfig
which contains credentials to connect to the Kubernetes cluster. We then instantiate a Kubernetes provider using this kubeconfig.Helm Chart Deployment: Next, we create a new Helm chart resource by using
kubernetes.helm.v3.Chart
. We specify the name of the chart and the repository where it is located. If your Helm chart requires specific configuration values, you can set them in thevalues
property.Exports: At the end of the program, we export the
kubeconfig
to allow interacting with the cluster using tools likekubectl
. If the Helm chart creates a service with a public endpoint, we also attempt to export that URL so you can easily access the deployed application.When running this Pulumi program, ensure you have the Pulumi AWS Provider and Pulumi EKS package installed. Alternatively, you can run
pulumi up
command, which will prompt you to install any missing plugins.Replace
"<REPO-URL>"
with the actual Helm chart repository URL, and fill thevalues
with any configurations required by yoursurf-booking-chart
.After deploying the Helm chart onto the AWS EKS cluster, given your Helm chart provisions a service of
type: LoadBalancer
, it may take a few minutes for AWS to provision a load balancer and provide a public access point at the service's URL. Once it's available, you can access your application using the exportedservicePublicUrl
.-