

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 开始将 AWS Fargate 用于集群
<a name="fargate-getting-started"></a>

本主题介绍如何通过 Amazon EKS 集群开始在 AWS Fargate 上运行容器组（pod）。

如果使用 CIDR 块限制对集群的公有端点的访问，建议您还启用私有端点访问。通过这种方式，Fargate 容器组（pod）可以与集群通信。在未启用私有端点的情况下，您指定用于公有访问的 CIDR 块必须包含来自 VPC 的出站源。有关更多信息，请参阅 [集群 API 服务器端点](cluster-endpoint.md)。

**先决条件**  
现有集群。如果您还没有 Amazon EKS 集群，请参阅[开始使用 Amazon EKS](getting-started.md)。

## 第 1 步：确保现有节点可以与 Fargate 容器组（pod）进行通信
<a name="fargate-gs-check-compatibility"></a>

如果您使用的是没有节点的新集群，或是只有托管节点组的集群（请参阅[使用托管式节点组简化节点生命周期](managed-node-groups.md)），可以跳至[第 2 步：创建 Fargate 容器组（pod）执行角色](#fargate-sg-pod-execution-role)。

假设您正在使用已有关联节点的现有集群。确保这些节点上的容器组（pod）可以与 Fargate 上运行的容器组（pod）自由通信。在 Fargate 上运行的容器组（pod）会自动配置为使用与其关联的集群的集群安全组。确保集群中的任何现有节点都可以向集群安全组发送流量以及接收来自集群安全组的流量。托管节点组也会自动配置为使用集群安全组，所以您无需修改或检查它们是否具有此兼容性（请参阅[使用托管式节点组简化节点生命周期](managed-node-groups.md)）。

针对已使用 `eksctl` 或者 Amazon EKS 管理 AWS CloudFormation 模板创建的现有节点组，您可以手动将集群安全组添加到节点。您也可以修改节点组的自动扩缩组启动模板，以便将集群安全组附加到实例。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[更改实例的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SG_Changing_Group_Membership)。

您可以在 AWS 管理控制台 中集群的 **Networking**（联网）部分下，检查您集群的安全组。或者，您可以使用下面的 AWS CLI 命令进行这项操作。使用此命令时，请将 `<my-cluster>` 替换为您的集群名称。

```
aws eks describe-cluster --name <my-cluster> --query cluster.resourcesVpcConfig.clusterSecurityGroupId
```

## 第 2 步：创建 Fargate 容器组（pod）执行角色
<a name="fargate-sg-pod-execution-role"></a>

当您的集群在 AWS Fargate 上创建容器组（pod）时，在 Fargate 基础设施上运行的组件必须代表您调用 AWS API。Amazon EKS 容器组（pod）执行角色提供执行此操作的 IAM 权限。要创建 AWS Fargate 容器组（pod）执行角色，请参阅 [Amazon EKS 容器组（pod）执行 IAM 角色](pod-execution-role.md)。

**注意**  
如果您使用 `--fargate` 选项通过 `eksctl` 创建了集群，则集群已具有容器组（pod）执行角色，您可以使用模式 `eksctl-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL` 在 IAM 控制台中找到该角色。同理，如果您使用 `eksctl` 创建 Fargate 配置文件，则 `eksctl` 会创建您的容器组（pod）执行角色（如果尚未创建）。

## 第 3 步：为集群创建 Fargate 配置文件
<a name="fargate-gs-create-profile"></a>

您必须先定义一个 Fargate 配置文件，指定在启动时哪些容器组（pod）使用 Fargate，然后才能调度在集群中的 Fargate 上运行的容器组（pod）。有关更多信息，请参阅 [定义启动时将使用 AWS Fargate 的容器组（pod）](fargate-profile.md)。

**注意**  
如果您使用 `--fargate` 选项通过 `eksctl` 创建了集群，则已经为您的集群创建了 Fargate 配置文件，而且其包含 `kube-system` 和 `default` 命名空间中所有容器组（pod）的选择器。使用以下程序为您想要用于 Fargate 的任何其他命名空间创建 Fargate 配置文件。

您可以使用以下任一工具创建 Fargate 配置文件：
+  [`eksctl`](#eksctl_fargate_profile_create) 
+  [AWS 管理控制台](#console_fargate_profile_create) 

### `eksctl`
<a name="eksctl_fargate_profile_create"></a>

此过程需要 `eksctl` 版本 `0.215.0` 或更高版本。可以使用以下命令来查看您的版本：

```
eksctl version
```

有关安装或升级 `eksctl` 的说明，请参阅 `eksctl` 文档中的 [Installation](https://eksctl.io/installation)。

 **使用 `eksctl` 创建 Fargate 配置文件** 

使用以下 `eksctl` 命令创建 Fargate 配置文件，并将所有 `<example value>` 替换为您自己的值。您需要指定命名空间。但是，`--labels` 选项不是必选。

```
eksctl create fargateprofile \
    --cluster <my-cluster> \
    --name <my-fargate-profile> \
    --namespace <my-kubernetes-namespace> \
    --labels <key=value>
```

您可以将某些通配符用于 `<my-kubernetes-namespace>` 和 `<key=value>` 标签。有关更多信息，请参阅 [Fargate 配置文件通配符](fargate-profile.md#fargate-profile-wildcards)。

### AWS 管理控制台
<a name="console_fargate_profile_create"></a>

 **使用 AWS 管理控制台 创建 Fargate 配置文件** 

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 选择要为其创建 Fargate 配置文件的集群。

1. 请选择 **Compute**（计算）选项卡。

1. 在 **Fargate profiles（Fargate 配置文件）**下，选择 **Add Fargate profile（添加 Fargate 配置文件）**。

1. 在 **Configure Fargate profile**（配置 Fargate 配置文件）页面上，执行以下操作：

   1. 对于 **Name**（名称），为 Fargate 配置文件输入名称。名称必须唯一。

   1. 对于**容器组（pod）执行角色**，选择要用于您 Fargate 配置文件的容器组（pod）执行角色。将仅显示具有 `eks-fargate-pods.amazonaws.com` 服务委托人的 IAM 角色。如果您未看到列出的任何角色，则必须创建一个角色。有关更多信息，请参阅 [Amazon EKS 容器组（pod）执行 IAM 角色](pod-execution-role.md)。

   1. 根据需要修改选定的**子网**。
**注意**  
Fargate 上运行的容器组（pod）仅支持私有子网。

   1. 对于 **Tags（标签）**，您可以自行选择是否为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源，如容器组（pod）。

   1. 选择**下一步**。

1. 在**配置容器组（pod）选择**页面上，执行以下操作：

   1. 对于**命名空间**，输入与容器组（pod）匹配的命名空间。
      + 您可以使用匹配的特定命名空间，例如 `kube-system` 或 `default`。
      + 您可以使用某些通配符（例如 `prod-*`）以匹配多个命名空间（例如，`prod-deployment` 和 `prod-test`)。有关更多信息，请参阅 [Fargate 配置文件通配符](fargate-profile.md#fargate-profile-wildcards)。

   1. （可选）将 Kubernetes 标签添加到选择器中。特别是将它们添加到指定命名空间中的容器组（pod）需要匹配的那个。
      + 您可以将标签 `infrastructure: fargate` 添加到选择器中，以便只有指定命名空间中也具有 `infrastructure: fargate` Kubernetes 标签的容器组（pod）与选择器匹配。
      + 您可以使用某些通配符（例如 `key?: value?`）以匹配多个命名空间（例如，`keya: valuea` 和 `keyb: valueb`)。有关更多信息，请参阅 [Fargate 配置文件通配符](fargate-profile.md#fargate-profile-wildcards)。

   1. 选择**下一步**。

1. 在 **Review and create（查看和创建）**页面上，查看 Fargate 配置文件的信息，然后选择 **Create（创建）**。

## 第 4 步：更新 CoreDNS
<a name="fargate-gs-coredns"></a>

预设情况下，CoreDNS 配置为在 Amazon EKS 集群的 Amazon EC2 基础设施上运行。如果*仅*在集群中的 Fargate 上运行容器组（pod），请完成以下步骤。

**注意**  
如果使用 `--fargate` 选项用 `eksctl` 创建集群，则可以跳至 [后续步骤](#fargate-gs-next-steps)。

1. 使用以下命令为 CoreDNS 创建 Fargate 配置文件。将 `<my-cluster>` 替换为您的集群名称，将 `<111122223333>` 替换为您的账户 ID，将 `<AmazonEKSFargatePodExecutionRole>` 替换为您的容器组（pod）执行角色名称，并将 `<000000000000000a>`、`<000000000000000b>` 和 `<000000000000000c>` 替换为您的私有子网 ID。如果没有容器组（pod）执行角色，则必须先创建一个（请参阅[第 2 步：创建 Fargate 容器组（pod）执行角色](#fargate-sg-pod-execution-role)）。
**重要**  
角色 ARN 不能包含 `/` 之外的[路径](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names)。例如，如果您的角色名称为 `development/apps/AmazonEKSFargatePodExecutionRole`，则需要在为该角色指定 ARN 时将其更改为 `AmazonEKSFargatePodExecutionRole`。角色 ARN 的格式必须为 ` arn:aws:iam::<111122223333>:role/<AmazonEKSFargatePodExecutionRole>`。

   ```
   aws eks create-fargate-profile \
       --fargate-profile-name coredns \
       --cluster-name <my-cluster> \
       --pod-execution-role-arn arn:aws:iam::<111122223333>:role/<AmazonEKSFargatePodExecutionRole> \
       --selectors namespace=kube-system,labels={k8s-app=kube-dns} \
       --subnets subnet-<000000000000000a> subnet-<000000000000000b> subnet-<000000000000000c>
   ```

1. 触发 `coredns` 部署的推出。

   ```
   kubectl rollout restart -n kube-system deployment coredns
   ```

## 后续步骤
<a name="fargate-gs-next-steps"></a>
+ 您可以开始使用以下工作流迁移现有应用程序来在 Fargate 上运行现有应用程序。

  1.  [创建 Fargate 配置文件](fargate-profile.md#create-fargate-profile)，该配置文件与您应用程序的 Kubernetes 命名空间和 Kubernetes 标签匹配。

  1. 删除并重新创建所有现有的容器组（pod），以便可以在 Fargate 上调度容器组。修改 `<namespace>` 和 `<deployment-type>` 以更新您的特定容器组（pod）。

     ```
     kubectl rollout restart -n <namespace> deployment <deployment-type>
     ```
+ 部署 [使用应用程序负载均衡器路由应用程序和 HTTP 流量](alb-ingress.md)，允许在 Fargate 上运行的容器组（pod）的入口对象。
+ 您可以使用 [使用 Vertical Pod Autoscaler 调整容器组（pod）资源](vertical-pod-autoscaler.md) 为 Fargate 容器组（pod）设置正确的初始 CPU 和内存大小，然后使用 [使用 Horizontal Pod Autoscaler 扩展容器组（pod）部署](horizontal-pod-autoscaler.md) 来扩展这些容器组（pod）。如果您希望 Vertical Pod Autoscaler 自动将容器组（pod）重新部署到具有更高 CPU 和内存组合的 Fargate，请将 Vertical Pod Autoscaler 的模式设置为 `Auto` 或 `Recreate`。这是为了确保正确的功能。有关更多信息，请参阅 GitHub 上的 [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#quick-start) 文档。
+ 您可以依照[这些说明](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-otel.html)设置 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel) (ADOT) 收集器，用于监控应用程序。