Skip to main content

Amazon EKS Distro Cluster

A minimal AWS TypeScript Pulumi program

This example lives in the pulumi/examples repository. Check out just this directory to use it:

Get started with this example
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examples
git -C pulumi-examples sparse-checkout set aws-ts-eks-distro
cd pulumi-examples/aws-ts-eks-distro

This example deploys an Amazon EKS Distro cluster using a dynamic provider which utilizes kops

Deploying the App#

To deploy your infrastructure, follow the below steps.

Prerequisites#

  1. Install Pulumi
  2. Install Node.js
  3. Install Kops
  4. Configure AWS Credentials
  5. Install aws-iam-authenticator

Steps#

After cloning this repo, from this working directory, run these commands:

  1. Install the required Node.js packages:

    Terminal window
    npm install
  2. Create a new stack, which is an isolated deployment target for this example:

    Terminal window
    pulumi stack init
  3. Set the required configuration variables for this program:

    Terminal window
    pulumi config set aws:region us-west-2
  4. Stand up the EKS cluster, which will also deploy the Kubernetes Dashboard:

    Terminal window
    pulumi up
  5. After 10-15 minutes, your cluster will be ready, and the kubeconfig JSON you’ll use to connect to the cluster will be available as an output. You can save this kubeconfig to a file like so:

    Terminal window
    pulumi stack output kubeconfig --show-secrets >kubeconfig.json

    Once you have this file in hand, you can interact with your new cluster as usual via kubectl:

    Terminal window
    KUBECONFIG=./kubeconfig.json kubectl get nodes
  6. From there, feel free to experiment. Make edits and run pulumi up to incrementally update your stack. For example, in order to deploy a Helm chart into your cluster, import the @pulumi/kubernetes/helm package, add a Chart resource that targets the EKS cluster to index.ts, and run pulumi up. Note that the Helm client must be set up in order for the chart to deploy. For more details, see the Prerequisites list.

    import * as helm from "@pulumi/kubernetes/helm";
    // ... existing code here ...
    const myk8s = new k8s.Provider("myk8s", {
    kubeconfig: cluster.kubeconfig.apply(JSON.stringify),
    });
    const postgres = new helm.v2.Chart("postgres", {
    // stable/postgresql@0.15.0
    repo: "stable",
    chart: "postgresql",
    version: "0.15.0",
    values: {
    // Use a stable password.
    postgresPassword: "some-password",
    // Expose the postgres server via a load balancer.
    service: {
    type: "LoadBalancer",
    },
    },
    }, { providers: { kubernetes: myk8s } });

    Once the chart has been deployed, you can find its public, load-balanced endpoint via the Kubernetes Dashboard.

  7. Once you’ve finished experimenting, tear down your stack’s resources by destroying and removing it:

    Terminal window
    pulumi destroy --yes
    pulumi stack rm --yes

Related

The infrastructure as code platform for any cloud.