

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Kubernetes 的老式 SageMaker AI 运算符
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

本节基于适用于 [Kubernetes SageMaker 的人工智能运算符的原](https://github.com/aws/amazon-sagemaker-operator-for-k8s)始版本。

**重要**  
我们将停止对 [Kubernetes SageMaker 操作](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)员的原始版本的开发和技术支持。  
如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[Amazon 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。  
有关迁移步骤的信息，请参阅[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)。  
有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

**Topics**
+ [为 Kubernetes 安装 SageMaker 人工智能运算符](#kubernetes-sagemaker-operators-eos-install)
+ [使用 Amazon A SageMaker I Jobs](kubernetes-sagemaker-jobs.md)
+ [将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)
+ [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

## 为 Kubernetes 安装 SageMaker 人工智能运算符
<a name="kubernetes-sagemaker-operators-eos-install"></a>

使用以下步骤安装和使用适用于 Kubernetes 的 SageMaker AI 运算符，通过 Amazon AI 训练、调整和部署机器学习模型。 SageMaker 

**Topics**
+ [基于 IAM 角色的设置和 Operator 部署](#iam-role-based-setup-and-operator-deployment)
+ [清理 资源](#cleanup-operator-resources)
+ [删除 Operator](#delete-operators)
+ [问题排查](#troubleshooting)
+ [图片 SMlogs 和每个区域](#images-and-smlogs-in-each-region)

### 基于 IAM 角色的设置和 Operator 部署
<a name="iam-role-based-setup-and-operator-deployment"></a>

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

**警告**  
**提醒：**以下步骤不会安装最新版本的 Kubernet SageMaker es 人工智能操作员。要安装适用于 Kubernetes 的全新基于 ACK SageMaker 的人工智能运算符，请参阅。[适用于 Kubernetes 的最新 SageMaker 人工智能运算符](kubernetes-sagemaker-operators-ack.md)

#### 先决条件
<a name="prerequisites"></a>

本教程假设您已完成以下先决条件：
+ 在用于访问 Kubernetes 集群的客户端计算机上安装以下工具：
  + [https://docs.amazonaws.cn/eks/latest/userguide/install-kubectl.html](https://docs.amazonaws.cn/eks/latest/userguide/install-kubectl.html) 版本 1.13 或更高版本。使用您的 Amazon EKS 集群控制面板的一个次要版本内的 `kubectl` 版本。例如，1.13 `kubectl` 客户端使用 Kubernetes 1.13 和 1.14 集群。1.13 之前的版本不支持 OpenID Connect (OIDC)。
  + [https://github.com/weaveworks/eksctl](https://github.com/weaveworks/eksctl) 版本 0.7.0 或更高版本 
  + [Amazon CLI](https://docs.amazonaws.cn/cli/latest/userguide/install-cliv1.html) 版本 1.16.232 或更高版本 
  + （可选）[Helm](https://helm.sh/docs/intro/install/) 版本 3.0 或更高版本 
  + [aws-iam-authenticator](https://docs.amazonaws.cn/eks/latest/userguide/install-aws-iam-authenticator.html) 
+ 拥有创建角色并将策略附加角色的 IAM 权限。
+ 创建了一个用于运行 Operator 的 Kubernetes 集群。它应该是 Kubernetes 版本 1.13 或 1.14。有关使用 `eksctl` 自动创建集群的信息，请参阅 [eksctl 入门](https://docs.amazonaws.cn/eks/latest/userguide/getting-started-eksctl.html)。预置集群需要 20–30 分钟时间。

#### 集群范围部署
<a name="cluster-scoped-deployment"></a>

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

##### 为集群创建 OIDC 提供商
<a name="create-an-openid-connect-provider-for-your-cluster"></a>

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

1. 按如下方式设置本地 `CLUSTER_NAME` 和 `AWS_REGION` 环境变量：

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="{{<your cluster name>}}"
   export Amazon_REGION="{{<your region>}}"
   ```

1. 使用以下命令将 OIDC 提供商与您的集群关联。有关更多信息，请参阅[为集群上的服务账户启用 IAM 角色](https://docs.amazonaws.cn/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

   ```
   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
<a name="get-the-oidc-id"></a>

要设置 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 角色
<a name="create-an-iam-role"></a>

1. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws:iam::{{111122223333}}: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"
             }
           }
         }
       ]
     }
   ```

------

   创建一个名为 `trust.json` 的文件，并在其中插入以下信任关系代码块。请务必将所有 `<OIDC ID>`、`<Amazon account number>` 和 `<EKS Cluster region>` 占位符替换为与您的集群对应的值。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::{{111122223333}}: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"
             }
           }
         }
       ]
     }
   ```

------

1. 运行以下命令，以创建一个具有 `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 策略附加到角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-the-role"></a>

要授予角色访问 SageMaker AI 的权限，请附加[AmazonSageMakerFullAccess](https://console.amazonaws.cn/iam/home?#/policies/arn:aws:iam::aws:policy/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
<a name="deploy-the-operator"></a>

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

##### 使用 YAML 部署 Operator
<a name="deploy-the-operator-using-yaml"></a>

这是部署 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
   ```

1. 编辑 `installer.yaml` 文件以替换 `eks.amazonaws.com/role-arn`。将此处的 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

1. 使用以下命令部署集群：

   ```
   kubectl apply -f installer.yaml
   ```

##### 使用 Helm 图表部署 Operator
<a name="deploy-the-operator-using-helm-charts"></a>

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

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

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

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

1. 使用以下命令安装 Helm 图表：

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

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

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

   ```
   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 部署
<a name="verify-the-operator-deployment"></a>

1. 通过运行以下命令，您应该能够看到部署到集群的每个操作员的 SageMaker AI 自定义资源定义 (CRDs)：

   ```
   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
   ```

1. 确保 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
   ```

#### 命名空间范围部署
<a name="namespace-scoped-deployment"></a>

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

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

##### 为 Amazon EKS 集群创建 OIDC 提供商
<a name="create-an-openid-connect-provider-for-your-eks-cluster"></a>

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

1. 按如下方式设置本地 `CLUSTER_NAME` 和 `AWS_REGION` 环境变量：

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="{{<your cluster name>}}"
   export Amazon_REGION="{{<your region>}}"
   ```

1. 使用以下命令将 OIDC 提供商与您的集群关联。有关更多信息，请参阅[为集群上的服务账户启用 IAM 角色](https://docs.amazonaws.cn/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

   ```
   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
<a name="get-your-oidc-id"></a>

要进行设置 ServiceAccount，请先使用以下命令获取 OpenID Connect 颁发者网址：

```
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 中，值 D48675832 CA65 BD10 A532F597OIDCID 是 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 角色
<a name="create-your-iam-role"></a>

1. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
           "Federated": "arn:aws:iam::{{111122223333}}: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"
             }
           }
         }
       ]
     }
   ```

------

   创建一个名为 `trust.json` 的文件，并在其中插入以下信任关系代码块。请务必将所有 `<OIDC ID>`、`<Amazon account number>` 和 `<EKS Cluster region>` 占位符替换为与您的集群对应的值。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::{{111122223333}}: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"
             }
           }
         }
       ]
     }
   ```

------

1. 运行以下命令，以创建一个具有 `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 策略附加到您的角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-your-role"></a>

要授予角色访问 SageMaker AI 的权限，请附加[https://console.amazonaws.cn/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.amazonaws.cn/iam/home?#/policies/arn:aws:iam::aws:policy/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 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace"></a>

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

##### 使用 YAML 将 Operator 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

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

 如果您尚未将安装到集群 CRDs 中，请使用以下命令应用 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
   ```

1. 使用以下命令更新安装程序 YAML，以将资源放入您指定的命名空间中：

   ```
   sed -i -e 's/PLACEHOLDER-NAMESPACE/{{<YOUR NAMESPACE>}}/g' operator.yaml
   ```

1. 编辑 `operator.yaml` 文件以将资源放入您的 `eks.amazonaws.com/role-arn` 中。将此处的 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

1. 使用以下命令部署集群：

   ```
   kubectl apply -f operator.yaml
   ```

##### 使用 Helm 图表将 Operator 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

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

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

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

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

1. 使用以下命令安装 Helm 图表：

   ```
   helm install crds crd_chart/
   ```

1. 使用以下命令创建所需的命名空间并安装 Operator：

   ```
   kubectl create namespace {{<namespace>}}
   helm install --n {{<namespace>}} op operator_chart/
   ```

1. 片刻之后，图表就会以名称 `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 部署到您的命名空间
<a name="verify-the-operator-deployment-to-your-namespace"></a>

1. 通过运行以下命令，您应该能够看到部署到集群的每个操作员的 SageMaker AI 自定义资源定义 (CRDs)：

   ```
   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
   ```

1. 确保 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
   ```

#### 安装 A SageMaker I 日志`kubectl`插件
<a name="install-the-amazon-sagemaker-logs-kubectl-plugin"></a>

 [作为 Kubernetes SageMaker 人工智能运算符的一部分，你可以将该`smlogs`插件用于。](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/) `kubectl`这允许使用 SageMaker AI CloudWatch 日志进行流式传输`kubectl`。 `kubectl`必须安装到你的 [PATH](http://www.linfo.org/path_env_var.html) 上。以下命令将二进制文件放入主目录的 `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 AI 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.
```

### 清理 资源
<a name="cleanup-operator-resources"></a>

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

```
# Delete all SageMaker AI 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 AI 作业后，请参阅[删除 Operator](#delete-operators)从集群中删除操作员。

### 删除 Operator
<a name="delete-operators"></a>

#### 删除基于集群的 Operator
<a name="delete-cluster-based-operators"></a>

##### 使用 YAML 安装的 Operator
<a name="operators-installed-using-yaml"></a>

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

**注意**  
在删除集群之前，请务必从集群中删除所有 SageMaker AI 资源。请参阅[清理 资源](#cleanup-operator-resources)了解更多信息。

删除所有 SageMaker AI 作业后，使用`kubectl`从集群中删除操作员：

```
# 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
<a name="operators-installed-using-helm-charts"></a>

要删除操作员 CRDs，请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表：

```
# get the helm charts
helm ls
  
# delete the charts
helm delete {{<chart_name>}}
```

#### 删除基于命名空间的 Operator
<a name="delete-namespace-based-operators"></a>

##### 使用 YAML 安装的 Operator
<a name="operators-installed-with-yaml"></a>

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

**注意**  
在删除集群之前，请务必从集群中删除所有 SageMaker AI 资源。请参阅[清理 资源](#cleanup-operator-resources)了解更多信息。

删除所有 SageMaker AI 作业后，使用`kubectl`先从命名空间中删除操作员，然后再从集群 CRDs 中删除运算符。运行以下命令以从集群中删除 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
<a name="operators-installed-with-helm-charts"></a>

要删除操作员 CRDs，请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表：

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

### 问题排查
<a name="troubleshooting"></a>

#### 调试失败的作业
<a name="debugging-a-failed-job"></a>

使用以下步骤调试失败的作业。
+ 可以通过运行以下命令来检查作业状态：

  ```
  kubectl get {{<CRD Type>}} {{<job name>}}
  ```
+ 如果任务是在 SageMaker AI 中创建的，则可以使用以下命令查看`STATUS`和`SageMaker Job Name`：

  ```
  kubectl get {{<crd type>}} {{<job name>}}
  ```
+ 您可以使用以下命令通过 `smlogs` 查找问题原因：

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

  ```
  kubectl describe {{<crd type>}} {{<job name>}}
  ```
+ 如果任务不是在 SageMaker AI 中创建的，则使用操作员的 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
<a name="deleting-an-operator-crd"></a>

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

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

   ```
   kubectl edit {{<crd type>}} {{<job name>}}
   ```

1. 编辑作业，通过从文件中删除以下两行来删除终结器。保存文件后，作业即被删除。

   ```
   finalizers:
     - sagemaker-operator-finalizer
   ```

### 图片 SMlogs 和每个区域
<a name="images-and-smlogs-in-each-region"></a>

下表列出了每个区域 SMLogs 中可用的操作员图像。


|  Region  |  控制器映像  |  Linu SMLogs  | 
| --- | --- | --- | 
|  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](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](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](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](https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 