

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 古い 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 サービスコントローラーは、[AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) をベースにした新世代の SageMaker Operators for Kubernetes です。  
移行ステップについては、「[リソースを最新のオペレータに移行する](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 クラスターへのアクセスに使用するクライアントマシンに次のツールをインストールします。
  + [https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) バージョン 1.13 以降。Amazon EKS クラスターコントロールプレーンとのマイナーバージョンの相違が 1 つ以内である `kubectl` バージョンを使用します。例えば、1.13 の `kubectl` クライアントは、Kubernetes 1.13 と 1.14 のクラスターで動作します。OpenID Connect (OIDC) は 1.13 より前のバージョンではサポートされていません。
  + [https://github.com/weaveworks/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` を使用したクラスターの自動作成については、「[Amazon EKS の開始方法 – 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) ID プロバイダー（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 ID プロバイダーが関連付けられました。ロールを作成し、ロールを引き受けるための ServiceAccount 許可を Kubernetes に付与できます。

##### 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. `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 ServiceAccount `sagemaker-k8s-operator-default` には `AmazonSageMakerFullAccess` アクセス許可が必要です。オペレーターをインストールするときにこれを確認します。

##### オペレーターをデプロイする
<a name="deploy-the-operator"></a>

オペレーターをデプロイするときは、YAML ファイルか Helm チャートのいずれかを使用できます。

##### 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 リソースネーム (ARN) に置き換えます。

1. 以下のコマンドを使用してクラスターをデプロイします。

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

##### Helm チャートを使用してオペレーターをデプロイする
<a name="deploy-the-operator-using-helm-charts"></a>

提供された Helm チャートを使用して、オペレーターをインストールします。

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

   指定した名前空間以外の名前空間にオペレーターをインストールする場合は、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. オペレーターポッドが正常に実行されていることを確認します。すべてのポッドを一覧表示するには、以下のコマンドを使用します。

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

   以下のように、名前空間 `sagemaker-k8s-operator-system` に `sagemaker-k8s-operator-controller-manager-*****` という名前のポッドが表示されます。

   ```
   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 アカウントにデプロイしたり、特定のジョブにアクセスできるユーザーを制御する場合に便利です。

このガイドでは、オペレーターを特定の定義済み名前空間にインストールする方法を説明します。コントローラーを 2 番目の名前空間にデプロイするには、このガイドの手順を最初から最後まで実行し、各ステップで名前空間を変更します。

##### 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 ID プロバイダーが関連付けられ、ロールを作成して、ロールを引き受けるための ServiceAccount 許可を Kubernetes に付与できるようになりました。

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

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 ロールを作成する
<a name="create-your-iam-role"></a>

1. `trust.json` という名前のファイルを作成し、以下の信頼関係コードブロックを挿入します。`<OIDC ID>`、`<AWS account number>`、`<EKS Cluster region>`、`<Namespace>` のプレースホルダーはすべて、クラスターに対応する値に必ず置き換えてください。このガイドでは、`<Namespace>` の値に `my-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 へのアクセス権を付与するには、[https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/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 ServiceAccount `sagemaker-k8s-operator-default` には `AmazonSageMakerFullAccess` アクセス許可が必要です。オペレーターをインストールするときにこれを確認します。

##### オペレーターを名前空間にデプロイする
<a name="deploy-the-operator-to-your-namespace"></a>

オペレーターをデプロイするときは、YAML ファイルか Helm チャートのいずれかを使用できます。

##### YAML を使用してオペレーターを名前空間にデプロイする
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

名前空間の範囲内へのオペレーターのデプロイは、2 つの部分で構成されます。1 つ目は、クラスターレベルでインストールされる CRD のセットです。これらのリソース定義は、Kubernetes クラスターごとに 1 回だけインストールする必要があります。2 つ目の部分は、オペレーターのアクセス許可とデプロイそのものです。

 クラスターに CRD をまだインストールしていない場合は、以下のコマンドを使用して CRD インストーラ YAML を適用します。

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

オペレーターをクラスターにインストールするには: 

1. 以下のコマンドを使用して、オペレーターインストーラ YAML をダウンロードします。

   ```
   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 リソースネーム (ARN) に置き換えます。

1. 以下のコマンドを使用してクラスターをデプロイします。

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

##### Helm チャートを使用してオペレーターを名前空間にデプロイする
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

名前空間の範囲内へのオペレーターのデプロイには、2 つの部分が必要です。1 つ目は、クラスターレベルでインストールされる CRD のセットです。これらのリソース定義は、Kubernetes クラスターごとに 1 回だけインストールする必要があります。2 つ目の部分は、オペレーターのアクセス許可とデプロイそのものです。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. 必要な名前空間を作成し、以下のコマンドを使用してオペレーターをインストールします。

   ```
   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. オペレーターポッドが正常に実行されていることを確認します。すべてのポッドを一覧表示するには、以下のコマンドを使用します。

   ```
   kubectl -n my-namespace get pods
   ```

   以下のように、名前空間 `my-namespace` に `sagemaker-k8s-operator-controller-manager-*****` という名前のポッドが表示されます。

   ```
   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/)を使用できます。これにより、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 リソースを確実に削除する必要があります。リソースが残っていると、オペレーターの削除オペレーションがハングします。次のコマンドを実行してすべてのジョブを停止します。

```
# 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 チャートを使用してインストールしたオペレーター
<a name="operators-installed-using-helm-charts"></a>

オペレーター CRD を削除するには、最初に実行中のジョブをすべて削除します。次に、以下のコマンドを使用して、オペレーターのデプロイに使用した Helm チャートを削除します。

```
# 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 チャートを使用してインストールしたオペレーター
<a name="operators-installed-with-helm-charts"></a>

オペレーター CRD を削除するには、最初に実行中のジョブをすべて削除します。次に、以下のコマンドを使用して、オペレーターのデプロイに使用した 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 で作成されていなかった場合は、次のとおり演算子のポッドのログを使用して問題の原因を見つけます。

  ```
  $ 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. ファイルから以下の 2 行を削除してジョブを編集し、ファイナライザーを削除します。ファイルを保存すると、ジョブが削除されます。

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