1. Deploy the mongo helm chart on AWS EKS


    To deploy the mongo Helm chart on AWS EKS using Pulumi, we'll follow these steps:

    1. Create an EKS cluster using the eks.Cluster resource from the Pulumi EKS package, which provides a high-level approach to manage EKS clusters.
    2. Deploy the mongo Helm chart onto the EKS cluster. To accomplish this, we'll use the kubernetes.helm.sh/v3.Chart resource from the Pulumi Kubernetes provider.

    Here's what each step does in more detail:

    • EKS Cluster Creation: The eks.Cluster resource simplifies the process of creating and configuring an EKS cluster, including the necessary AWS resources like the VPC, subnets, and node groups.

    • Mongo Helm Chart Deployment: The kubernetes.helm.sh/v3.Chart resource is used to deploy a Helm chart, which is a package that contains pre-configured Kubernetes resources. Helm charts help you manage Kubernetes applications and can be used to deploy complex applications like MongoDB.

    Let's dive into the Pulumi TypeScript program that accomplishes these tasks:

    import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; // Create an EKS cluster. const cluster = new eks.Cluster("my-cluster", { desiredCapacity: 2, // Specify the desired number of worker nodes minSize: 1, // Specify the minimum number of worker nodes maxSize: 3, // Specify the maximum number of worker nodes storageClasses: "gp2", // Specify the default storage class version: "1.21", // Specify the EKS cluster Kubernetes version }); // Create a k8s provider that uses the kubeconfig from the EKS cluster. const provider = new k8s.Provider("k8s-provider", { kubeconfig: cluster.kubeconfig.apply(JSON.stringify), }); // Deploy the mongo Helm chart using the k8s provider created above. const mongoChart = new k8s.helm.v3.Chart("mongo-chart", { chart: "mongodb", version: "10.26.3", // Specify the chart version, make sure to use the correct one for MongoDB fetchOpts: { repo: "https://charts.bitnami.com/bitnami", // Specify the Helm chart repository }, }, { provider }); // Export the kubeconfig and MongoDB service endpoint. export const kubeconfig = cluster.kubeconfig; export const mongoServiceEndpoint = mongoChart.getResource("v1/Service", "mongo-chart-mongodb").status.apply(status => status.loadBalancer.ingress[0]);

    In this program:

    • We first instantiate an EKS cluster named my-cluster, defining the desired, min, and max sizes of our node group, specifying the default storage class, and setting the Kubernetes version.

    • Then we create a Kubernetes provider, k8s-provider, using the kubeconfig from our EKS cluster. This provider is how Pulumi communicates with our EKS cluster and applies the desired configurations.

    • Next, we use the k8s.helm.v3.Chart resource to deploy the MongoDB helm chart. We specify the chart name, version, and the repository where the chart can be found.

    • We then export the kubeconfig of the cluster to be able to interact with the cluster using kubectl and other Kubernetes tools. Additionally, we export the mongoServiceEndpoint, which can be used to connect to the MongoDB service once it is deployed.

    Please replace the placeholder values and versions with the specific details required for your deployment scenario. Also, note that Helm charts and Kubernetes APIs can change, so make sure to use compatible versions for your Pulumi Kubernetes SDK and EKS versions.

    You can run this program using the Pulumi CLI by executing pulumi up in the directory where this TypeScript file is saved, provided that you have set up your AWS credentials and Pulumi environment.