1. Deploy the elasticsearch-umbrella helm chart on AWS EKS


    Deploying an Elasticsearch Helm chart on AWS EKS involves several steps: creating an EKS cluster, configuring the Kubernetes provider to connect to the EKS cluster, and then deploying the Helm chart into the cluster.

    Here's a detailed explanation and program of how to accomplish this:

    Step 1: Create an EKS Cluster

    To deploy workloads on EKS, we first need to create an EKS cluster. We'll use the eks.Cluster resource from the pulumi/eks package, which provides a high-level interface to creating EKS clusters and is a simpler alternative to using aws.eks.Cluster. This package deploys and manages a Kubernetes cluster on EKS and encapsulates the necessary AWS resources.

    Step 2: Configure Kubernetes Provider

    Once the EKS cluster is created, we configure the Pulumi Kubernetes provider to use the kubeconfig of our new EKS cluster. This provider allows us to interact with the cluster to manage Kubernetes resources, including deploying Helm charts.

    Step 3: Deploy Elasticsearch Helm Chart

    With our cluster up and running and the Kubernetes provider configured, we can now deploy the Elasticsearch Helm chart. The helm.v3.Chart resource from Pulumi's @pulumi/kubernetes package will be used to deploy the Helm chart.

    Here's the program in TypeScript that accomplishes these steps:

    import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; // Step 1: Create an EKS cluster const cluster = new eks.Cluster("eks-cluster", { // Specify the desired settings for the EKS cluster instanceType: "t2.medium", // Choose an appropriate instance type for your workload desiredCapacity: 2, // Set the number of worker nodes minSize: 1, maxSize: 3, }); // Step 2: Use the generated Kubeconfig to configure the Kubernetes provider const kubeconfig = cluster.kubeconfig.apply(JSON.stringify); const provider = new k8s.Provider("k8s-provider", { kubeconfig: kubeconfig, }); // Step 3: Deploy Elasticsearch Helm chart to EKS cluster const elasticsearchChart = new k8s.helm.v3.Chart("elasticsearch", { repo: "elastic", // Assuming the Elasticsearch chart is in the "elastic" repository chart: "elasticsearch", version: "7.9.3", // Specify the version of Elasticsearch you wish to deploy // Values to pass to the Helm chart. Modify these based on your requirements. values: { // Custom values to configure Elasticsearch }, }, { provider: provider }); // Export the cluster's kubeconfig and the service endpoint of Elasticsearch export const kubeconfigFile = kubeconfig; export const elasticsearchEndpoint = elasticsearchChart.getResourceProperty("v1/Service", "elasticsearch-master", "status") .apply(status => status.loadBalancer.ingress[0].hostname);

    Explanation of the resources used:

    • eks.Cluster: This resource creates an EKS cluster in AWS. We've configured it with a desired number of worker nodes and an instance size suitable for a small Elasticsearch cluster.
    • k8s.Provider: This configures the Kubernetes provider with the generated kubeconfig from our EKS cluster, allowing us to deploy Kubernetes applications.
    • k8s.helm.v3.Chart: This resource represents a Helm chart which we are using to deploy Elasticsearch onto our EKS cluster. The repo, chart, and version specify where to find the Elasticsearch Helm chart and which version to use.

    Finally, two important pieces of information are exported:

    • kubeconfigFile: This is the kubeconfig needed to interact with your EKS cluster using kubectl or other Kubernetes tools.
    • elasticsearchEndpoint: This will be the endpoint through which you can access your Elasticsearch cluster. Note that it might take a while for this value to become available after the initial deployment, as it depends on how the Helm chart configures services and how they are exposed in EKS.

    Remember, you'll need access to an AWS account with sufficient permissions to create EKS clusters. Also, the proper IAM roles need to be created and the Pulumi CLI needs to be logged in and set up to communicate with your AWS account. As part of the deployment, Pulumi will output the commands you can use to get the kubeconfig and access your cluster.

    Before running this program, you'll also want to ensure you have Pulumi and the AWS CLI installed and configured. If you need guidance on this setup, check out Pulumi's Getting Started guide for AWS.