

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

# 安装 SageMaker AI Spaces 附加组件
<a name="operator-install"></a>

## 依赖项
<a name="dependencies"></a>

**Amazon EKS Pod 身份代理附加组件**
+ 操作员需要获取 AWS 凭证
+ **通常预先安装**在大多数 EKS 集群上
+ 安装：通过 EKS 附加组件

**证书管理器**
+ TLS 证书管理所必需的
+ 如果使用 HyperPod 快速创建集群，则@@ **预先安装**
+ 安装：通过 EKS 附加组件

**EBS CSI 驱动程序**
+ 空间永久存储（EBS 卷）所必需的
+ 使用 SageMaker控制台进行@@ **安装时自动**安装
+ 需要具有 `AmazonEBSCSIDriverPolicy` \+ HyperPod 特定权限的 IAM 角色
+ 安装：通过 EKS 附加组件。但是，请务必按照指南安装所需的其他权限 HyperPod。
+ 参考：[在上使用 Amazon EBS CSI 驱动程序 HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html)

## WebUI 访问权限的其他依赖项
<a name="-additional-dependencies"></a>

**AWS Load Balancer 控制器**
+ 如果使用 HyperPod 快速创建集群，则@@ **预先安装**
+ 安装：Via Helm
+ 手动安装指南：[安装 Loa AWS d Balancer 控制器](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html)

**外部 DNS**
+ 使用自定义域名访问 WebUI 时为必填项
+ 自动管理 Route53 的 DNS 记录
+ 需要具有 Route53 权限的 IAM 角色
+ 安装：通过 EKS 附加组件

## 安装
<a name="installation"></a>

在开始之前，请确保您已经：
+ 至少有一个工作节点运行 Kubernetes 1.30 或更高版本的活跃 SageMaker HyperPod 集群
+ 至少一个具有最低实例类型（XX vCPU、YY GiB 内存）的工作节点

### 安装 Amazon SageMaker Spaces 附加组件
<a name="space-add-on"></a>

你可以使用快速安装来安装 SageMaker Spaces 插件，使用快速安装进行默认设置，也可以使用自定义安装进行高级配置。

#### 快速安装
<a name="quick-install"></a>

1. 打开 Amazon SageMaker 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 从集群列表中选择您的集群。

1. 在 IDE 和笔记本选项卡上，找到 Amazon SageMaker Spaces，然后选择快速安装。

自动快速安装：
+ 为插件创建所需的 IAM 角色
+ 使用 Systems Manager 所需的 IAM 角色启用远程访问模式
+ 安装插件并配置 pod 身份关联

#### 自定义安装
<a name="custom-install"></a>

1. 打开 Amazon SageMaker 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 从集群列表中选择您的集群。

1. 在 IDE 和笔记本选项卡上，找到 Amazon SageMaker Spaces，然后选择 “自定义安装”。

1. 配置以下选项：

   **插件所需的 IAM 角色**
   + 选择是使用推荐权限创建新 IAM 角色还是使用具有所需权限的现有角色（请参阅上面的管理员权限设置部分）

   **远程访问配置**
   + 启用此选项可允许用户使用 S AWS ystems Manager 从本地 Visual Studio 代码连接到空间
   + 对于 SSM 托管实例角色：
     + **创建新角色**-该插件使用所需的 Systems Manager 权限创建和管理角色
     + **使用现有角色**-选择具有必要 Systems Manager 权限的预配置角色
   + 确保 Spaces 插件执行角色具有 SSM 托管实例角色的 PassRole权限
**注意**  
启用远程访问会激活 S AWS ystems Manager 高级实例级别，按实例收取额外的费用。有关定价信息，请参阅 Systems Manager 定价。

   **Web 浏览器访问配置**
   + 启用后允许用户使用 Route 53 DNS 和 SSL 证书通过网络浏览器访问空间
   + **先决条件：**在启用浏览器访问之前安装 AWS Load Balancer 控制器
   + **Route 53 托管区域：**为您拥有的域或子域选择现有托管区域。域名或子域名必须经过注册并在您的控制之下，才能启用 DNS 管理和 SSL 证书验证。

     有关域名注册的更多详细信息，请参阅《Rou [te 53 开发者指南》中的注册新域名](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html#domain-register-procedure-section)。
   + **子域：输入子域名**前缀（仅限字母数字和连字符，最多 63 个字符）
   + **SSL 证书：**从 Certifice Manager 中选择现有 SSL AWS 证书。证书必须有效且涵盖您的子域名（例如 subdomain.domain.com）和通配符子域名（例如\*.subdomain.domain.com），以支持个人空间访问。 URLs
   +  **令牌签名密钥：为** JWT 令牌签名选择 AWS KMS 非对称密钥。该密钥用于加密身份验证令牌，以实现安全的 WebUI 访问。您可以在 KMS 中创建新的非对称密钥，也可以选择您的账户有权访问的现有密钥。
**注意**  
对托管区域和 DNS 查询收取标准 Route 53 费用。有关定价信息，请参阅 Route 53 定价。

#### EKS 插件安装——带有 WebUI 的 Jupyter k8s
<a name="webui-install"></a>

##### 配置文件
<a name="configure-file"></a>

创建`addon-config.yaml`：

```
jupyter-k8s:
  workspacePodWatching:
    enable: true

jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    kmsEncryptionContext:
      enabled: true
    traefik:
      shouldInstall: true
    auth:
      kmsKeyId: "<KMS_KEY_ARN>"
```

**替换以下占位符：**
+ <DOMAIN\_NAME>: 您的域名（例如，`jupyter.example.com`）
+ <ACM\_CERTIFICATE\_ARN>: 您的 ACM 证书 ARN（例如 `arn:aws:acm:us-west-2:111122223333:certificate/12345678-1234-1234-1234-123456789012` 
+ <KMS\_KEY\_ARN>: 您的 KMS 密钥 ARN（例如 `arn:aws:kms:us-west-2:111122223333:key/12345678-1234-1234-1234-123456789012`

##### 通过以下方式安装 AWS CLI
<a name="install-via-cli"></a>

```
aws eks create-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

**要更新现有插件，请执行以下操作：**

```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

##### 通过以下方式安装 AWS 管理控制台
<a name="install-via-console"></a>

1. 前往 **EKS 控制台** → 选择您的集群

1. 单击 “**附加组件**” 选项卡 → “**添加新**”

1. 选择 “**SageMaker 空间**” 插件

1. 将上面的 YAML 配置粘贴到**可选配置设置**中

1. 单击 “**下一步**”，然后查看插件设置

1. 单击“**Create**”

##### 验证安装
<a name="install-verify"></a>

```
# Check addon status
aws eks describe-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --region <AWS_REGION>
```

##### 自定义 ALB 属性
<a name="customize-alb"></a>

默认情况下，插件会创建一个公共负载均衡器以用于 Web UI。您可以使用 EKS 插件属性自定义负载均衡器属性。

要创建内部 ALB，请将方案设置为：`internal`

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"  # Default is "internet-facing"
```

您也可以使用该`alb.annotations`字段自定义 ALB 设置：

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"
      annotations:
        alb.ingress.kubernetes.io/security-groups: "<SECURITY_GROUP_ID>"
        alb.ingress.kubernetes.io/subnets: "<SUBNET_ID_1>,<SUBNET_ID_2>"
        alb.ingress.kubernetes.io/load-balancer-attributes: "idle_timeout.timeout_seconds=60"
```

**常见的 ALB 注释：**
+ `alb.ingress.kubernetes.io/security-groups`：为 ALB 指定安全组
+ `alb.ingress.kubernetes.io/subnets`: 为 ALB 指定子网
+ `alb.ingress.kubernetes.io/load-balancer-attributes`：设置 ALB 属性（空闲超时、访问日志等）

有关所有可用的注释，请参阅 [AWS Load Balancer 控制器文档](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/)。

### 插件的升级/版本控制
<a name="upgrade-add-on"></a>

```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```