本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装 Kubeflow Pipelines
Kubeflow Pipelines (KFP)
你可以在现有的亚马逊 Elastic Kubernetes 服务(亚马逊KFP)上部署 Kubeflow Pipelines EKS (),也可以创建新的亚马逊集群。EKS使用网关节点与您的集群进行交互。网关节点可以是您的本地计算机或 Amazon EC2 实例。
以下部分将指导您完成设置和配置这些资源的步骤。
选择安装选项
Kubeflow Pipelines 可用作 Kubeflow 完整发行版的核心组件, Amazon 也可以作为独立安装使用。
选择适用于您的使用案例的选项:
-
要使用 Kubeflow Pipelines 之外的其他 Kubeflow 组件,请选择完整的 Kubeflow on Amazon 分发版
部署。 -
要在不使用 Kubeflow 其他组件的情况下使用 Kubeflow Pipelines,请独立安装 Kubeflow Pipelines。
要在上安装 Kubeflow 的完整版本 Amazon,请从部署指南上的 Kubeflow 中选择普通 Amazon 部署
本节假设您的用户有权创建角色并为该角色定义策略。
设置网关节点
您可以使用本地计算机或 Amazon EC2 实例作为网关节点。网关节点用于创建亚马逊EKS集群并访问 Kubeflow Pipelines 用户界面。
完成以下步骤以设置节点。
-
创建网关节点。
您可以使用启动和EC2配置中的步骤,使用现有的 Amazon 实例,也可以使用最新 Ubuntu 18.04 DLAMI 版本创建新实例。DLAMI
-
创建IAM角色以授予网关节点对 Amazon 资源的访问权限。
创建具有以下资源权限的IAM角色: CloudWatch、、、Amazon Amazon CloudFormation IAM、Amazon S3 EC2、Amazon EKS。
将以下策略附加到该IAM角色:
-
CloudWatchLogsFullAccess
-
IAMFullAccess
-
亚马逊 3 FullAccess
-
Amazon EC2FullAccess
-
mazonEKSAdmin策略(使用 Amazon EKS 基于身份的策略示例中的架构创建此策略)
有关为IAM角色添加IAM权限的信息,请参阅添加和删除IAM身份权限。
-
-
安装以下工具和客户端
在您的网关节点上安装和配置以下工具和资源以访问 Amazon EKS 集群和KFP用户界面 (UI)。
-
Amazon CLI:用于处理 Amazon 服务的命令行工具。有关 Amazon CLI 配置信息,请参阅配置 Amazon CLI。
-
aws-iam-authenticator0.1.31 及更高版本:一种使用 Amazon IAM凭据对 Kubernetes 集群进行身份验证的工具。
-
eksctl
0.15 以上的版本:用于处理亚马逊EKS集群的命令行工具。 -
kubectl
:用于与 Kubernetes 集群一起使用的命令行工具。该版本需要在一个次要版本中与您的 Kubernetes 版本相匹配。 -
Amazon SDK for Python (Boto3)
. pip install boto3
-
设置亚马逊集EKS群
-
如果您没有现有 Amazon EKS 集群,请在网关节点的命令行中运行以下步骤,否则请跳过此步骤。
-
运行以下命令创建版本为 1.17 或更高版本的 Amazon EKS 集群。将
<clustername>
替换为您的任何集群名称。eksctl create cluster --name
<clustername>
--region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1 -
集群创建完成后,通过列出集群的节点来确保您可以访问集群。
kubectl get nodes
-
-
使用以下命令确保当前
kubectl
上下文指向您的集群。当前上下文在输出中以星号 (*) 标记。kubectl config get-contexts CURRENT NAME CLUSTER *
<username>
@<clustername>
.us-east-1.eksctl.io<clustername>
.us-east-1.eksctl.io -
如果所需的集群未配置为当前的默认集群,请使用以下命令更新默认集群。
aws eks update-kubeconfig --name
<clustername>
--region us-east-1
安装 Kubeflow Pipelines
从网关节点的终端运行以下步骤,以在集群上安装 Kubeflow Pipelines。
-
安装所有 cert-manager 组件
。 kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
-
安装 Kubeflow Pipelines。
export PIPELINE_VERSION=2.0.0-alpha.5 kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION" kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
-
确保 Kubeflow Pipelines 服务和其他相关资源正在运行。
kubectl -n kubeflow get all | grep pipeline
您的输出应与以下内容类似。
pod/ml-pipeline-6b88c67994-kdtjv 1/1 Running 0 2d pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk 1/1 Running 0 2d pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj 1/1 Running 0 2d pod/ml-pipeline-ui-66cc4cffb6-cmsdb 1/1 Running 0 2d pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj 1/1 Running 0 2d pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4 1/1 Running 0 2d service/ml-pipeline ClusterIP 10.100.170.170 <none> 8888/TCP,8887/TCP 2d service/ml-pipeline-ui ClusterIP 10.100.38.71 <none> 80/TCP 2d service/ml-pipeline-visualizationserver ClusterIP 10.100.61.47 <none> 8888/TCP 2d deployment.apps/ml-pipeline 1/1 1 1 2d deployment.apps/ml-pipeline-persistenceagent 1/1 1 1 2d deployment.apps/ml-pipeline-scheduledworkflow 1/1 1 1 2d deployment.apps/ml-pipeline-ui 1/1 1 1 2d deployment.apps/ml-pipeline-viewer-crd 1/1 1 1 2d deployment.apps/ml-pipeline-visualizationserver 1/1 1 1 2d replicaset.apps/ml-pipeline-6b88c67994 1 1 1 2d replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf 1 1 1 2d replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7 1 1 1 2d replicaset.apps/ml-pipeline-ui-66cc4cffb6 1 1 1 2d replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4 1 1 1 2d replicaset.apps/ml-pipeline-visualizationserver-9c47576f4 1 1 1 2d
配置您的管道访问权限 SageMaker
在本节中,您将创建一个IAM执行角色,授予 Kubeflow Pipeline 容器访问服务的权限。 SageMaker
SageMaker 组件版本 2 的配置
要运行适用于 Kubeflow Pipelines 的 SageMaker 组件版本 2,你需要安装适用于 Kubernetes 的 Operato SageMaker r
重要
如果您使用的是 Kubeflow Pipelines 独立部署,请按照本节进行操作。如果您使用的是 Kubeflow 版本 1.6.0-aws-b1.0.0 或更高版本的 Amazon 发行版,则组件版本 2 已经设置完毕。 SageMaker
-
为 Kubernetes 安装 SageMaker 操作员以使用 SageMaker 组件版本 2。
-
为 Kubeflow Pipelines 容器使用的执行角色(服务账号)配置RBAC权限。在 Kubeflow Pipelines 独立部署中,使用
pipeline-runner
服务账号在命名空间kubeflow
中执行管道运行。-
创建一个 RoleBinding
,授予服务帐号管理 SageMaker自定义资源的权限。 cat > manage_sagemaker_cr.yaml <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: manage-sagemaker-cr namespace: kubeflow subjects: - kind: ServiceAccount name: pipeline-runner namespace: kubeflow roleRef: kind: ClusterRole name: ack-sagemaker-controller apiGroup: rbac.authorization.k8s.io EOF
kubectl apply -f manage_sagemaker_cr.yaml
-
确保 RoleBinding 是通过运行以下命令创建:
kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
-
SageMaker 组件版本 1 的配置
要运行 Kubeflow Pipelines 的 SageMaker 组件版本 1,Kubeflow Pipeline 容器需要访问权限。 SageMaker
重要
无论你是在 Amazon 部署时使用完整的 Kubeflow 还是独立的 Kubeflow Pilepines,都要按照本节进行操作。
要创建授予 Kubeflow 管道容器访问权限的IAM执行角色 SageMaker,请按照以下步骤操作:
-
导出您的集群名称(例如 my-cluster-name)和集群区域(例如 us-ea st-1)。
export CLUSTER_NAME=
my-cluster-name
export CLUSTER_REGION=us-east-1
-
根据您的安装导出命名空间和服务账户名称。
-
要在 Amazon 安装时获得完整的 Kubeflow,请将您的配置文件
namespace
(例如 kubeflow-user-example-com)和默认编辑器导出为服务账号。export NAMESPACE=
kubeflow-user-example-com
export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor -
要独立部署 Pipelines,请将 kubeflow 导出为
namespace
,将 pipeline-runner 导出为服务账户。export NAMESPACE=kubeflow export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
-
-
使用以下命令为 Amazon EKS 集群创建IAMOIDC提供程序。
eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} --approve
-
为 KFP Pod 创建IAM执行角色以访问 Amazon 服务 (SageMaker, CloudWatch)。
eksctl create iamserviceaccount \ --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \ --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \ --override-existing-serviceaccounts \ --approve
将管道权限配置为访问 SageMaker 组件版本 1 后,请按照 Kubeflow 上的 Kubeflow 管道 SageMaker 组件指南中的文档进行操作。 Amazon
访问KFP用户界面(Kubeflow 控制面板)
Kubeflow Pipelines UI 用于管理和跟踪集群上的实验、作业和运行。有关如何从网关节点访问 Kubeflow Pipelines UI 的说明,请按照本节中适用于您的部署选项的步骤进行操作。
按照Amazon 网站上 Kubeflow 上的
按照以下步骤使用端口转发从您的网关节点访问 Kubeflow Pipelines UI。
设置到 KFP UI 服务的端口转发
从网关节点的命令行运行以下命令。
-
使用以下命令验证 KFP UI 服务是否正在运行。
kubectl -n kubeflow get service ml-pipeline-ui NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ml-pipeline-ui ClusterIP 10.100.38.71 <none> 80/TCP 2d22h
-
运行以下命令设置到 KFP UI 服务的端口转发。这会将 KFP UI 转发到网关节点上的端口 8080,并允许您从浏览器访问KFP用户界面。
kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
如果没有活动,则远程计算机的端口转发就会停止。如果您的控制面板无法获取日志或更新,请再次运行此命令。如果命令返回错误,请确保您尝试使用的端口上没有正在运行的进程。
访问KFP用户界面服务
您访问 KFP UI 的方法取决于您的网关节点类型。
-
本地计算机作为网关节点:
-
在浏览器中访问控制面板,如下所示:
http://localhost:8080
-
选择管道以访问管道 UI。
-
-
作为网关节点的 Amazon EC2 实例:
-
您需要在 Amazon EC2 实例上设置SSH隧道,才能从本地计算机的浏览器访问 Kubeflow 控制面板。
在本地计算机上的新终端会话中,运行以下命令。
<public-DNS-of-gateway-node>
替换为在 Amazon EC2 控制台上找到的您的实例的 IP 地址。你也可以使用公众DNS。将<path_to_key>
替换为用于访问网关节点的 PEM 密钥的路径。public_DNS_address=
<public-DNS-of-gateway-node>
key=<path_to_key>
on Ubuntu: ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address} or on Amazon Linux: ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address} -
在浏览器中访问控制面板。
http://localhost:9000
-
选择 “管道” 以访问KFP用户界面。
-
(可选)授予 SageMaker笔记本实例访问 Amazon 的权限EKS,并从您的笔记本运行KFP管道。
SageMaker 笔记本实例是运行 Jupyter 笔记本应用程序的完全托管的 Amazon EC2 计算实例。您可以使用笔记本实例来创建和管理 Jupyter 笔记本,然后使用 Amazon SDK for Python (Boto3) 或定义、编译、部署和运行KFP管道。KFP CLI
-
按照创建 SageMaker 笔记本实例中的步骤创建您的笔记本实例,然后将
S3FullAccess
策略附加到其IAM执行角色。 -
在网关节点的命令行中,运行以下命令以检索您创建的 notebook 实例ARN的IAM角色。将
<instance-name>
替换为实例的名称。aws sagemaker describe-notebook-instance --notebook-instance-name
<instance-name>
--region<region>
--output text --query 'RoleArn'此命令以以下ARN
arn:aws:iam::<account-id>:role/<role-name>
格式输出IAM角色。请注意这一点ARN。 -
运行此命令将以下策略(A AmazonSageMakerFullAccess mazonEKSWorker NodePolicy、AmazonS3FullAccess)附加到此IAM角色。
<role-name>
替换为你<role-name>
的ARN。aws iam attach-role-policy --role-name
<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam attach-role-policy --role-name<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam attach-role-policy --role-name<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess -
Amazon EKS 集群使用IAM角色来控制对集群的访问权限。这些规则是在名为
aws-auth
的配置映射中实施。eksctl
提供了读取和编辑aws-auth
配置映射的命令。只有有权访问集群的用户才能编辑此配置映射。system:masters
是具有集群超级用户权限的默认用户组之一。将您的用户添加到此组,或创建具有更严格权限的组。 -
运行以下命令以将角色绑定到您的集群。
<IAM-Role-arn>
替换ARN为IAM角色的。<your_username>
可以是任何唯一的用户名。eksctl create iamidentitymapping \ --cluster
<cluster-name>
\ --arn<IAM-Role-arn>
\ --group system:masters \ --username<your-username>
\ --region<region>
-
在您的 SageMaker 实例上打开 Jupyter 笔记本并运行以下命令以确保它可以访问集群。
aws eks --region
<region>
update-kubeconfig --name<cluster-name>
kubectl -n kubeflow get all | grep pipeline