Pre-installation requirements for Amazon Elastic Kubernetes Service

4 minute read

The following items are required to install CloudBees CI on Amazon Elastic Kubernetes Service (EKS):

Amazon Web Services requirements

The following items are required:

  • An Amazon Web Services (AWS) account.

  • An EKS cluster with the following requirements:

    • Runs a currently supported version of Kubernetes. Refer to Supported platforms for CloudBees CI on modern cloud platforms.

    • Has nodes that have at least 4 CPUs and 16 GiBs of memory. Be sure that the cluster meets the sizing and scaling requirements in Kubernetes on Amazon Elastic Kubernetes Service reference. NOTE: Having fewer controllers on each VM means that losing a VM unexpectedly does not impact service.

    • Has N+1 worker nodes, where N is the number of managed controllers and +1 is the CloudBees operations center.

    • Has network access to container images, either a public Docker Hub or a private Docker Registry.

When installing CloudBees CI on EKS on AWS Outposts, there are some additional considerations:

  • Your EKS nodes must be created in the Outpost subnet.

  • You are unable to create an ELB in the same subnet as the Outpost, but it needs to be in the same VPC.

  • You must pre-create the volumes you intend to use and create the persistent volumes that connect to them.

Amazon Spot

Installing CloudBees CI agents on EKS using EKS managed node groups with Spot Instances requires significantly less operational effort compared to using self-managed nodes. Amazon EKS managed node groups follow Spot best practices by using Capacity Optimized allocation strategy to provision Spot instances from the deepest Spot pools. Amazon EKS managed node groups use Capacity Rebalancing to ensure Amazon EKS can gracefully drain and rebalance your Spot nodes automatically when a Spot node is at elevated risk of interruption.

Storage requirements

Dynamic provisioning is required to create persistent volumes. If you don’t enable dynamic provisioning, you will have to manually create a persistent volume.

Because Jenkins is highly dependent upon the filesystem, the underlying storage provider must provide sufficient input/output operations per second (IOPS), sufficient throughput, and low latency.

SSD disks are recommended for production usage.

Table 1. Storage recommendations for EKS
Single AZ Multiple AZ High Availability (active/active) (HA)

EBS

EFS General purpose Elastic Throughput

Configure High Availability (active/active) HA on EKS

To install High Availability in EKS, you must set up a storage class with ReadWriteMany access mode. CloudBees recommends Amazon Elastic File System (EFS). When using EFS in performance tests, both the Elastic and the Provisioned throughput modes showed good performance results. For a performance summary report, refer to HA on EKS Performance Test.

Refer to the Amazon documentation on the EFS CSI driver to learn how to deploy it to your EKS cluster.

Amazon Elastic Block Store (EBS) volumes cannot be used for High Availability (active/active) (HA) in EKS, as they do not support ReadWriteMany access mode.

Gateway API requirements

CloudBees CI uses the Kubernetes Gateway API to manage traffic routing. When Gateway API is enabled, CloudBees CI creates HTTPRoute resources for the operations center and all managed controllers.

Any conformant Gateway API implementation is supported on EKS. For tested implementations, refer to Kubernetes Gateway API supported implementations.

For the complete list of Gateway API prerequisites, refer to Verify Kubernetes Gateway API prerequisites.

Gateway API manages HTTP/HTTPS traffic only. CloudBees recommends WebSocket transport for external inbound agent communication, which uses the standard HTTP/HTTPS port and requires no additional configuration. For setup instructions, refer to Use WebSockets to connect controllers to the operations center.

If you use a Gateway API implementation that CloudBees has not tested, additional configuration may be required for TLS termination, session persistence, or namespace routing. Refer to the CloudBees CI Knowledge Base for guidance. CloudBees does not provide support for untested implementations. You must install and configure your Gateway API controller and adjust your CloudBees CI chart values according to your situation.

For High Availability (HA) controllers, refer to session persistence implementation support to verify Gateway API session persistence compatibility with your implementation.

Amazon Elastic Container Registry

You can optionally configure your AWS CloudBees CI on modern cloud platforms deployment to work with AWS Amazon Elastic Container Registry (ECR). The AWS ECR can:

  • Store Docker images for faster builds.

  • Manage Docker images for better repeatability.

  • Deploy Docker images for easier development.

This installation guide gives you an overview of using ECR with CloudBees CI on modern cloud platforms. Refer to the official documentation for full coverage of ECR:

Requirements for the machine where the installation is performed

You must have the following on the machine where you plan to perform the installation:

  • The kubectl application. Follow the instructions on the Kubernetes website to install it.

  • helm. Follow the instructions in the Helm Quickstart Guide to install the Helm client.

  • A valid kubernetes context to interact with the EKS cluster (link).

Validate system requirements

  • Run the command

    kubectl version

    and ensure the server version is displayed.

    Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:50:19Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:41:49Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
  • Ensure you can run the helm command, for example by calling helm version.