View a markdown version of this page

在使用 EC2 实例存储配置的 AWS Outposts 上部署 Amazon EKS 本地集群 - Amazon EKS

帮助改进此页面

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

在使用 EC2 实例存储配置的 AWS Outposts 上部署 Amazon EKS 本地集群

本主题提供了有关在使用 EC2 实例存储配置的 AWS Outpost 上部署 Amazon EKS 本地集群的说明。

注意

如果您的 Outpost 是使用 Amazon EBS 而不是 EC2 实例存储配置的,则本主题中描述的架构不适用于您的 Outpost。使用 EBS 配置的 Outposts 将继续使用现有的本地集群实现。有关更多信息,请参阅 在 AWS Outposts 上部署 Amazon EKS 集群

如果您有兴趣使用更新后的本地集群架构在 EBS 支持的 Outpost 上创建本地集群,请联系您的 AWS 客户团队。

重要

先决条件

注意

创建本地集群后,创建该集群的 IAM 主体将作为具有 system:masters 权限的管理员永久添加到 Kubernetes RBAC 授权表中。确保永远不要删除该主体。

创建本地集群

您可以使用 AWS 管理控制台、AWS CLI、Amazon EKS API 或 AWS CloudFormation 创建本地集群。

创建本地集群时,应注意以下方面:

AWS CLI

aws eks create-cluster \ --name my-cluster \ --role-arn arn:aws:iam::111122223333:role/myEKSClusterRole \ --kubernetes-version 1.36 \ --resources-vpc-config subnetIds=subnet-ExampleID1,endpointPrivateAccess=true,endpointPublicAccess=true \ --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}' \ --access-config authenticationMode=API_AND_CONFIG_MAP,bootstrapClusterCreatorAdminPermissions=true \ --outpost-config outpostArns=arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid,controlPlaneInstanceType=m5.large,controlPlanePlacement={spreadLevel=host},etcdInstanceType=m5.large,etcdPlacement={spreadLevel=host}

AWS 管理控制台

  1. 打开 Amazon EKS 控制台

  2. 选择创建集群

  3. 对于 Kubernetes 控制面板位置,请选择 AWS Outposts

  4. 配置以下内容:

    • 名称:集群的名称。

    • Kubernetes 版本:要使用的版本。

    • 集群服务角色:具有 AmazonEKSClusterPolicyAmazonEKSServicePolicy 的 IAM 角色。

    • Outpost ID:要部署到的逻辑 Outpost。

    • 控制面板实例类型:Kubernetes API 服务器、调度器和控制器管理器的实例类型。

    • etcd 实例类型etcd 的实例类型。

    • 分布级别:将 host 还是 rack 用于控制面板和 etcd 置放。

  5. 配置联网:VPC、子网、安全组。启用私有端点访问权限。

  6. 配置可观测性:控制面板日志。

  7. 审核和创建

CreateCluster API

{ "name": "my-cluster", "roleArn": "arn:aws:iam::111122223333:role/myEKSClusterRole", "version": "1.36", "resourcesVpcConfig": { "subnetIds": ["subnet-ExampleID1"], "endpointPublicAccess": true, "endpointPrivateAccess": true }, "logging": { "clusterLogging": [{ "types": ["api", "audit", "authenticator", "controllerManager", "scheduler"], "enabled": true }] }, "accessConfig": { "authenticationMode": "API_AND_CONFIG_MAP", "bootstrapClusterCreatorAdminPermissions": true }, "outpostConfig": { "outpostArns": ["arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid"], "controlPlaneInstanceType": "m5.large", "controlPlanePlacement": { "spreadLevel": "host" }, "etcdInstanceType": "m5.large", "etcdPlacement": { "spreadLevel": "host" } } }

在使用 EC2 实例存储配置的 Outposts 上创建本地集群时,必须使用 controlPlaneInstanceTypeetcdInstanceType 参数。controlPlanePlacementetcdPlacement 参数可选。如果未指定这两个参数,则不会应用任何置放分布策略。

注意

outpostConfig 是一种仅限创建属性。要更改控制面板实例类型、etcd 实例类型、置放或 Outpost,必须创建新的集群。

连接到集群

配置 kubectl 以与集群通信:

aws eks update-kubeconfig --region region-code --name my-cluster
注意

如果集群是使用低于 2.35.3 的 AWS CLI 版本创建的,则必须更新 kubeconfig 以在 exec 参数中指定 --cluster-name(而不是 --cluster-id

集群的 Kubernetes API 服务器端点在 Amazon Route 53 中托管。该端点会解析为 Amazon EKS 在您的子网中创建的跨账户弹性网络接口(ENI)的私有 IP 地址。这些 ENI 具有固定私有 IP 地址,在整个集群生命周期中都不会更改。

在创建集群时,Amazon EKS 将在您指定的子网中创建 3 个弹性网络接口。这些网络接口可实现集群和 VPC 之间的通信。每个网络接口的描述中都有 Amazon EKS cluster-name 文字。

部署 Worker 节点

使用自行管理的节点组将 Worker 节点部署到本地集群。

  1. 在您的 Outpost 上部署 Worker 节点 AWS CloudFormation 模板或创建单独的 EC2 实例。

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2025-11-24/amazon-eks-outpost-nodegroup.yaml
  2. 向节点实例角色授予对集群的访问权限。为节点的 IAM 角色创建一个访问条目

    aws eks create-access-entry \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::111122223333:role/myNodeRole \ --type EC2_LINUX

    如果您使用 aws-auth ConfigMap 进行身份验证,则也可将该节点实例角色添加到 ConfigMap 中。请参阅向 IAM 用户和角色授予对 Kubernetes API 的访问权限

  3. 验证节点是否处于 Ready 状态:

    kubectl get nodes

内部资源

创建本地集群时,Amazon EKS 会自动在 kube-system 命名空间中安装以下附加组件的自行管理版本:corednskube-proxyaws-node(VPC CNI)。您也可以选择通过 Amazon EKS 附加组件 API 安装这些附加组件的托管式版本。有关更多信息,请参阅 适用于使用 EC2 实例存储配置的 AWS Outposts 上的本地集群的 Amazon EKS 附加组件

Amazon EKS 还会在您的子网中创建跨账户弹性网络接口(ENI),用于集群 VPC 通信。请勿删除这些网络接口。如果跨账户 ENI 被删除或其 IP 地址更改,则必须手动更新每个节点和每个使用静态 IP 访问的管理员。