Skip to main content
Version: 3.1

Install Portworx on AWS EKS using eksctl and the Daemonset

This article provides instructions for installing Portworx on Elastic Kubernetes Service (EKS) using the Weaveworks eksctl command-line utility.

note

NOTE: You can follow these procedures to deploy Portworx on AWS Outposts.

Prerequisites

Before you can install Portworx on EKS using pxctl, you must meet the following prerequisites:

  • You must have eksctl downloaded and installed on your local computer

Grant Portworx the needed AWS permissions

Create a ClusterConfig

The ClusterConfig dictates what resources eksctl requests from EKS for the purposes of running Portworx. Portworx requires a number of default resources and configurations in order to function, but other areas of your configuration will vary based on your needs.

  1. Create a ClusterConfig configuration YAML file, specifying your own configuration options for the following:

    • metadata:

      • name: withe cluster name you desire
      • region: with the region you want your eks service to operate from
      • version: with a supported EKS version
    • managedNodeGroups:

      • storage-nodes.instance: with the instance type appropriate for your workloads
      • storage-nodes.minSize: and storage-nodes.maxSize: with the number of worker nodes. Both values must be the same, and a minimum of 3.
      • storage-nodes.ssh.publicKeyPath: if no path is specified, the default will be id_rsa
      • storage-nodes.iam.attachPolicyARNs: with the ARN of the IAM policy you created for Portworx in the Grant Portworx the needed AWS permissions step
      • storageless-nodes.instanceType: with the instance type approprirate for your storageless node workloads
      • storageless-nodes.minSize: with the minimum number of storageless nodes that can be active on your cluster at any given time
      • storageless-nodes.maxSize: with the maximum number of storageless allowed on your cluster
      • storageless-nodes.desiredCapacity: with the ideal number of storageless nodes preferred on your cluster
      • storageless-nodes.iam.attachPolicyARNs: with the ARN of the IAM policy you created for Portworx in the Grant Portworx the needed AWS permissions step
    • availabilityZones: with the availability zones applicable to your region

      apiVersion: eksctl.io/v1alpha5
      kind: ClusterConfig
      metadata:
      name: px-eksctl
      region: us-east-1
      version: "1.14"
      managedNodeGroups:
      - name: storage-nodes
      instanceType: m4.xlarge
      minSize: 3
      maxSize: 3
      volumeSize: 20
      #ami: auto
      amiFamily: AmazonLinux2
      labels: {role: worker, "portworx.io/node-type": "storage"}
      tags:
      nodegroup-role: worker
      ssh:
      allow: true
      publicKeyPath: ~/.ssh/aws-vm.pub
      iam:
      attachPolicyARNs:
      - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
      - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
      - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      - arn:aws:iam::aws:policy/ElasticLoadBalancingFullAccess
      - <arn-of-your-portworx-aws-iam-policy>
      withAddonPolicies:
      imageBuilder: true
      autoScaler: true
      ebs: true
      fsx: true
      efs: true
      albIngress: true
      cloudWatch: true
      - name: storageless-nodes
      instanceType: m4.xlarge
      minSize: 3
      maxSize: 6
      desiredCapacity: 4
      volumeSize: 20
      amiFamily: AmazonLinux2
      labels: {role: worker}
      tags:
      nodegroup-role: worker-storageless
      ssh:
      allow: true
      publicKeyPath: ~/.ssh/aws-vm.pub
      iam:
      attachPolicyARNs:
      - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
      - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
      - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      - arn:aws:iam::aws:policy/ElasticLoadBalancingFullAccess
      - <arn-of-your-portworx-aws-iam-policy>
      withAddonPolicies:
      imageBuilder: true
      autoScaler: true
      ebs: true
      fsx: true
      efs: true
      albIngress: true
      cloudWatch: true
      availabilityZones: [ 'us-east-1a', 'us-east-1b', 'us-east-1c' ]
  2. Enter the following eksctl create cluster command, specifying the name of the clusterConfig file you created in the step above:

    eksctl create cluster -f <my-clusterConfig>.yml

Generate the spec

To install Portworx with Kubernetes, you must first generate Kubernetes manifests that you will deploy in your cluster:

  1. Navigate to Portworx Central and log in or create an account.

  2. Click Continue with Portworx Enterprise option:

    Px-central Product Catalog

  3. Choose an appropriate license for your requirement and click Continue:

    Screenshot showing Portworx license selector

  4. Generate a spec with the following selections:

    • On the Storage tab, specify AWS and configure your storage devices based on your needs
    • On the Customize tab, select the Amazon Elastic Container Service for Kubernetes (EKS) option
    • Under the Environment Variables dropdown on the Customize tab, create an environment variable named ENABLE_ASG_STORAGE_PARTITIONING with a value of true

Further reading

  • Refer to the eksctl github for more examples of config files which can be used as input to eksctl
  • For more information on what eksctl is, as well as how it works, refer to the eksctl documentation