

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 舊版 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

本節以 [SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 的原始版本為基礎。

**重要**  
我們正在停止對 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) 原始版本的開發和技術支援。  
如果您目前使用的是 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) 的 `v1.2.2` 或以下版本，我們建議您將資源遷移到 [Amazon SageMaker 的 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。ACK 服務控制器是新一代的 SageMaker Operators for Kubernetes，以 [AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) 為基礎。  
如需與移轉步驟相關的資訊，請參閱[將資源遷移到最新的運算子](kubernetes-sagemaker-operators-migrate.md)。  
如需與終止支援 SageMaker Operators for Kubernetes 原始版本相關的常見問題的答案，請參閱[宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本](kubernetes-sagemaker-operators-eos-announcement.md)

**Topics**
+ [安裝 SageMaker AI Operators for Kubernetes](#kubernetes-sagemaker-operators-eos-install)
+ [使用 Amazon SageMaker AI 任務](kubernetes-sagemaker-jobs.md)
+ [將資源遷移到最新的運算子](kubernetes-sagemaker-operators-migrate.md)
+ [宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本](kubernetes-sagemaker-operators-eos-announcement.md)

## 安裝 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-eos-install"></a>

使用下列步驟安裝和使用 SageMaker AI Operators for Kubernetes，透過 Amazon SageMaker AI 訓練、調整和部署機器學習模型。

**Topics**
+ [IAM 角色型設定和運算子部署](#iam-role-based-setup-and-operator-deployment)
+ [清除資源](#cleanup-operator-resources)
+ [刪除運算子](#delete-operators)
+ [故障診斷](#troubleshooting)
+ [每個區域的映像和 SMLog](#images-and-smlogs-in-each-region)

### IAM 角色型設定和運算子部署
<a name="iam-role-based-setup-and-operator-deployment"></a>

以下各節說明設定和部署原始版本運算子的步驟。

**警告**  
**提醒：**下列步驟不會安裝 SageMaker AI Operators for Kubernetes 的最新版本。若要安裝新 ACK 型 SageMaker AI Operators for Kubernetes，請參閱[最新 SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators-ack.md)。

#### 先決條件
<a name="prerequisites"></a>

本指南假設已完成下列先決條件：
+ 在用來存取 Kubernetes 叢集的用戶端電腦上安裝下列工具：
  + [`kubectl`](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 1.13 版本或更新版本。使用 `kubectl` 版本，必須與 Amazon EKS 叢集控制平面的版本差距在一個版本以內。例如，1.13 `kubectl` 用戶端可搭配使用 Kubernetes 1.13 和 1.14 版叢集。早於 1.13 的版本不支援 OpenID Connect (OIDC)。
  + [`eksctl`](https://github.com/weaveworks/eksctl) 0.7.0 版本或更新版本 
  + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 1.16.232 版或更新版本 
  + (可選) [Helm](https://helm.sh/docs/intro/install/) 3.0 版本或更新版本 
  + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) 
+ 擁有建立角色並將政策附加至角色的 IAM 許可。
+ 已建立要在其上執行運算子的 Kubernetes 叢集。應該是 Kubernetes 版本 1.13 或 1.14。對於使用 `eksctl` 自動建立的叢集，請參閱[eksctl 入門](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)。佈建叢集需要 20–30 分鐘才能完成。

#### 叢集範圍部署
<a name="cluster-scoped-deployment"></a>

使用 IAM 角色部署運算子之前，請先將 OpenID Connect (OIDC) 身分提供者 (IdP) 與您的角色建立關聯，以便透過 IAM 服務進行驗證。

##### 為您的叢集建立 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 AWS_REGION="{{<your region>}}"
   ```

1. 使用下列命令將 OIDC 提供者與叢集相關聯。如需詳細資訊，請參閱[為叢集上的服務帳戶啟用 IAM 角色](https://docs.aws.amazon.com/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 服務帳戶許可來擔任該角色。

##### 取得 OIDC ID
<a name="get-the-oidc-id"></a>

若要設定服務帳戶，請使用下列命令取得 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. 建立一個名為 `trust.json` 的檔案，並將以下信任關係代碼塊插入其中。請務必使用與叢集對應的值取代所有 `<OIDC ID>`、`<AWS account number>`和 `<EKS Cluster region>` 預留位置。

------
#### [ 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"
             }
           }
         }
       ]
     }
   ```

------

------
#### [ 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`；您會將此值傳遞給運算子。

##### 將 AmazonSageMakerFullAccess 政策附加到此角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-the-role"></a>

若要授予角色 SageMaker AI 的存取權，請附加 [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 政策。如果想要限制運算子的權限，您可以建立並附加自訂政策。

 若要附加 `AmazonSageMakerFullAccess`，請執行下列命令：

```
aws iam attach-role-policy --role-name {{<role name>}}  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes 服務帳戶 `sagemaker-k8s-operator-default` 應該具有 `AmazonSageMakerFullAccess` 許可。當您安裝運算子時，請確認這一點。

##### 部署運算子
<a name="deploy-the-operator"></a>

部署運算子時，您可以使用 YAML 檔案或 Helm Chart。

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

這是部署運算子的最簡單方法。程序如下：

1. 使用以下命令下載安裝程式指令碼：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/installer.yaml
   ```

1. 編輯 `installer.yaml` 檔案以取代 `eks.amazonaws.com/role-arn`。將此處的 ARN 取代為您建立的 OIDC 型角色的 Amazon Resource Name (ARN)。

1. 使用下列命令部署叢集：

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

##### 使用 Helm Chart 部署運算子
<a name="deploy-the-operator-using-helm-charts"></a>

使用提供的 Helm Chart 安裝運算子。

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 Resource Name (ARN)。

1. 使用以下命令安裝 Helm Chart：

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

   如果您決定將運算子安裝到指定命名空間以外的其他命名空間，則需要調整 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
   ```

##### 驗證運算子部署
<a name="verify-the-operator-deployment"></a>

1. 您應該可以透過執行下列命令，查看部署至叢集的每個運算子的 SageMaker AI 自訂資源定義 (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
   ```

1. 確定運算子 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 命名空間的範圍內安裝操作員。在此模式下，只有當資源是在該 SageMaker AI 命名空間內建立時，控制器才會監視並協調資源。這樣可以更好地控制由哪個控制器管理哪些資源。這對於部署到多個 AWS 帳戶或控制哪些使用者可以存取特定任務非常有用。

本指南概述如何將運算子安裝到預先定義的特定命名空間。若要將控制器部署到第二個命名空間，請從頭到尾遵循指南進行操作，並在每個步驟中變更命名空間。

##### 為您的 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 AWS_REGION="{{<your region>}}"
   ```

1. 使用下列命令將 OIDC 提供者與叢集相關聯。如需詳細資訊，請參閱[為叢集上的服務帳戶啟用 IAM 角色](https://docs.aws.amazon.com/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 服務帳戶許可來擔任該角色。

##### 取得 OIDC ID
<a name="get-your-oidc-id"></a>

若要設定服務帳戶，首先請使用下列命令取得 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 角色
<a name="create-your-iam-role"></a>

1. 建立一個名為 `trust.json` 的檔案，並將以下信任關係代碼塊插入其中。請務必使用與叢集對應的值取代所有 `<OIDC ID>`、`<AWS account number>`、`<EKS Cluster region>` 和 `<Namespace>` 預留位置。在本指南中，使用 `my-namespace` 作為 `<Namespace>` 的值。

------
#### [ 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"
             }
           }
         }
       ]
     }
   ```

------

------
#### [ 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`。您會將此值傳遞給運算子。

##### 將 AmazonSageMakerFullAccess 政策附加到您的角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-your-role"></a>

若要授予角色 SageMaker AI 的存取權，請附加 [`AmazonSageMakerFullAccess`](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 政策。如果想要限制運算子的權限，您可以建立並附加自訂政策。

 若要附加 `AmazonSageMakerFullAccess`，請執行下列命令：

```
aws iam attach-role-policy --role-name {{<role name>}}  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes 服務帳戶 `sagemaker-k8s-operator-default` 應該具有 `AmazonSageMakerFullAccess` 許可。當您安裝運算子時，請確認這一點。

##### 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace"></a>

部署運算子時，您可以使用 YAML 檔案或 Helm Chart。

##### 使用 YAML 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

在命名空間範圍內部署運算子分為兩個部分。第一部分是在叢集層級安裝的一組 CRD。每個 Kubernetes 叢集只需安裝一次這些資源定義。第二部分是運算子許可和部署本身。

 如果您尚未將 CRD 安裝到叢集中，請使用下列命令套用 CRD 安裝程式 YAML：

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

將運算子安裝到叢集：

1. 使用以下命令下載運算子安裝程式：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/operator.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 Resource Name (ARN)。

1. 使用下列命令部署叢集：

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

##### 使用 Helm Chart 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

在命名空間範圍內部署運算子需要分為兩個部分。第一部分是在叢集層級安裝的一組 CRD。每個 Kubernetes 叢集只需安裝一次這些資源定義。第二部分是運算子許可和部署本身。使用 Helm Chart 時，您必須首先使用 `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 Resource Name (ARN)。

1. 使用以下命令安裝 Helm Chart：

   ```
   helm install crds crd_chart/
   ```

1. 建立必要的命名空間並使用下列命令安裝運算子：

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

##### 驗證運算子已部署到命名空間
<a name="verify-the-operator-deployment-to-your-namespace"></a>

1. 您應該可以透過執行下列命令，查看部署至叢集的每個運算子的 SageMaker AI 自訂資源定義 (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
   ```

1. 確定運算子 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 AI 日誌 `kubectl` 外掛程式
<a name="install-the-amazon-sagemaker-logs-kubectl-plugin"></a>

 作為 SageMaker AI Operators for Kubernetes 的一部分，您可以針對 `kubectl` 使用 `smlogs` [外掛程式](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)。這允許使用 `kubectl` 串流 SageMaker AI CloudWatch 日誌。`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 資源。不這樣做會導致運算子刪除操作掛起。執行下列命令來停止所有工作：

```
# 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 任務後，請參閱[刪除運算子](#delete-operators)，以從叢集中刪除運算子。

### 刪除運算子
<a name="delete-operators"></a>

#### 刪除叢集型運算子
<a name="delete-cluster-based-operators"></a>

##### 使用 YAML 安裝的運算子
<a name="operators-installed-using-yaml"></a>

若要從叢集中解除安裝運算子，請確保已從叢集中刪除所有 SageMaker AI 資源。不這樣做會導致運算子刪除操作掛起。

**注意**  
刪除叢集之前，請務必刪除叢集中的所有 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 Chart 安裝的運算子
<a name="operators-installed-using-helm-charts"></a>

若要刪除運算子 CRD，請先刪除所有執行中的工作。然後使用以下命令刪除用於部署運算子的 Helm Chart：

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

#### 刪除命名空間型運算子
<a name="delete-namespace-based-operators"></a>

##### 使用 YAML 安裝的運算子
<a name="operators-installed-with-yaml"></a>

若要從叢集中解除安裝運算子，首先請確保已從叢集中刪除所有 SageMaker AI 資源。不這樣做會導致運算子刪除操作掛起。

**注意**  
刪除叢集之前，請務必刪除叢集中的所有 SageMaker AI 資源。如需詳細資訊，請參閱[清除資源](#cleanup-operator-resources)。

刪除所有 SageMaker AI 任務後，請首先使用 `kubectl` 從命名空間刪除運算子，然後從叢集中刪除 CRD。執行下列命令以從叢集中刪除運算子：

```
# 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 Chart 安裝的運算子
<a name="operators-installed-with-helm-charts"></a>

若要刪除運算子 CRD，請先刪除所有執行中的工作。然後使用以下命令刪除用於部署運算子的 Helm Chart：

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

#### 刪除運算子 CRD
<a name="deleting-an-operator-crd"></a>

如果刪除工作失敗，請檢查運算子是否正在執行。如果運算子沒有執行，則您必須執行以下步驟刪除終結器：

1. 在新的終端機中，使用 `kubectl edit` 在編輯器中打開工作，如下所示：

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

1. 透過從檔案中移除以下兩行來編輯工作，以刪除終結器。儲存檔案，該作業將被刪除。

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

### 每個區域的映像和 SMLog
<a name="images-and-smlogs-in-each-region"></a>

下表列出每個區域中可用的運算子映像和 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](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)  | 