Amazon EKS 是一项托管 Kubernetes 服务,用于在 AWS Cloud 和本地数据中心上运行 Kubernetes。 作为一种标准的云原生解决方案,EKS 已经成为部署服务的主流选择。 本篇教程将帮助你快速熟悉如何在 EKS 上部署和运行 Xorbits,进而通过一个有趣的例子对提交的代码进行分析。 话不多说,现在开始~
准备EKS集群
安装 kubectl
kubectl
是一个命令行工具,用于与 Kubernetes API 服务器进行通信,你可以用它方便地管理你的 Kubernetes 集群。
参考 安装教程 来安装 kubectl
。
安装 eksctl
eksctl
是用于创建和管理 Amazon EKS 上 Kubernetes 集群的简单命令行工具。相较于 AWS 控制台,它提供一些直观的选项以创建和管理你的 EKS 集群。
参考 安装教程 来安装 eksctl
。
创建 EKS 集群
参考 创建集群 以使用 eksctl
命令行工具创建一个 EKS 集群。
注意,本篇教程中使用 Dockerhub 中的官方镜像,请确保你所创建的 EKS 集群可以访问该命名空间。
默认选项下,由 eksctl
创建的 EKS 集群拥有公共网络的访问权限。关于 eksctl
更多详细的网络配置选项,参阅 eksctl 文档。
安装 AWS Load Balancer
最后一步是在 EKS 中安装 AWS Load Balancer
, 参考 AWS Load Balancer文档。
Xorbits 基于 Ingress
暴露服务地址,无论你的 EKS 集群资源来自 AWS Fargate
还是 AWS EC2,Ingress
服务都将为 Xorbits 代理出一个地址。
部署 Xorbits
现在你拥有一个 EKS 集群,下面开始部署 Xorbits。部署过程相当简单:
- 安装 Xorbits
0.1.1
或以上版本,以及 Kubernetes SDK 和 S3 相关依赖$ pip install 'xorbits[kubernetes,aws]>=0.1.1'
- 部署代码
from kubernetes import config from xorbits.deploy.kubernetes import new_cluster cluster = new_cluster( config.new_client_from_config(), worker_num=5, worker_cpu=16, worker_mem='128g', supervisor_cpu=4, supervisor_mem='8g')
大功告成!部署代码运行完成,则你能在控制台看到形如 Xorbits endpoint http://<ingress_service_ip>:80 is ready!
的日志。
这表示一个包含 1 个 supervisor
和 5 个 worker
的 Xorbits 集群已存在于你的 EKS 中。
Xorbits 部署接口依赖 Kubernetes API 客户端,它从 config.new_client_from_config()
接口创建而来。
因此,如果你有多个 Kubernetes 环境,请确保当前 kubectl
指向的集群是你要部署的 EKS 集群。运行以下命令可以检查:
$ kubectl config current-context
管理 Xorbits 集群
获取 Xorbits 命名空间
$ kubectl get namespaces
Kubernetes 中的 Xorbits 命名空间以 xorbits-ns-
开头,后接一个随机字符串。例如:
$ kubectl get namespaces
NAME STATUS AGE
default Active 38d
kube-node-lease Active 38d
kube-public Active 38d
kube-system Active 38d
xorbits-ns-cc53e351744f4394b20180a0dafd8b91 Active 4m5s
最后一行就是 Xorbits 的命名空间。每部署一次 Xorbits,都会生成独一无二的命名空间。
所有 Xorbits 相关的资源都将存在于它的命名空间中,方便管理。多个命名空间一般通过第三列 AGE
加以区分,表示存活时间。
检查 Xorbits pods 状态
$ kubectl get po -n <your_namespace>
例如:
$ kubectl get po -n xorbits-ns-cc53e351744f4394b20180a0dafd8b91
NAME READY STATUS RESTARTS AGE
xorbitssupervisor-7589b8ff4b-2kw9j 1/1 Running 0 5m23s
xorbitsworker-5f8db4f798-b9xlk 1/1 Running 0 5m22s
xorbitsworker-5f8db4f798-hx2zx 1/1 Running 0 5m22s
xorbitsworker-5f8db4f798-jzxm6 1/1 Running 0 5m22s
xorbitsworker-5f8db4f798-pr9lc 1/1 Running 0 5m22s
xorbitsworker-5f8db4f798-xlc25 1/1 Running 0 5m22s
对于 supervisor
和 worker
,pod 名称分别以 xorbitssupervisor
和 xorbitsworker
开头。
Pod 启动过程中若产生任何错误,则可以通过 kubectl
命令支持的方式查看和调试。
例如,用kubectl describe pod <pod_name>
命令查看 Pod 的状态信息和用 kubectl logs <pod_name>
命令查看 Pod 日志。Xorbits 完全兼容原生 kubectl
的任何使用方式。
检查 Xorbits 地址
$ kubectl get ingress -n <your_namespace>
例如:
$ kubectl get ingress -n xorbits-ns-cc53e351744f4394b20180a0dafd8b91
NAME CLASS HOSTS ADDRESS PORTS AGE
xorbits-ingress alb * k8s-xorbitsn-xorbitsi-25a70c9131-156674448.us-east-2.elb.amazonaws.com 80 5m28s
Xorbits 在 EKS 中的服务地址通过 Ingress
暴露。该地址展示在 ADDRESS
列中。
此地址与上文中部署后控制台上日志中的地址一样。
你可以直接在浏览器中打开它以查看 Xorbits 集群的网页,或在 xorbits.init()
接口中使用以向集群提交任务。例如:
import xorbits
xorbits.init('http://<ingress_service_ip>:80')
# your codes here, for example:
import xorbits.pandas as pd
print(pd.DataFrame({'col': [1, 2, 3]}).sum())
检查 Xorbits 网页
Xorbits 网页的地址即为 Ingress 服务代理出来的地址。网页提供了集群相关信息的总览,如集群状态、CPU和内存资源使用量和总量、会话监控和任务状态等等。例如:
该页面展示了所有 worker 的状态、资源使用量和总量信息。
销毁 Xorbits 集群
你可以简单地将 Xorbits 的命名空间删除,与该 Xorbits 集群相关的所有资源会一并释放。
$ kubectl delete namespace <your_namespace>
运行示例
这里我们提供一个使用 Xorbits 的示例,它从 AWS S3 上读取 MovieLens 数据集,
处理并计算这些数据,最后产生一个简单的数据分析结果。
为此你的 EKS 集群需要能够访问 PyPI,同时 Xorbits 集群需要在部署前需要安装 s3fs 依赖,这可以通过部署接口的pip
选项实现。
部署示例代码如下所示,需要 Xorbits v0.1.1
及以上版本。例如:
from kubernetes import config
from xorbits.deploy.kubernetes import new_cluster
cluster = new_cluster(
config.new_client_from_config(),
worker_num=5,
worker_cpu=4, worker_mem='16g',
supervisor_cpu=4, supervisor_mem='8g',
pip=['s3fs'])
数据分析代码如下,请确保你的 EKS 集群能够访问数据所在的 AWS S3 桶。你可以在 这里 下载完整数据集。
import xorbits
import xorbits.pandas as pd
xorbits.init('<your Xorbits endpoint>')
storage_options = {
"key": "<your AWS access key id>",
"secret": "<your AWS secret access key>",
}
bucket = "s3://<your S3 bucket>/"
movies = pd.read_csv(
bucket + "movies.csv",
storage_options=storage_options)
ratings = pd.read_csv(
bucket + "ratings.csv",
storage_options=storage_options)
movie_ratings = ratings.groupby(
'movieId', as_index=False)\
.agg({'rating': ['mean', 'count']})
movie_ratings.columns = ['movieId', 'rating', 'count']
movie_ratings = movie_ratings[movie_ratings['count'] > 100]
top_100_movies = movie_ratings.sort_values(
'rating', ascending=False)[:100]
top_100_movies_detail = \
top_100_movies.merge(movies[['movieId', 'title']])
print(top_100_movies_detail)
此代码对有 100 个及以上打分记录的电影进行了统计,输出评分由高到低的 100 部电影的信息。 输出如下:
movieId rating count title
0 171011 4.483096 1124 Planet Earth II (2016)
1 159817 4.464797 1747 Planet Earth (2006)
2 318 4.413576 81482 Shawshank Redemption, The (1994)
3 170705 4.398599 1356 Band of Brothers (2001)
4 171495 4.326715 277 Cosmos
.. ... ... ... ...
95 48516 4.121237 25343 Departed, The (2006)
96 903 4.120822 15945 Vertigo (1958)
97 1280 4.120717 3181 Raise the Red Lantern (Da hong deng long gao g...
98 260 4.120189 68717 Star Wars: Episode IV - A New Hope (1977)
99 191997 4.117021 329 The Hounds of Baskerville (2012)
[100 rows x 4 columns]
你可以打开 Xorbits 网页来分析刚才执行的示例代码。在 Sessions -> Task ID
页面,你能够看到示例代码的执行图。如果有多个会话和任务,最新生成的总是在页面最下方。如下图:
在 Supervisors / Workers -> endpoint -> LOGS
页面,你能看到 Xorbits 执行过程中的日志。
EKS 中的 Xorbits 默认开启了 DEBUG
级别的日志,你可以通过该页面右上方的 SAVE
按钮下载这些日志。
尽情探索 Xorbits 网页的各个部分和各种功能,我们也会持续增强网页的能力。
总结
本教程对如何在 Amazon EKS 中部署、管理和运行 Xorbits 进行了详细的解释, 同时通过一个简单的数据分析示例展示如何将代码提交至部署后的 Xorbits 集群运行, 进而借助 Xorbits 网页展示诸如执行图和运行日志的集群详细信息。 Xorbits 旨在部署和运行上尽可能友好、直观和高效。我们期待您的使用和反馈!