产品概述
ScaleX - 云上的降本增效利器
轻松降低高达 90% 的云上 Kubernetes 成本。适用版本:0.0.3.0126
新特性:
- 从 0.0.2 版本开始,ScaleX 支持通过运行
scalex-svc自行部署 API 服务并使用 ScaleX 的核心功能。ScaleX API服务接受一个 JSON 字典作为请求体,并做出响应。本手册将重点介绍 CLI,如果您对Scalex API服务感兴趣,请自行尝试或联系我们。 - 从 0.0.2.0606 版本开始,ScaleX 支持高可用 Kubernetes 集群。请参考
cluster_config_ha.json和本文档来启动和管理您的高可用集群和架构。 - 从 0.0.2.0724 版本开始,ScaleX 支持 KataContainers 安全容器。您可以在节点组的级别指定是否启用 KataContainers 安全容器,需注意,KataContainers 需要节点支持虚拟化,请确保指定的节点组机型支持虚拟化或嵌套虚拟化。
- 从 0.0.3.0126 版本开始,ScaleX 从 JSON 文件迁移至 SQLite 数据库,提升可靠性和数据完整性。此次存储层重大重构通过 ACID 事务消除竞态条件,使用
scalex_migrate.py提供从 JSON 存储的自动迁移。 - 最新更新:
- 手动扩缩容:新增
scale命令用于手动管理工作节点(添加/删除操作),具有安全的删除规则 - 元数据管理:新增
metadata命令用于运行时配置更新(自动扩缩容策略、按需转竞价设置等) - 增强的 SSH 安全性:创建集群现在需要提供 SSH 私钥,ScaleX 将安全地管理这些密钥
- 手动扩缩容:新增
0. 前言
竞价实例(Spot Instance) 是显著降低云成本的关键选项。对于计算实例(如 Amazon EC2),与按需购买选项相比,竞价实例选项最多可将实例成本降低 90%,且无需任何前提条件、预付费或长期承诺。然而,由于以下挑战,运行和管理竞价实例并非易事:
- 不可预测的中断(无服务级别协议,SLA)
- 不同区域和可用区之间的供应量和价格动态变化
- 繁重的运维工作量
ScaleX (Scale in cloud and save the costs) 通过创新的架构设计和无服务器框架解决了上述挑战。借助 ScaleX,您可以轻松使用由竞价实例/按需实例驱动的完全托管、完全动态、完全自动化且超低成本的 Kubernetes 集群,而无需任何运维开销。
1. 前提条件
在开始之前,请确保您的本地环境满足以下要求:
- 操作系统(OS): Windows、GNU/Linux 或 macOS
- 处理器架构: macOS 版本支持
x86_64和arm64。Windows 和 GNU/Linux 版本目前仅支持x86_64。 - 云服务: 需要使用一个拥有大于所需权限范围(附录scalex-所需权限)的权限配置的 AWS 账户。
- 如果您在 EC2 实例上运行 ScaleX,请确保该实例所承担的角色(Role)具备大于所需权限范围(附录scalex-所需权限)的权限。
- 如果您使用 AWS 凭证(访问密钥 ID 和秘密访问密钥)运行 ScaleX,请确保密钥提供方(即持有密钥的用户或角色)拥有大于所需权限范围(附录scalex-所需权限)的权限。
- 简便但不建议的做法:为了便于快速上手,您可以授予以下服务的完全访问权限:EC2、S3、CloudWatch Logs、EventBridge、Lambda 和 IAM。对应的策略文档如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"s3:*",
"logs:*",
"events:*",
"scheduler:*",
"lambda:*",
"iam:*"
],
"Resource": "*"
}
]
}
2. 架构
2.1 高级架构
Local CLI or ScaleX API --- AWS APIs (EC2, VPC, S3, IAM, Lambda ...)
2.2 详细架构
CLI-+---Cluster-1---+--VPC---------------------------------------+
| *Without HA | +-Pubnet-1-+ +-Subnet-1--------------+ |
| | | nat | | workers in groups | |
| | | master | | route to nat | |
| | +----------+ +-----------------------+ |
| | +-Pubnet-2-+ +-Subnet-1--------------+ |
| | | | | workers in groups | |
| | | | | route to nat | |
| | +----------+ +-----------------------+ |
| | ... |
| +--------------------------------------------+
| +-Events----+---->+-Lambdas----+----+-Bucket-+
| | rules |---->| delete | | info |
| | schedules |---->| replace | | logs |
| +-----------+---->+------------+ +--------+
|
+---Cluster-2---+--VPC---------------------------------------+
| *With HA | +-Pubnet-1-+ +-Subnet-1--------------+ |
| | | nat | | master | |
| | | | | workers in groups | |
| | | | | route to nat | |
| | +----------+ +-----------------------+ |
| | +-Pubnet-2-+ +-Subnet-2--------------+ |
| | | nat | | master | |
| | | | | workers in groups | |
| | | | | route to nat | |
| | +----------+ +-----------------------+ |
| | +-Pubnet-3-+ +-Subnet-3--------------+ |
| | | nat | | master | |
| | | | | workers in groups | |
| | | | | route to nat | |
| | +----------+ +-----------------------+ |
| | ... |
| +--------------------------------------------+
| +-Events----+---->+-Lambdas----+----+-Bucket-+
| | rules |---->| delete | | info |
| | schedules |---->| replace | | logs |
| +-----------+---->+------------+ +--------+
|
+---...
|
+---Cluster-N---+---Stack-N