最近在研究 GitLab 的 DevOps 工作流,看到 GitLab 可以和 K8s 通过 API 进行交互,于是决定研究一下各种云的 K8s 服务,做一个简单的对比。
部署方式
根据部署方式的不同,我们可以将不同的云服务进行分类:
- 全托管:Master 节点和 Worker 节点完全由云来管理,只提供 API 来调用,一般按照实际的 CPU 和内存使用来计费
- 半托管:Master 节点由云来管理,自行购买 Worker 节点。可以修改部分 Master 节点的配置,所有容器在自己的机器上运行
- 全独立:Master 节点和 Worker 节点都由用户管理,云只负责节点的初始化和小部分维护工作。可以修改几乎所有 Master 的配置,整个集群完全独立
首先来看下各个云提供商所提供的服务类型:
提供商\类型 | 全托管 | 半托管 | 全独立 |
腾讯云 | CIS | TKE | TKE 独立部署 |
阿里云 | Serverless Kubernetes | Kubernetes 托管版 | Kubernetes |
Azure | 容器实例 | Kubernetes 服务 | / |
AWS | ECS | EKS | / |
GCP | / | GKE | GKE On-Prem 仅能在非 GCE 机器部署 |
其中,全托管模式只有阿里云提供 k8s API 调用,其余提供商都不直接支持 k8s API
半托管模式基本相似,都是由云服务商运行 Master Node,区别在于 AWS 的 EKS 对 Master 节点收费,其余服务商均不收取 Master 节点的费用。
版本支持
然后再来看看各个服务商对于 k8s 版本的支持:
提供商\版本 | 最低版本 | 最高版本 | 是否支持升级 |
腾讯云 | 1.8.13 | 1.12.4 | 否 |
阿里云 | 1.11.5 | 1.12.6 | 是 |
Azure | 1.10.12 | 1.14.0 | 是 |
AWS | 1.10 | 1.12 | 是 |
GCP | 1.11.10 | 1.13.6 | 是 |
可以看到,除了 Azure 对于新版的支持非常激进外,大部分云提供商都很谨慎的对版本升级进行跟进。GCP 是个例外,毕竟 K8s 是 Google 搞出来的,似乎比所有人都更激进。
价格
最后再来看看各个服务商的价格:
提供商\版本 | Master 节点 | 常驻 Worker | 突发 Worker |
腾讯云 | / | ¥49.5/m | 同 ECS |
阿里云 | / | 至少两个 2c4G $57.41/m ¥396.129/m |
|
Azure | / | 至少一个 2c4G $49.18/m ¥339.342/m |
同普通虚拟机 |
AWS | $0.20/hr ¥1.38/hr ¥993.6/m |
/ | 同 ECS |
GCP | / | 1c1.7G $13.8/m ¥95.22/m |
同 GCS $0.031611 / vCPU hour $0.004237 / GB hour 按秒计费,最低 1 分钟 |
1美元按6.9人民币计算
总体来说,如果是不常用的集群,节点费用上 GCP 较低,AWS 则由于 Master 管理费的存在很不划算。
而阿里云则是比较奇葩,基础版本的机型无法使用。内存 CPU 较小的机型则不能使用阿里定制的网络插件。而且,阿里云是唯一一个必须至少有 2 个常驻节点的服务商。所以整体来说成本较高。
总结
对于短时间使用的测试集群,腾讯云是一个不错的选择。整体价格低廉,成本低。GCP 也非常不错,就算是长时间闲置也不会有太高的花费。
对于生产集群,考虑服务稳定性和后续的持续维护性,Azure 和 GCP 都是不错的选择。Azure 价格略高,但是相对来说周边生态较好。GCP 则费用低廉。如果对 Azure 周边生态有所依赖的,可以尝试一下。而对于个人开发者来说,由于 GCP 还有免费额度,可能是初期一个较好的选择。