1. Deploy the guestbook helm chart on AWS EKS


    To deploy the Guestbook Helm chart on AWS Elastic Kubernetes Service (EKS), we will follow these high-level steps:

    1. Create an Amazon EKS cluster.
    2. Configure the Kubeconfig to connect to the EKS cluster.
    3. Deploy the Guestbook Helm chart to the EKS cluster.

    We'll use the following resources from Pulumi:

    • eks.Cluster: This is a high-level component that wraps the creation of an EKS cluster, its worker node groups, and other necessary configurations in a single resource.
    • kubernetes.helm.v3.Chart: This resource from the Pulumi Kubernetes provider is used to deploy a Helm chart onto a Kubernetes cluster.

    Here’s the complete program written in TypeScript:

    import * as pulumi from "@pulumi/pulumi"; import * as awsx from "@pulumi/awsx"; import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; // Step 1: Create an AWS EKS cluster. const cluster = new eks.Cluster("guestbook-eks", {}); // Export the kubeconfig. export const kubeconfig = cluster.kubeconfig; // Step 2: Use the kubeconfig to set up the Kubernetes provider. const provider = new k8s.Provider("k8s-provider", { kubeconfig: cluster.kubeconfig.apply(JSON.stringify), }); // Step 3: Deploy the Guestbook Helm chart to the EKS cluster. const guestbookChart = new k8s.helm.v3.Chart("guestbook", { chart: "guestbook", version: "0.2.0", // Use the correct version of the Guestbook chart. fetchOpts: { repo: "http://storage.googleapis.com/kubernetes-charts", // The repository containing the Guestbook chart. }, }, { provider }); // Export the Guestbook front-end service endpoint. export const guestbookFrontendService = guestbookChart.getResourceProperty("v1/Service", "frontend", "status") .apply(status => status.loadBalancer.ingress[0].hostname || status.loadBalancer.ingress[0].ip);

    Detailed explanations:

    • The eks.Cluster resource creates a new EKS cluster. You can specify more options such as the desired number of nodes, regions, etc., but in this case, we're going with default options provided by the @pulumi/eks package.

    • The kubeconfig output variable will hold the configuration needed to connect to your EKS cluster using kubectl or any other Kubernetes tooling.

    • The k8s.Provider resource sets up our Kubernetes provider and configures it to manage resources in the previously created EKS cluster. We use the kubeconfig emitted from the EKS cluster to connect to it.

    • The k8s.helm.v3.Chart resource deploys the Guestbook Helm chart to your EKS cluster. We specify the chart name ("guestbook"), the chart version, and the Helm repository URL that contains the chart.

    • The guestbookFrontendService output variable will give you the endpoint of the Guestbook application front-end service once deployed. This will be either the hostname or IP of the load balancer created by the Helm chart for the front-end service.

    Run the program above by following these steps:

    1. Save the code to a file named index.ts.
    2. Ensure that you have Pulumi installed and configured with AWS credentials.
    3. Run npm install @pulumi/pulumi @pulumi/awsx @pulumi/eks @pulumi/kubernetes.
    4. Run pulumi up to create the resources and deploy the chart.

    The execution will output the kubeconfig and the Guestbook service endpoint which you can use to interact with your new EKS cluster and the deployed Guestbook application.