帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
在 AWS Outposts 上部署 Amazon EKS 集群
本主题概述了在 Outpost 上运行本地集群时需要考虑的事项。本主题还提供了有关如何在 Outpost 上部署本地集群的说明。
注意事项
重要
-
相关的 Amazon EKS 文档中没有重复这些注意事项。若其他 Amazon EKS 文档主题与本文的考虑事项冲突,则遵从本文的考虑事项。
-
这些注意事项可能会经常更改。因此,我们建议您定期查看本主题。
-
很多注意事项与在 AWS Cloud 上创建集群的注意事项不同。
-
本地集群仅支持 Outpost 机架。单个本地集群可跨构成单个逻辑 Outpost 的多个物理 Outpost 机架运行。单个本地集群不能跨多个逻辑 Outpost 运行。每个逻辑 Outpost 都有一个 Outpost ARN。
-
本地集群运行和管理 Outpost 上您的账户中的 Kubernetes 控制面板。您不能在 Kubernetes 控制面板实例上运行工作负载或对 Kubernetes 控制面板组件进行修改。这些节点由 Amazon EKS 服务管理。对 Kubernetes 控制面板的更改不会在自动 Amazon EKS 管理操作(如修补)期间一直持续存在。
-
本地集群支持自行管理的附加组件和自行管理的 Amazon Linux 节点组。Amazon VPC CNI plugin for Kubernetes、kube-proxy 和 CoreDNS 附加组件将自动安装在本地集群上。
-
本地集群需要使用 Outpost 上的 Amazon EBS。您的 Outpost 必须拥有可用于 Kubernetes 控制面板存储的 Amazon EBS。
-
本地集群使用 Outpost 上的 Amazon EBS。您的 Outpost 必须拥有可用于 Kubernetes 控制面板存储的 Amazon EBS。Outpost 仅支持 Amazon EBS
gp2
卷。 -
使用 Amazon EBS CSI 驱动程序支持 Amazon EBS 支持的 Kubernetes
PersistentVolumes
。
先决条件
-
熟悉 Outpost 部署选项、根据容量因素为 AWS Outposts 上的 Amazon EKS 集群选择实例类型和置放群组 和 为 AWS Outposts 上的 Amazon EKS 集群创建 VPC 和子网。
-
一个现有的 Outpost。有关更多信息,请参阅什么是 AWS Outposts。
-
计算机或 AWS CloudShell 上安装了
kubectl
命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.29
,则可以将kubectl
的1.28
、1.29
或1.30
版本与之配合使用。要安装或升级kubectl
,请参阅 设置 kubectl 和 eksctl。 -
在您的设备或 AWS CloudShell 上安装和配置了 AWS Command Line Interface(AWS CLI)的版本
2.12.3
或更高版本,或版本1.27.160
或更高版本。要查看当前版本,请使用
。软件包管理器(如aws --version | cut -d / -f2 | cut -d ' ' -f1
yum
、apt-get
或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI,以及使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。如需更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到主目录。 -
具有
create
和describe
Amazon EKS 集群权限的 IAM 主体(用户或角色)。有关更多信息,请参阅在 Outpost 上创建本地 Kubernetes 集群 和列出或描述所有集群。
创建本地 Amazon EKS 集群后,创建集群的 IAM 主体将永久添加。主体将作为管理员专门添加到 Kubernetes RBAC 授权表。该实体具有 system:masters
权限。此实体的身份在您的集群配置中不可见。因此,重要的是要注意创建集群的实体并确保永远不会删除它。最初,仅创建服务器的主体可以使用 kubectl
调用 Kubernetes API 服务器。如果使用控制台创建集群,请确保在集群上运行 kubectl
命令时,相同的 IAM 凭证位于 AWS SDK 凭证链中。创建集群后,您可以向其他 IAM 主体授予对集群的访问权限。
创建本地 Amazon EKS 本地集群
您可以使用 eksctl
、AWS Management Console、AWS CLI、Amazon EKS API、AWS SDK
-
创建本地集群。
-
在创建您的集群后,您可以查看已创建的 Amazon EC2 控制面板实例。
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep
my-cluster-
control-plane示例输出如下。
"Name": "
my-cluster
-control-plane-id1
" "Name": "my-cluster
-control-plane-id2
" "Name": "my-cluster
-control-plane-id3
"每个实例都将受到
node-role.eks-local.amazonaws.com/control-plane
的污染,这样就不会在控制面板实例上安排任何工作负载。有关污点的更多信息,请参阅 Kubernetes 文档中的污点和容忍度。Amazon EKS 将持续监控本地集群的状态。我们将执行自动管理操作,如安全补丁和修复运行状况不佳的实例。当本地集群与云断开连接时,我们会完成操作,以确保在重新连接后将集群修复到运行状况正常的状态。 -
如果您使用
eksctl
创建集群,则可以跳过此步骤。eksctl
会为您完成此步骤。通过向kubectl
config
文件添加新上下文来启用kubectl
与您的集群通信。有关如何创建或更新文件的说明,请参阅 通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群。aws eks update-kubeconfig --region
region-code
--namemy-cluster
示例输出如下。
Added new context arn:aws:eks:
region-code
:111122223333
:cluster/my-cluster
to/home/username/
.kube/config -
要连接到您的本地集群的 Kubernetes API 服务器,您必须有权访问子网的本地网关,或从 VPC 内部进行连接。有关将 Outpost 机架连接到您的本地网络的更多信息,请参阅《AWS Outposts 用户指南》中的机架的本地网关的工作原理。如果您使用直接 VPC 路由且 Outpost 子网具有通向您的本地网关的路由,则 Kubernetes 控制面板实例的私有 IP 地址将在您的本地网络内自动广播。本地集群的 Kubernetes API 服务器端点托管在 Amazon Route 53(Route 53)中。API 访问端点可由公有 DNS 服务器解析至 Kubernetes API 服务器的私有 IP 地址。
本地集群的 Kubernetes 控制面板实例将配置具有固定私有 IP 地址的静态弹性网络接口,这些固定私有 IP 地址在整个集群生命周期中都不会更改。在网络连接断开期间,与 Kubernetes API 服务器互动的设备可能无法连接到 Route 53。如果是这种情况,我们建议使用静态私有 IP 地址配置
/etc/hosts
以实现持续运行。我们还建议设置本地 DNS 服务器,并将其连接到 Outpost。有关更多信息,请参阅 AWS Outposts 文档。运行以下命令以确认已建立与集群的通信。kubectl get svc
示例输出如下。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
-
(可选)当本地集群与 AWS Cloud 断开连接时,对其进行身份验证测试。有关说明,请参阅 在 AWS Outposts 上准备本地 Amazon EKS 集群以防断网。
内部资源
Amazon EKS 将在您的集群上创建以下资源。这些资源将供 Amazon EKS 内部使用。为使您的集群正常运行,请不要编辑或修改这些资源。
-
以下映像 Pods
: -
aws-iam-authenticator-
node-hostname
-
eks-certificates-controller-
node-hostname
-
etcd-
node-hostname
-
kube-apiserver-
node-hostname
-
kube-controller-manager-
node-hostname
-
kube-scheduler-
node-hostname
-
-
以下自行管理的附加组件:
-
kube-system/coredns
-
kube-system/
kube-proxy
(在您添加第一个节点之前不会创建) -
kube-system/aws-node
(在您添加第一个节点之前不会创建)。本地集群将使用 Amazon VPC CNI plugin for Kubernetes 插件进行集群联网。不要更改控制面板实例(名为aws-node-controlplane-*
的容器组 (pod))的配置。您可以使用一些配置变量在插件创建新网络接口时更改默认值。有关更多信息,请参阅 GitHub 上的文档。
-
-
以下服务:
-
default/kubernetes
-
kube-system/kube-dns
-
-
名为
eks.system
的PodSecurityPolicy
-
名为
eks:system:podsecuritypolicy
的ClusterRole
-
名为
eks:system
的ClusterRoleBinding
-
除集群安全组以外,Amazon EKS 还会在您名为
eks-local-internal-do-not-use-or-edit-
的 AWS 账户 中创建一个安全组。此安全组允许流量在控制面板实例上运行的 Kubernetes 组件之间自由流动。cluster-name
-uniqueid
向您建议的后续步骤:
-
向创建集群的 IAM 主体授予所需的权限,以便在 AWS Management Console 中查看 Kubernetes 资源
-
授予 IAM 实体访问您的集群的权限。如果您希望实体在 Amazon EKS 控制台中查看 Kubernetes 资源,请向实体授予 所需的权限。
-
熟悉网络断开连接期间发生的情况。
-
考虑为您的
etcd
制定备份计划。Amazon EKS 不支持为本地集群自动备份和恢复etcd
。有关更多信息,请参阅 Kubernetes 文档中的备份etcd
集群。两个主要选项使用 etcdctl
自动拍摄快照或使用 Amazon EBS 存储卷备份。