旧版 SageMaker Operators for Kubernetes - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

旧版 SageMaker Operators for Kubernetes

本节基于 SageMaker Operators for Kubernetes 的原始版本。

重要

我们将停止对 SageMaker Operators for Kubernetes 的原始版本的开发和技术支持。

如果您当前正在使用 SageMaker Operators for Kubernetes 版本 v1.2.2 或更低版本,我们建议您将资源迁移到适用于 Amazon SageMaker 的 ACK 服务控制器。ACK 服务控制器是基于 Amazon Controllers for Kubernetes (ACK) 的新一代 SageMaker Operators for Kubernetes。

有关迁移步骤的信息,请参阅将资源迁移到最新 Operator

有关终止对 SageMaker Operators for Kubernetes 原始版本支持的常见问题解答,请参阅宣布终止对 SageMaker Operators for Kubernetes 原始版本的支持

安装 SageMaker Operators for Kubernetes

使用以下步骤安装和使用 SageMaker Operators for Kubernetes,通过 Amazon SageMaker 训练、优化和部署机器学习模型。

基于 IAM 角色的设置和 Operator 部署

以下几节描述了设置和部署 Operator 原始版本的步骤。

警告

提醒:以下步骤不会安装最新版本的 SageMaker Operators for Kubernetes。要安装基于 ACK 的全新 SageMaker Operators for Kubernetes,请参阅最新 SageMaker Operators for Kubernetes

先决条件

本教程假设您已完成以下先决条件:

  • 在用于访问 Kubernetes 集群的客户端计算机上安装以下工具:

    • kubectl 版本 1.13 或更高版本。使用您的 Amazon EKS 集群控制平面的一个次要版本内的 kubectl 版本。例如,1.13 kubectl 客户端使用 Kubernetes 1.13 和 1.14 集群。1.13 之前的版本不支持 OpenID Connect (OIDC)。

    • eksctl 版本 0.7.0 或更高版本

    • Amazon CLI 版本 1.16.232 或更高版本

    • (可选)Helm 版本 3.0 或更高版本

    • aws-iam-authenticator

  • 拥有创建角色并将策略附加角色的 IAM 权限。

  • 创建了一个用于运行 Operator 的 Kubernetes 集群。它应该是 Kubernetes 版本 1.13 或 1.14。有关使用 eksctl 自动创建集群的信息,请参阅 eksctl 入门。预置集群需要 20–30 分钟时间。

集群范围部署

请将 OpenID Connect (OIDC) 身份提供商 (IdP) 与您的角色关联,以便通过 IAM 服务进行身份验证,然后才能使用 IAM 角色部署 Operator。

为集群创建 OIDC 提供商

以下说明介绍如何创建 OIDC 提供商并将其与您的 Amazon EKS 集群关联。

  1. 按如下方式设置本地 CLUSTER_NAMEAWS_REGION 环境变量:

    # Set the Region and cluster export CLUSTER_NAME="<your cluster name>" export Amazon_REGION="<your region>"
  2. 使用以下命令将 OIDC 提供商与您的集群关联。有关更多信息,请参阅为集群上的服务账户启用 IAM 角色

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

    您的输出应与以下内容类似:

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

现在,集群已拥有 OIDC 身份提供商,您可以创建一个角色并授予 Kubernetes ServiceAccount 代入该角色的权限。

获取 OIDC ID

要设置 ServiceAccount,请使用以下命令获取 OIDC 发布者 URL:

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

该命令会返回类似以下内容的 URL:

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

在此 URL 中,值 D48675832CA65BD10A532F597OIDCID 是 OIDC ID。您集群的 OIDC ID 不同。您需要使用此 OIDC ID 值来创建角色。

如果输出为 None,则表示您的客户端版本过旧。要解决此问题,请运行以下命令:

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

返回的 OIDC URL 如下所示:

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
创建 IAM 角色
  1. 创建一个名为 trust.json 的文件,并在其中插入以下信任关系代码块。请务必将所有 <OIDC ID><Amazon account number><EKS Cluster region> 占位符替换为与您的集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<Amazon account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default" } } } ] }
  2. 运行以下命令,以创建一个具有 trust.json 中定义的信任关系的角色。此角色允许 Amazon EKS 集群从 IAM 获取和刷新凭证。

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

    您的输出应与以下内容类似:

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

    请记下 ROLE ARN;您将此值传递给您的 Operator。

将 AmazonSageMakerFullAccess 策略附加到角色

要授予该角色访问 SageMaker 的权限,请附加 AmazonSageMakerFullAccess 策略。如果您想限制 Operator 的权限,可以创建自己的自定义策略并附加该策略。

附加以下策略:

aws iam attach-role-policy --region ${AWS_REGION} --role-name <role name> --policy-arn arn:aws-cn:iam::aws:policy/AmazonSageMakerFullAccess

Kubernetes ServiceAccount sagemaker-k8s-operator-default 应具有 AmazonSageMakerFullAccess 权限。安装 Operator 时请确认这一点。

部署 Operator

部署 Operator 时,您可以使用 YAML 文件或 Helm 图表。

使用 YAML 部署 Operator

这是部署 Operator 的最简单方法。过程如下所述:

  1. 下载以下安装程序脚本。每当引用 installer.yaml 时,都用 installer_china.yaml 代替。

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/china/installer_china.yaml
  2. 编辑 installer.yaml 文件以替换 eks.amazonaws.com/role-arn。将此处的 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令部署集群:

    kubectl apply -f installer.yaml
使用 Helm 图表部署 Operator

使用提供的 Helm 图表安装 Operator。

  1. 使用以下命令克隆 Helm 安装程序目录:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/installer 文件夹。编辑 rolebased/values.yaml 文件,其中包含图表的高级参数。将此处的角色 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令安装 Helm 图表:

    kubectl create namespace sagemaker-k8s-operator-system helm install --namespace sagemaker-k8s-operator-system sagemaker-operator rolebased/

    如果您决定将 Operator 安装到指定的命名空间以外的命名空间,则需要调整 IAM 角色 trust.json 文件中定义的命名空间以使其匹配。

  4. 片刻之后,图表就会以随机生成的名称安装。运行以下命令验证安装是否成功:

    helm ls

    您的输出应与以下内容类似:

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator sagemaker-k8s-operator-system 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0
验证 Operator 部署
  1. 通过运行以下命令,您应该能够看到部署到集群的每个 Operator 的 SageMaker 自定义资源定义 (CRD):

    kubectl get crd | grep sagemaker

    您的输出应与以下内容类似:

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. 确保 Operator Pod 成功运行。使用以下命令列出所有 Pod:

    kubectl -n sagemaker-k8s-operator-system get pods

    您应该会在命名空间 sagemaker-k8s-operator-system 中看到一个名为 sagemaker-k8s-operator-controller-manager-***** 的 Pod,如下所示:

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

命名空间范围部署

您可以选择在单个 Kubernetes 命名空间的范围内安装 Operator。在此模式下,仅当资源在该命名空间内创建时,控制器才会监控并与 SageMaker 协调资源。这样就能对哪个控制器管理哪个资源进行更精细的控制。这对于部署到多个 Amazon 账户或控制哪些用户有权访问特定作业非常有用。

本指南概述了如何将 Operator 安装到特定的预定义命名空间中。要将控制器部署到第二个命名空间中,请从头到尾按照指南进行操作,并在每个步骤中更改命名空间。

为 Amazon EKS 集群创建 OIDC 提供商

以下说明介绍如何创建 OIDC 提供商并将其与您的 Amazon EKS 集群关联。

  1. 按如下方式设置本地 CLUSTER_NAMEAWS_REGION 环境变量:

    # Set the Region and cluster export CLUSTER_NAME="<your cluster name>" export Amazon_REGION="<your region>"
  2. 使用以下命令将 OIDC 提供商与您的集群关联。有关更多信息,请参阅为集群上的服务账户启用 IAM 角色

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

    您的输出应与以下内容类似:

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

现在,集群已拥有 OIDC 身份提供商,请创建一个角色并授予 Kubernetes ServiceAccount 代入该角色的权限。

获取您的 OIDC ID

要设置 ServiceAccount,请先使用以下命令获取 OpenID Connect 发布者 URL:

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

该命令会返回类似以下内容的 URL:

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

在此 URL 中,值 D48675832CA65BD10A532F597OIDCID 是 OIDC ID。您集群的 OIDC ID 不同。您需要使用此 OIDC ID 值来创建角色。

如果输出为 None,则表示您的客户端版本过旧。要解决此问题,请运行以下命令:

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

返回的 OIDC URL 如下所示:

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
创建您的 IAM 角色
  1. 创建一个名为 trust.json 的文件,并在其中插入以下信任关系代码块。请务必将所有 <OIDC ID><Amazon account number><EKS Cluster region> 占位符替换为与您的集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<Amazon account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default" } } } ] }
  2. 运行以下命令,以创建一个具有 trust.json 中定义的信任关系的角色。此角色允许 Amazon EKS 集群从 IAM 获取和刷新凭证。

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

    您的输出应与以下内容类似:

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:my-namespace:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

请记下 ROLE ARN。您将此值传递给您的 Operator。

将 AmazonSageMakerFullAccess 策略附加到您的角色

要授予该角色访问 SageMaker 的权限,请附加 AmazonSageMakerFullAccess 策略。如果您想限制 Operator 的权限,可以创建自己的自定义策略并附加该策略。

附加以下策略:

aws iam attach-role-policy --region ${AWS_REGION} --role-name <role name> --policy-arn arn:aws-cn:iam::aws:policy/AmazonSageMakerFullAccess

Kubernetes ServiceAccount sagemaker-k8s-operator-default 应具有 AmazonSageMakerFullAccess 权限。安装 Operator 时请确认这一点。

将 Operator 部署到您的命名空间

部署 Operator 时,您可以使用 YAML 文件或 Helm 图表。

使用 YAML 将 Operator 部署到您的命名空间

在命名空间范围内部署 Operator 分为两个部分。第一部分是在集群级别安装的一组 CRD。每个 Kubernetes 集群只需安装一次这些资源定义。第二部分是 Operator 权限和部署本身。

如果您尚未将 CRD 安装到集群中,请使用以下命令应用 CRD 安装程序 YAML:

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml

要将 Operator 安装到集群上,请执行以下操作:

  1. 下载以下 Operator 脚本。每当引用 operator.yaml 时,都用 operator_china.yaml 代替。

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/china/operator_china.yaml
  2. 使用以下命令更新安装程序 YAML,以将资源放入您指定的命名空间中:

    sed -i -e 's/PLACEHOLDER-NAMESPACE/<YOUR NAMESPACE>/g' operator.yaml
  3. 编辑 operator.yaml 文件以将资源放入您的 eks.amazonaws.com/role-arn 中。将此处的 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  4. 使用以下命令部署集群:

    kubectl apply -f operator.yaml
使用 Helm 图表将 Operator 部署到您的命名空间

在命名空间范围内部署 Operator 需要两个部分。第一部分是在集群级别安装的一组 CRD。每个 Kubernetes 集群只需安装一次这些资源定义。第二部分是 Operator 权限和部署本身。使用 Helm 图表时,必须先使用 kubectl 创建命名空间。

  1. 使用以下命令克隆 Helm 安装程序目录:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/installer/namespaced 文件夹。编辑 rolebased/values.yaml 文件,其中包含图表的高级参数。将此处的角色 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令安装 Helm 图表:

    helm install crds crd_chart/
  4. 使用以下命令创建所需的命名空间并安装 Operator:

    kubectl create namespace <namespace> helm install --n <namespace> op operator_chart/
  5. 片刻之后,图表就会以名称 sagemaker-operator 安装。运行以下命令验证安装是否成功:

    helm ls

    您的输出应与以下内容类似:

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator my-namespace 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0
验证 Operator 部署到您的命名空间
  1. 通过运行以下命令,您应该能够看到部署到集群的每个 Operator 的 SageMaker 自定义资源定义 (CRD):

    kubectl get crd | grep sagemaker

    您的输出应与以下内容类似:

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. 确保 Operator Pod 成功运行。使用以下命令列出所有 Pod:

    kubectl -n my-namespace get pods

    您应该会在命名空间 my-namespace 中看到一个名为 sagemaker-k8s-operator-controller-manager-***** 的 Pod,如下所示:

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

安装 SageMaker 日志 kubectl 插件

作为 SageMaker Operators for Kubernetes 的一部分,smlogs 插件可用于 kubectl。这样,SageMaker CloudWatch 日志就能通过 kubectl 流式传输。kubectl 必须安装到您的 PATH 上。以下命令将二进制文件放入主目录的 sagemaker-k8s-bin 目录,然后将该目录添加到您的 PATH

export os="linux" wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/v1/${os}.amd64.tar.gz tar xvzf ${os}.amd64.tar.gz # Move binaries to a directory in your homedir. mkdir ~/sagemaker-k8s-bin cp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/. # This line adds the binaries to your PATH in your .bashrc. echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc # Source your .bashrc to update environment variables: source ~/.bashrc

使用以下命令验证是否已正确安装 kubectl 插件:

kubectl smlogs

如果 kubectl 插件安装正确,则输出应如下所示:

View SageMaker logs via Kubernetes Usage: smlogs [command] Aliases: smlogs, SMLogs, Smlogs Available Commands: BatchTransformJob View BatchTransformJob logs via Kubernetes TrainingJob View TrainingJob logs via Kubernetes help Help about any command Flags: -h, --help help for smlogs Use "smlogs [command] --help" for more information about a command.

清理资源

要从集群中卸载 Operator,必须先确保从集群中删除所有 SageMaker 资源。否则会导致 Operator 删除操作挂起。运行以下命令以停止所有作业:

# Delete all SageMaker jobs from Kubernetes kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com

您应该可以看到类似于如下所示的输出内容:

$ kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com trainingjobs.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted $ kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted $ kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted $ kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted

删除所有 SageMaker 作业后,请参阅删除 Operator,以从集群中删除 Operator。

删除 Operator

删除基于集群的 Operator

使用 YAML 安装的 Operator

要从集群中卸载 Operator,请确保已从集群中删除所有 SageMaker 资源。否则会导致 Operator 删除操作挂起。

注意

删除集群之前,请务必从集群中删除所有 SageMaker 资源。参阅清理资源了解更多信息。

删除所有 SageMaker 作业后,请使用 kubectl 从集群中删除 Operator:

# Delete the operator and its resources kubectl delete -f /installer.yaml

您应该可以看到类似于如下所示的输出内容:

$ kubectl delete -f raw-yaml/installer.yaml namespace "sagemaker-k8s-operator-system" deleted customresourcedefinition.apiextensions.k8s.io "batchtransformjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "endpointconfigs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hostingdeployments.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hyperparametertuningjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "models.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "trainingjobs.sagemaker.aws.amazon.com" deleted role.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-role" deleted rolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-rolebinding" deleted service "sagemaker-k8s-operator-controller-manager-metrics-service" deleted deployment.apps "sagemaker-k8s-operator-controller-manager" deleted secrets "sagemaker-k8s-operator-abcde" deleted
使用 Helm 图表安装的 Operator

要删除 Operator CRD,请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表:

# get the helm charts helm ls # delete the charts helm delete <chart_name>

删除基于命名空间的 Operator

使用 YAML 安装的 Operator

要从集群中卸载 Operator,请先确保已从集群中删除所有 SageMaker 资源。否则会导致 Operator 删除操作挂起。

注意

删除集群之前,请务必从集群中删除所有 SageMaker 资源。参阅清理资源 了解更多信息。

删除所有 SageMaker 作业后,请使用 kubectl 先从命名空间中删除 Operator,然后从集群中删除 CRD。运行以下命令以从集群中删除 Operator:

# Delete the operator using the same yaml file that was used to install the operator kubectl delete -f operator.yaml # Now delete the CRDs using the CRD installer yaml kubectl delete -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml # Now you can delete the namespace if you want kubectl delete namespace <namespace>
使用 Helm 图表安装的 Operator

要删除 Operator CRD,请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表:

# Delete the operator helm delete <chart_name> # delete the crds helm delete crds # optionally delete the namespace kubectl delete namespace <namespace>

问题排查

调试失败的作业

使用以下步骤调试失败的作业。

  • 可以通过运行以下命令来检查作业状态:

    kubectl get <CRD Type> <job name>
  • 如果作业是在 SageMaker 中创建,则可以使用以下命令来查看 STATUSSageMaker Job Name

    kubectl get <crd type> <job name>
  • 您可以使用以下命令通过 smlogs 查找问题原因:

    kubectl smlogs <crd type> <job name>
  • 还可以使用以下命令通过 describe 命令获取有关作业的更多详细信息。输出中有一个 additional 字段,其中包含有关作业状态的更多信息。

    kubectl describe <crd type> <job name>
  • 如果作业不是在 SageMaker 中创建,则使用 Operator Pod 的日志来查找问题原因,如下所示:

    $ kubectl get pods -A | grep sagemaker # Output: sagemaker-k8s-operator-system sagemaker-k8s-operator-controller-manager-5cd7df4d74-wh22z 2/2 Running 0 3h33m $ kubectl logs -p <pod name> -c manager -n sagemaker-k8s-operator-system

删除 Operator CRD

如果删除作业失败,请检查 Operator 是否正在运行。如果 Operator 未运行,则必须使用以下步骤删除终结器:

  1. 在新终端中,使用 kubectl edit 在编辑器中打开作业,如下所示:

    kubectl edit <crd type> <job name>
  2. 编辑作业,通过从文件中删除以下两行来删除终结器。保存文件后,作业即被删除。

    finalizers: - sagemaker-operator-finalizer

每个区域中的映像和 SMlog

下表列出了每个区域中可用的 Operator 映像和 SMLog。

区域 控制器映像 Linux SMLog
us-east-1 957583890962.dkr.ecr.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-east-2 922499468684.dkr.ecr.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-west-2 640106867763.dkr.ecr.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
eu-west-1 613661167059.dkr.ecr.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz