AWS Outposts 上的 Amazon EKS 节点 - Amazon EKS

AWS Outposts 上的 Amazon EKS 节点

您可以在 AWS Outposts 上创建和运行 Amazon EKS 节点。AWS Outposts 在本地设施中支持本机 AWS 服务、基础设施和操作模型,以满足低延迟、本地数据处理和数据驻留需求。在 AWS Outposts 环境中,您可以使用与 AWS 云中相同的 AWS API、工具和基础设施。有关 AWS Outposts 的更多信息,请参阅《AWS Outposts 用户指南》。

您可以使用 Amazon EKS 通过 AWS Outposts 在本地运行 Kubernetes 应用程序。AWS Outposts 上的 Amazon EKS 支持扩展集群,其 Kubernetes 控制面板在父级 AWS 区域中运行,Worker 节点在 AWS Outposts 上运行。Kubernetes 控制面板完全由 AWS 托管,您可以使用相同的 Amazon EKS API、工具和控制台在 AWS Outposts 上创建和运行 Amazon EKS Worker 节点。


               Outposts 配置

先决条件

以下是在 AWS Outposts 上使用 Amazon EKS 节点的先决条件:

  • 您必须已在本地数据中心中安装并配置了 Outpost。有关更多信息,请参阅 AWS Outposts 用户指南中的创建 Outpost 并订购 Outpost 容量

  • Outpost 与其父级 AWS 区域 之间必须具有可靠的网络连接。我们建议在 Outpost 与父级 AWS 区域 之间提供高度可用的低延迟连接。有关更多信息,请参阅 AWS Outposts 用户指南中的与本地网络的 Outpost 连接

  • Outpost 的 AWS 区域必须支持 Amazon EKS。有关支持的 AWS 区域 的列表,请参阅 AWS 一般参考中的 Amazon EKS 服务端点

Outpost 考虑因素

架构

  • AWS Outposts 提供多种外形规格,包括 1U2U Outposts 服务器和 42U Outposts 机架。Amazon EKS 仅在 42U Outposts 机架上受支持。

  • 单个子网不能跨越多个逻辑 Outposts,Outposts 间的流量必须使用客户拥有的 IP 地址并遍历本地网络。因此,建议对每个逻辑 Outpost 运行一个 Amazon EKS 集群。

  • 运行于 AWS Outposts 的 Amazon EKS Worker 节点到 AWS 区域中的控制面板的流量保留在您的 VPC 内并遍历服务链接连接。您可以使用私有或公有连接进行服务链接连接。有关服务链接的更多信息,请参阅《AWS Outposts 用户指南》中的到 AWS 区域的 Outposts 连接

  • 如果 Outpost 与其父级AWS区域之间的网络连接丢失,Amazon EKS Worker 节点将继续运行。但是,在恢复连接之前,您无法创建新节点或对现有部署执行转换管理操作。在网络断开连接期间,建议的操作方法是尝试按照网络连接检查表重新连接您的 AWS Outposts 到父级 AWS 区域。如果实例在网络连接断开期间出现故障,则不会自动替换该实例。Amazon EKS Kubernetes 控制面板在父级 AWS 区域中运行,且缺少 kubelet 检测信号可能会导致以下情况:

    • AWS Outposts 上的容器组(pod)被标记为运行状况不佳

    • 节点状态超时

    • 容器组(pod)将被标记为驱逐

    有关更多信息,请参阅 Kubernetes 文档中的节点控制器

正常运行

  • 创建 Amazon EKS 集群时,必须使用在 AWS 区域中运行的子网,因为这些子网用于创建 Amazon EKS Kubernetes 控制面板。在创建集群过程中,请勿使用在您的 AWS Outposts 上运行的子网。

  • 您只能在 AWS Outposts 上运行自行管理的节点,不支持托管节点和 Fargate。创建自我管理的节点组时,必须传递已存在于您的 AWS Outposts 上的子网。

  • Amazon EKS Worker 节点的 VPC 必须与 LGW 路由表关联,才能通过本地网络访问在 Worker 节点上运行的服务。如果您使用的是客户拥有的 IP,则运行 Worker 节点的子网必须有通往 LGW 的路由。

  • IPv6 不能用于服务链接或 AWS Outposts 上的本地网络流量。如果您计划在 AWS Outposts 上运行 Amazon EKS Worker 节点,则不应使用 IPv6 IP 系列创建 Amazon EKS 集群。

  • Amazon EKS Worker 节点的 Kubernetes 组件是从父级 AWS 区域的 Amazon Elastic Container Registry(Amazon ECR)中提取的。在将新的 Amazon EC2 实例引导到 Amazon EKS 集群时,预计服务链接连接的流量会增加。

  • 您可以在父级 AWS 区域中使用 Amazon ECR 托管应用程序容器映像。应用程序容器映像的大小将影响服务链接带宽使用情况和部署尚未缓存的新容器组(pod)时的启动时间。如果需要缩短应用程序部署时间,请考虑托管应用程序容器映像的本地容器注册表或缓存。如果您的“隔离”子网没有通往互联网的路径,则必须为 Amazon S3 和 Amazon ECR 设置 VPC 端点,以在 AWS Outposts 上创建 Amazon EKS Worker 节点。

  • 创建 Amazon EKS Worker 节点时,您必须使用 gp2 卷类型。

应用程序

  • 使用 AWS Outposts,您可以在本地运行一些 AWS 服务,可以连接到父级 AWS 区域中提供的各种服务。本地可用的 AWS 服务与在父级 AWS 区域中运行的服务相比,其延迟响应时间降低。您在 AWS 区域中使用的 AWS 服务在父级 AWS 区域的网络连接断开时不可用。有关在本地提供的 AWS 服务的信息,请参阅《AWS Outposts 用户指南》。

  • 您可以使用 Kubernetes 服务入口的普通方法通过您的本地网络连接到在 AWS Outposts 上的 Amazon EKS 上运行的应用程序。应用程序负载均衡器 (ALB, Application Load Balancer) 可用于 Outposts 机架上的 Kubernetes 入口。网络负载均衡器在 AWS Outposts 上不可用。对于每个 Kubernetes 服务,节省 AWS Outposts 上容量的常见做法是将单个 ALB 部署与基于路径的路由结合使用。有关更多信息,请参阅应用程序负载均衡器文档

  • Amazon EBS 卷不会跨越物理或逻辑 AWS Outposts,类似于 AWS 区域中的多可用区行为。例如,如果在物理 Outpost A 上运行的节点移动到物理 Outpost B,EBS 卷将不会随之移动。如果您使用 EBS 卷支持的容器组(pod)在 Amazon EKS 上运行有状态的工作负载,请考虑在应用程序层实施双写入操作,或者如果您的应用程序及其数据在单机架故障期间必须保持可用,则使用替代存储机制。

在 AWS Outposts 上部署包含 Worker 节点的 Amazon EKS 集群

本部分介绍如何创建 Amazon EKS 集群及使用 eksctl 和 AWS CLI 在 AWS Outposts 在上部署 Amazon EKS Worker 节点。您必须具有在 AWS Outposts 上创建和管理子网的权限。点击此处了解可共享 Outpost 资源的更多信息 https://docs.aws.amazon.com/outposts/latest/userguide/sharing-outposts.html#sharing-resources

  1. 使用 YAML 文件创建公有 Amazon EKS 集群:

    eksctl create cluster -f cluster-config.yaml

    以下是 YAML 文件的示例:

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-outposts-cluster version: 1.21 region: region-code cloudWatch: clusterLogging: enableTypes: [ "api", "audit", "authenticator", "controllerManager", "scheduler" ] iam: withOIDC: true addons: - name: vpc-cni - name: coredns - name: kube-proxy

    要创建完全私有的集群,请将以下内容添加到您的配置 YAML 文件中:

    privateCluster: enabled: true

    输出中的最后一行应如下所示:

    EKS cluster "my-outposts-cluster" in "region-code" region is ready

    您可以确认您的集群已在 Amazon EKS AWS Management Console 中或使用命令创建:

    eksctl get cluster --name my-outposts-cluster
  2. 确定使用新集群创建的 VPC。此 VPC 将托管包含您的 Worker 节点的子网。您可以使用命令找到您的 vpc-id

    eksctl get cluster --name my-outposts-cluster
  3. 确定 Outpost 的子网和 CIDR。CIDR 不应与本地网络上使用的其他 IP 地址发生冲突。此操作可以通过使用子网计算器并确定适合您的环境的适当设置来完成。计算 CIDR 后,您可以在下一步中使用此值。您的 availability-zone 在 AWS Management Console 中可见。

  4. 使用 AWS CLI 在 AWS Outposts 上创建子网以托管 Worker 节点。在以下命令中使用您在上一步中检索到的 vpc-id

    aws ec2 create-subnet \ --region region-code \ --availability-zone region-code \ --outpost-arn my-outpost-arn \ --vpc-id my-vpc-id \ --cidr-block my-cidr-block

    请注意创建后在消息中显示的子网 ID。输出中的行应如下所示:

    您的输出应如下所示:

    "SubnetId": "subnet-1234567890abcdef0",

    您可以在 AWS Management Console 中的集群详细信息下验证子网创建。

  5. 使用 YAML 文件创建 Worker 节点。将 vpc-id 替换为步骤 1 中创建的值和步骤 2 中创建的 subnet-idsecurity-group-id 在步骤 1 中创建,可以使用命令检索:

    eksctl get cluster --name my-outposts-cluster

    可以通过使用以下命令使用 YAML 文件创建节点:

    eksctl create nodegroup -f worker-nodes-config.yaml

    以下是要包含在此步骤中的示例 YAML 文件。对于 instanceType,选择以下实例大小:

    • 在您的 Outpost 上设置插槽

    • 适用于您的工作负载

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-outposts-cluster region: region-code nodeGroups: - name: outpost-worker-nodes instanceType: m5.large desiredCapacity: 1 minSize: 1 maxSize: 1 volumeSize: 50 volumeType: gp2 volumeEncrypted: true subnets: - subnet-042e2c531a5713a5b privateNetworking: true

    要创建私有 Worker 节点,请将其添加到 YAML 文件的末尾:

    subnets: - outpost-subnet volumeType: gp2 privateNetworking: true

    输出中的最后一行应如下所示:

    created 1 nodegroup(s) in cluster "my-outposts-cluster" created 0 managed nodegroup(s) in cluster "my-outposts-cluster" checking security group configuration for all nodegroups
  6. (可选)要通过本地网络公开 Worker 节点,请参阅本地网关的工作原理

现在,您已有使用 AWS Outposts 上运行的 Worker 节点配置了 Amazon EKS 集群,那么就可以安装附加组件并将应用程序部署到您的集群。有关如何扩展集群功能的更多信息,请参阅以下内容: