Skip to main content

Amazon EKS Cluster

A minimal AWS Python EKS example cluster

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-py-eks
cd pulumi-examples/aws-py-eks

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.

Related

The infrastructure as code platform for any cloud.