

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 구형 Kubernetes용 SageMaker AI Operators
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

이 섹션은 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s)의 오리지널 버전을 기반으로 합니다.

**중요**  
[Kubernetes용 SageMaker Operators ](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)오리지널 버전의 개발 및 기술 지원을 중단합니다.  
현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.  
마이그레이션 단계에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)섹션을 참조하세요.  
Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

**Topics**
+ [Kubernetes용 SageMaker AI Operators 설치](#kubernetes-sagemaker-operators-eos-install)
+ [Amazon SageMaker AI 작업 사용](kubernetes-sagemaker-jobs.md)
+ [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)
+ [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)

## Kubernetes용 SageMaker AI Operators 설치
<a name="kubernetes-sagemaker-operators-eos-install"></a>

Amazon SageMaker AI를 사용하여 기계 학습 모델을 훈련, 조정 및 배포하기 위해 Kubernetes용 SageMaker AI Operators를 설치하고 사용하려면 다음 단계를 사용하세요.

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

다음 섹션에서는 연산자의 원본 버전을 설정하고 배포하는 단계를 설명합니다.

**주의**  
**참고:** 다음 단계에서는 Kubernetes용 SageMaker AI Operators의 최신 버전을 설치하지 않습니다. 새로운 Kubernetes용 ACK 기반 SageMaker AI Operators를 설치하려면 [최신 Kubernetes용 SageMaker AI Operator](kubernetes-sagemaker-operators-ack.md) 섹션을 참조하세요.

#### 사전 조건
<a name="prerequisites"></a>

이 가이드에서는 다음 사전 조건이 충족되었다고 가정합니다.
+ Kubernetes 클러스터에 접근하는 데 사용되는 클라이언트 머신에 다음 도구를 설치합니다.
  + [`kubectl`](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 버전 1.13 이상. Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 `kubectl`버전을 사용합니다. 예를 들어, 1.13 `kubectl`클라이언트는 Kubernetes 1.13 및 1.14 클러스터로 작업해야 합니다. OpenID Connect(OIDC)는 1.13 이전 버전에서는 지원되지 않습니다.
  + [`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) 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 공급자가 있으므로 역할을 생성하고 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. `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 계정에 배포하거나 특정 작업에 액세스할 수 있는 사용자를 제어하는 데 유용합니다.

이 가이드에서는 미리 정의된 특정 네임스페이스에 연산자를 설치하는 방법을 설명합니다. 컨트롤러를 두 번째 네임스페이스에 배포하려면 가이드를 처음부터 끝까지 따르고 각 단계에서 네임스페이스를 변경합니다.

##### 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 공급자가 있으므로 역할을 생성하고 Kubernetes ServiceAccount에 역할을 수임할 권한을 부여합니다.

##### 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>` 자리 표시자를 모두 클러스터에 해당하는 값으로 바꿔야 합니다. 이 가이드의 목적상 `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 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>

네임스페이스 범위 내에 연산자를 배포하는 데에는 두 부분이 있습니다. 첫 번째는 클러스터 수준에서 설치되는 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. 다음 명령을 사용하여 연산자 설치 관리자 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>

네임스페이스 범위 내에 연산자를 배포하는 데에는 두 부분이 필요합니다. 첫 번째는 클러스터 수준에서 설치되는 CRD 세트입니다. 이러한 리소스 정의는 Kubernetes 클러스터당 한 번만 설치하면 됩니다. 두 번째 부분은 연산자 권한 및 배포 자체입니다. 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>

 Kubernetes용 SageMaker AI Operators의 일부로 `kubectl`에 대해 `smlogs` [플러그인](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)을 사용할 수 있습니다. 이를 통해 SageMaker AI CloudWatch 로그를 `kubectl`로 스트리밍할 수 있습니다. `kubectl`은 [경로](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. 파일에서 다음 두 줄을 제거하여 파이널라이저를 삭제하도록 작업을 편집합니다. 파일을 저장하면 작업이 삭제됩니다.

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

### 각 리전의 이미지 및 SMlog
<a name="images-and-smlogs-in-each-region"></a>

다음 표에는 각 리전에서 사용 가능한 연산자 이미지와 SMLog가 나열되어 있습니다.


|  리전  |  컨트롤러 이미지  |  Linux 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)  | 