如何使用Terraform在AWS上设置Kubeflow
欢迎回来!在最后一篇文章,我们看到了如何在本地安装Kubeflow以进行实验和学习。现在您非常确定要在生产中使用它。你要怎么做呢?
在大多数情况下,这意味着在云平台(如AWS或GCP)上设置Kubeflow。这正是这篇文章将帮助你做的!
在AWS上设置Kubeflow的主要步骤如下:
- 启动一个AWS实例
- 安装工具
- 安装Python 3.8
- 克隆Kubeflow Git存储库
- 配置AWS凭证
- 更新Terraform配置文件
- 使用Terraform部署Kubeflow
- 设置Kubeflow Dashboard
这看起来很多,但我们将引导您完成每一步,简化过程。所有的错误都是我们犯的,所以你不必这么做!
你还在等什么?我们开始吧!
我应该使用哪种AWS实例?
归根结底,AWS是一个复杂的庞然大物。有几种方法可以启动AWS实例,有时不同的区域支持不同的方法。如果您需要帮助,请咨询AWS启动实例的文档。
你应该知道的一件事是,你不需要一台带有强大GPU的机器。在本教程中,我使用了m5.xlarge运行Ubuntu 22.04的class机器。但是,您可以使用较小的机器类型。
本教程的其余部分假设您已经SSH到您的AWS实例并从那里运行命令,除非另有说明。
我需要哪些工具?
为了处理设置过程,我们需要安装一些标准工具,例如git
,旋度
,解压缩
等……
首先,我们要确保我们的存储库和当前安装的软件包是最新的:
Sudo apt update Sudo apt upgrade
然后我们安装(大部分)我们需要使用的工具:
Sudo apt install git curl unzip tar make vim wget -y
如何安装Python 3.8?
AWS风格的Kubeflow需要Python 3.8! What is this, 2019?
要做到这一点,你需要先加上deadsnakes恰当的存储库。明白了吗?死蛇?无论如何,你可以这样做:
Sudo add-apt-repository ppa:deadsnakes/ppa -y Sudo apt update
然后就可以安装了Python 3.8和distutils用这个命令打包:
安装python3.8-distutils
最后,为了确保AWS Kubeflow脚本能够正常工作,我们需要确保这个Python版本是默认使用的版本。要做到这一点,我们将别名命令:
别名python = python3.8
我需要克隆哪些Kubleflow库?
你需要克隆两个Git仓库:
- AWS的特殊Kubeflow清单回购,以及
- 标准的Kubeflow manifest repo
首先设置一些环境变量:
export KUBEFLOW_RELEASE_VERSION=v1.7.0 . export AWS_RELEASE_VERSION=v1.7.0-aws-b1.0.0 . export
接下来克隆AWS的Kubeflow清单存储库并签出相应的发布版本:
git clone cd kubeflow-manifest git checkout ${AWS_RELEASE_VERSION}
然后在你刚刚克隆的AWS清单下克隆标准Kubeflow清单:
git clone——branch ${KUBEFLOW_RELEASE_VERSION} upstream
最后,您将使用repo中的Makefile来安装安装Kubeflow所需的一系列工具,包括kubectl
,kustomize
,起程拓殖
:
使安装工具
如何配置AWS凭据?
在解决了所有依赖项之后,是时候配置您的AWS凭据了。
首先,您将使用aws
的配置文件下配置凭据kubeflow
。你可以给你的个人资料起任何你想要的名字,但是描述性是很有帮助的!
Aws configure——profile=kubeflow
这将要求您提供四项信息:
- AWS接入密钥ID
- AWS秘密访问密钥
- 默认地区名称
- 默认输出格式
前两个可以从您的AWS控制台创建。如果你点击右上角的用户名,然后选择安全认证,您将能够创建这两个密钥。

为默认地区名称,使用您想要启动Kubernetes节点的相同区域。这可能是您启动实例的同一区域。
集默认输出格式来json。
接下来,我们将设置一些环境变量,使事情变得更简单:
export AWS_PROFILE=kubeflow export CLUSTER_NAME=awesome-kubeflow export CLUSTER_REGION=…
确保你设置好AWS_PROFILE
到使用上一个命令创建的相同名称。
你可以设置CLUSTER_NAME
任何你想要的,只要不超过19个字符。
最后,确保你的CLUSTER_REGION
与你之前设置的匹配。
地形配置文件需要做哪些修改?
我们需要对两个默认的Terraform配置文件进行一些轻微的更新。
首先切换到正确的目录:
cd部署/香草/起程拓殖
然后,使用您最喜欢的编辑器(如vim
)编辑variables.tf。您需要做的是找到默认值的定义node_instance_type
和node_instance_type_gpu
。将它们设置为项目所需的值。
变量"node_instance_type" {description = " EKS节点的实例类型" type = string default = "m5. "xlarge"} variable "node_instance_type_gpu" {description = " gpu EKS节点的实例类型。将导致创建一个单独的gpu节点组时不为空" type = string default = "g4dn。超大"}
在上面的例子中,我们已经离开了m5.xlarge
作为默认值node_instance_type
,但更改了默认值node_instance_type_gpu
从没有一个
来g4dn.xlarge
。如果你把它放在没有一个
,您的集群将不支持运行需要gpu的作业。
接下来,编辑main.tf设置的值min_size
,desired_size
和max_size
下managed_node_group_cpu
和managed_node_group_gpu
。如果您对默认设置感到满意,那么您不需要更改任何内容。
下面是我们使用的一个例子:
Managed_node_group_cpu = {node_group_name = "managed-ondemand-cpu" instance_types = [var.node_instance_type] min_size = 2 desired_size = 2 max_size = 5 subnet_ids = module.vpc。Private_subnets} managed_node_group_gpu = local。using_gpu吗?{node_group_name = " managedondemand -gpu" instance_types = [var.node_instance_type_gpu] min_size = 1 desired_size = 1 max_size = 3 ami_type = "AL2_x86_64_GPU" subnet_ids = module.vpc。Private_subnets}:空
最后,我们需要用下面的命令创建一个新的配置文件:
cat < sample.auto.tfvars cluster_name="${cluster_name}" cluster_region="${cluster_region}" EOF
的值cluster_name
和cluster_region
使用的变量main.tf和variables.tf。
如何使用Terraform部署Kubeflow ?
现在我们已经准备好使用Terraform部署Kubeflow了。首先,我们要初始化一个包含Terraform配置文件的工作目录:
起程拓殖init
这是在编写新的Terraform配置后应该运行的第一个命令,可以安全地运行多次。
接下来我们运行:
起程拓殖计划
这将创建一个执行计划,它允许您预览Terraform计划对基础结构进行的更改。
最后,我们使用repo的Makefile进行部署:
使部署
这要花很多时间。所以现在是喝杯咖啡或茶的最佳时机。
☕
如何设置Kubeflow仪表板?
如果部署时没有出现错误,就可以设置对Kubeflow Dashboard的访问了。
我们需要做的第一件事是运行:
$(terraform output -raw configure_kubectl)
此命令更新kubeconfig
。
接下来,我们需要改回存储库的根目录:
cd ../../../
然后我们可以使用Makefile将适当的端口转发到入口网关:
让左前
最后,我们需要使用SSH隧道从本地机器到AWS上的Kubernetes集群:
ssh -i -L 8080:localhost:8080 -N ubuntu@ -o ExitOnForwardFailure=yes
一旦你这样做,你就可以打开了http://localhost:8080在你最喜欢的浏览器中:

默认用户名为user@example.com密码是12341234。登录后,您将看到Kubeflow仪表板

从这里你可以退房Kubeflow的组件文档以了解有关仪表板的更多信息以及如何开始使用它。
我怎样才能停止一切?
当你准备好停止一切时,回到部署/香草/起程拓殖
文件夹并运行:
要删除
故障排除
因为AWS和Kubernetes都是非常复杂的系统,所以有时可能会出现问题。以下是我在启动Kubeflow集群时遇到的一些问题。
错误的区域
运行时地形初始化&&地形计划
你看:
││错误:配置Terraform AWS提供程序:验证提供程序证书:从STS中检索调用者身份:操作错误STS: GetCallerIdentity, https响应错误StatusCode: 0, requesttid:,请求发送失败,Post " ":拨号tcp:查找sts.us-east-2a.amazonaws.com在127.0.0.53:53:没有这样的主机││与提供程序["registry.terraform. htm "/hashicorp/aws"],│on main。│54:提供程序“aws”{│
在设置Terraform配置文件时,您可能有错误的区域。可以通过编辑sample.auto.tfvars文件。
确保这个区域不是以字母结尾的。也就是说,即使你的机器说它在里面us-east-2a
,使用us-east-2
作为所有配置文件的区域。
群集名称错误
如果出现以下错误:
││错误:变量的值无效。│├──────────────────││var.cluster_name is "kubeflow-minimagen-3"││集群名称必须在[1,19]个字符之间。││这是由variables.tf:6,3-13的验证规则检查的。╵
这意味着您选择的群集名称太长。长度不超过19个字符。
配额限制
如果,在部署时,您得到:
││错误:等待EKS节点组(kubeflow-minimagen3:managed-ondemand-gpu-2023050809570864240000000d)创建:意外状态“CREATE_FAILED”,目标为“ACTIVE”。│* ekks -managed-ondemand-gpu-2023050809570864240000000d-f4c3fd65-8fe7-40f7-ce85-85088124e3eb: AsgInstanceLaunchFailures:无法启动按需实例。VcpuLimitExceeded -您请求的vCPU容量超过了当前vCPU限制0,允许指定实例类型所属的实例桶。请访问请求调整此限制。启动EC2实例失败。模块。aws_eks_managed_node_groups["mg_gpu"].aws_eks_node_group。│on .terraform/modules/eks_blueprints/modules/aws-eks-managed-node-groups/main。在资源“aws_eks_node_group”“managed_ng”中的第一行:│1:资源“aws_eks_node_group”“managed_ng”{│
这意味着您已经超出了特定机器类型的配额限制。在这种情况下,它是基于gpu的机器。既然我们要求g4dn.xlarge,我们需要申请增加配额运行按需G和VT实例。
增加你的配额是很重要的随需应变实例和不现货实例或专用的主机。
???
如果你得到这个神秘的错误:
││与module.eks_blueprints_kubernetes_addons.module.aws_fsx_csi_driver[0].module.helm_addon.helm_release。Addon[0],│on .terraform/modules/eks_blueprints_kubernetes_addons/modules/kubernetes-addons/helm-addon/main。│1:资源“helm_release”“addon”{│
这似乎是一个间歇性的错误。试着换个地方。
恭喜你!现在您已经在AWS上设置了Kubeflow !为此,您已经安装并学习了:
- 关于Kubeflow,
- 更多关于起程拓殖,
- 还有很多关于AWS
这是一个巨大的成就,也是了解更多Kubeflow(以及Kubernetes)的一个很好的开始。
在我们关于Kubeflow的下一篇文章中,我们将向您展示如何使用Kubeflow在大约87 GB的数据上训练文本到图像的模型。听起来很有趣,对吧?
如果你有任何问题,请随时联系我。你可以加入我们的不和在美国,我们建立了一个充满活力、乐于助人、友好的社区。