Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Decide on Default Storage Class for EKS Clusters #711

Merged
merged 30 commits into from
Oct 24, 2024
Merged
Changes from 4 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f51ba78
Add decision guide for default storage class in EKS clusters
milldr Oct 21, 2024
39f52b3
Update default storage class recommendation
milldr Oct 21, 2024
9d27ce8
Decide on default storage class for EKS clusters
milldr Oct 21, 2024
039d2c4
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 21, 2024
9aa638a
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 21, 2024
91c080a
Decide on default storage class recommendations
milldr Oct 21, 2024
e36e463
Update default storage class recommendations in EKS design
milldr Oct 21, 2024
aa63408
Update storage class comparison in EKS design decisions
milldr Oct 22, 2024
594a831
Update default storage class decision key points
milldr Oct 22, 2024
7cc39df
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 22, 2024
309f0d0
Apply suggestions from code review
milldr Oct 22, 2024
89a3313
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 22, 2024
30850e2
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
c8beb62
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
f5e7f65
Merge branch 'master' into feat/decide-on-storage-class
milldr Oct 24, 2024
ab98f7a
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
9759c5d
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
f84ecd0
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
e7a5b3a
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
13aabdb
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
53c6383
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
591f3c6
Apply suggestions from code review
milldr Oct 24, 2024
34bde7a
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
10031d1
Update storage class decision considerations
milldr Oct 24, 2024
a963698
Decide on default storage class guidelines updated
milldr Oct 24, 2024
8061a93
Update EFS usage warning in storage class decision
milldr Oct 24, 2024
04316d4
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
cce7fea
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
cb845e9
Update docs/layers/eks/design-decisions/decide-on-default-storage-cla…
milldr Oct 24, 2024
b44934f
Apply suggestions from code review
milldr Oct 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
title: "Decide on Default Storage Class for EKS Clusters"
sidebar_label: "Default Storage Class"
description: Determine the default storage class for Kubernetes EKS clusters
---
import Intro from '@site/src/components/Intro';
import KeyPoints from '@site/src/components/KeyPoints';

<Intro>
When provisioning EKS (Kubernetes) clusters, selecting the appropriate default storage class is crucial for ensuring optimal performance, scalability, and cost-efficiency of persistent storage for workloads.
</Intro>
milldr marked this conversation as resolved.
Show resolved Hide resolved

## Default Storage Class Options

We need to decide between **Amazon EFS (Elastic File System)** and **Amazon EBS (Elastic Block Store)** as the default storage class for our EKS clusters. Historically, **EFS** has been the recommended option, but there is a growing preference for **EBS** for customers.

## Top Considerations

1. **Low Performance:**
- **EFS:** Can be mitigated by paying for additional bandwidth, but has routinely caused outages due to throttling even with low-performance applications. Additionally, poor lock performance makes EFS completely unsuitable for high-performance applications like RDBMS.

2. **Cost:**
- **EFS:** At least 3x the cost of EBS since the storage is backed by an EBS volume in each of the 3 Availability Zones (AZs).

3. **Integration:**
- Both **EFS** and **EBS** are now fully integrated into Kubernetes with CSI (Container Storage Interface) controllers, facilitating seamless provisioning and management.

## Amazon EFS

**Amazon EFS** provides a scalable, fully managed elastic NFS file system for use with AWS Cloud services and on-premises resources.
milldr marked this conversation as resolved.
Show resolved Hide resolved

### Pros:
- **Scalability:** Automatically scales storage capacity as needed without manual intervention.
milldr marked this conversation as resolved.
Show resolved Hide resolved
- **Shared Access:** Allows multiple pods to access the same file system concurrently, facilitating shared storage scenarios.
- **Managed Service:** Fully managed by AWS, reducing operational overhead for maintenance and scaling.
milldr marked this conversation as resolved.
Show resolved Hide resolved
- **NFS Protocol Support:** Compatible with applications requiring NFS (Network File System) access.
milldr marked this conversation as resolved.
Show resolved Hide resolved
milldr marked this conversation as resolved.
Show resolved Hide resolved

### Cons:
- **Performance:** Generally offers lower performance compared to EBS, with throughput as low as 100 MB/s, which may not meet the demands of high-performance applications.
- **Cost:** Can be significantly more expensive than EBS, potentially up to 3x the price depending on usage patterns.
- **Latency:** Higher latency compared to EBS, which may impact performance-sensitive applications.

## Amazon EBS

**Amazon EBS** provides high-performance block storage volumes for use with Amazon EC2 instances, suitable for a wide range of workloads.

### Pros:
- **Performance:** Offers high IOPS and low latency, making it ideal for performance-critical applications.
milldr marked this conversation as resolved.
Show resolved Hide resolved
- **Cost-Effective:** Potentially lower costs for specific storage types and usage scenarios.
- **Integration:** Well-integrated with Kubernetes through the EBS CSI (Container Storage Interface) driver, facilitating seamless provisioning and management.
milldr marked this conversation as resolved.
Show resolved Hide resolved
- **Snapshot and Backup:** Supports snapshotting for data backup, recovery, and cloning.
milldr marked this conversation as resolved.
Show resolved Hide resolved

### Cons:
- **Single-Attach Limitation:** EBS volumes are typically attached to a single node at a time, limiting shared access across multiple pods.
- **Data Sharing:** Data cannot be easily shared across multiple instances, requiring additional configurations or solutions for shared access.
- **Availability Zones:** EBS volumes are confined to a single Availability Zone, which may affect high availability and disaster recovery strategies. Kubernetes has implemented several mitigations for this limitation, and ECS likely has similar solutions.
milldr marked this conversation as resolved.
Show resolved Hide resolved
- **Scalability:** Requires manual provisioning and management of storage capacity, which can introduce operational complexity.
milldr marked this conversation as resolved.
Show resolved Hide resolved

## Recommendation

**Both Amazon EFS and Amazon EBS are excellent choices for the default storage class in EKS clusters, depending on specific use cases and requirements.**

- **Choose Amazon EFS** if your applications require:
- Shared access to the same file system across multiple pods.
- Automatic scaling of storage without manual intervention.
- Compatibility with NFS protocols.

- **Choose Amazon EBS** if your applications demand:
- High IOPS and low latency for performance-critical workloads.
- Cost-effective storage solutions for specific usage patterns.
- Advanced features like snapshotting and seamless integration with Kubernetes.

This approach allows teams to select the most appropriate storage option based on the nature of their workloads, performance requirements, and operational considerations.

## Consequences

- **Flexibility:** Offering both EFS and EBS as options provides the flexibility to choose the storage solution that best fits the application's needs.
- **Complexity:** Managing multiple storage classes may introduce additional complexity in provisioning and maintaining storage resources.
- **Documentation:** Clear guidelines and best practices will be needed to help teams decide which storage class to use for different scenarios.
- **Resource Allocation:** Teams may need to allocate resources for evaluating and monitoring both storage options to ensure optimal usage and performance.
- **Potential Training:** Developers and operations teams might require training to effectively utilize and manage both EFS and EBS within their Kubernetes deployments.
milldr marked this conversation as resolved.
Show resolved Hide resolved