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.

Prerequisites#

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

Deploying the example#

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 AWS region to deploy into:

    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.

    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.

Cleaning up#

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

Terminal window
pulumi destroy
pulumi stack rm

Related

The infrastructure as code platform for any cloud.