AWS Classic

v4.30.0 published on Tuesday, Nov 30, 2021 by Pulumi

Amazon EKS Cluster

View Code

This example deploys an EKS Kubernetes cluster inside a AWS VPC with proper NodeGroup and Networking Configured

Deploying the App

To deploy your infrastructure, follow the below steps.

Prerequisites

  1. Install Pulumi
  2. Configure Pulumi for AWS
  3. Configure Pulumi for Python
  4. Optional for K8 Auth Install iam-authenticator

Deploying and running the program

  1. Create a new stack:

    $ pulumi stack init python-eks-testing
    
  2. Set the AWS region:

    $ pulumi config set aws:region us-east-2
    
  3. Run pulumi up to preview and deploy changes:

    $ pulumi up
        Previewing stack 'python-eks-testing'
        Previewing changes:
        ...
    
        Do you want to perform this update? yes
        Updating (python-eks-testing):
    
            Type                              Name                                Status
        +   pulumi:pulumi:Stack               aws-py-eks-python-eks-testing       created
        +   ├─ aws:iam:Role                   ec2-nodegroup-iam-role              created
        +   ├─ aws:iam:Role                   eks-iam-role                        created
        +   ├─ aws:ec2:Vpc                    eks-vpc                             created
        +   ├─ aws:iam:RolePolicyAttachment   eks-workernode-policy-attachment    created
        +   ├─ aws:iam:RolePolicyAttachment   eks-cni-policy-attachment           created
        +   ├─ aws:iam:RolePolicyAttachment   ec2-container-ro-policy-attachment  created
        +   ├─ aws:iam:RolePolicyAttachment   eks-service-policy-attachment       created
        +   ├─ aws:iam:RolePolicyAttachment   eks-cluster-policy-attachment       created
        +   ├─ aws:ec2:InternetGateway        vpc-ig                              created
        +   ├─ aws:ec2:Subnet                 vpc-sn-1                            created
        +   ├─ aws:ec2:Subnet                 vpc-sn-2                            created
        +   ├─ aws:ec2:SecurityGroup          eks-cluster-sg                      created
        +   ├─ aws:ec2:RouteTable             vpc-route-table                     created
        +   ├─ aws:eks:Cluster                eks-cluster                         created
        +   ├─ aws:ec2:RouteTableAssociation  vpc-1-route-table-assoc             created
        +   ├─ aws:ec2:RouteTableAssociation  vpc-2-route-table-assoc             created
        +   └─ aws:eks:NodeGroup              eks-node-group                      created
    
        Outputs:
            cluster-name: "eks-cluster-96b87e8"
    
        Resources:
            + 18 created
    
        Duration: 14m15s
    
    
  4. View the cluster name via stack output:

    $ pulumi stack output
        Current stack outputs (1):
        OUTPUT                   VALUE
        cluster-name  eks-cluster-96b87e8
    
  5. Verify that the EKS cluster exists, by either using the AWS Console or running aws eks list-clusters.

  6. Update your KubeConfig, Authenticate to your Kubernetes Cluster and verify you have API access and nodes running.

$ aws eks --region us-east-2 update-kubeconfig --name $(pulumi stack output cluster-name)

    Added new context arn:aws:eks:us-east-2:account:cluster/eks-cluster-96b87e8
$ kubectl get nodes

    NAME                                         STATUS   ROLES    AGE   VERSION
    ip-10-100-0-182.us-east-2.compute.internal   Ready    <none>   10m   v1.14.7-eks-1861c5
    ip-10-100-1-174.us-east-2.compute.internal   Ready    <none>   10m   v1.14.7-eks-1861c5

Clean up

To clean up resources, run pulumi destroy and answer the confirmation question at the prompt.