EKS Anywhere 集群引导是如何工作的?

2 分钟阅读
0

我想了解 Amazon Elastic Kubernetes Service(Amazon EKS)Anywhere 的引导流程。

解决方法

引导集群

当您创建初始的独立集群或管理集群时,Amazon EKS Anywhere 还会创建一个引导集群。这是一个临时的、单节点 Kubernetes in Docker(KinD)集群,它是在一个独立的管理计算机上创建的,旨在简化主集群的创建。

EKS Anywhere 在托管 CAPI 和 CAPX 操作员的管理计算机上创建一个引导集群。要创建引导集群,EKS Anywhere 必须完成以下步骤:

  • 拉取 KinD 节点镜像
  • 准备节点
  • 编写配置
  • 启动控制面板
  • 安装 CNI
  • 在基于 KinD 的单节点集群上安装 StorageClass

集群创建

当引导集群在管理计算机上运行并正确配置后,目标集群就开始创建。EKS Anywhere 在以下过程中使用 kubectl 来应用目标集群配置:

1.    在 etcd、控制面板和 Worker 节点准备就绪后,目标集群会接收其网络配置。

2.    目标集群接收其默认存储类安装。

3.    CAPI 提供程序是在目标集群上配置的。这使得目标集群能够控制和运行其自行管理所需的组件。

4.    在目标集群上运行 CAPI 之后,CAPI 对象会从引导集群移动到目标集群的 CAPI 服务中。这个过程通过在内部使用 clusterctl 命令来完成。

5.    目标集群接收与 EKS Anywhere 特定的 Kubernetes CRD 和其他附加组件。

6.    集群设置已保存。

引导过程创建了一个位于CLUSTER_NAME/generated/CLUSTER_NAME-eks-a-cluster.yaml 的 YAML 文件。

引导成功后,此 YAML 文件会移动到 CLUSTER_NAME/CLUSTER_NAME-eks-a-cluster.yaml

同样,Kubeconfig 从 CLUSTER_NAME/generated/CLUSTER_NAME.kind.kubeconfig 移动到 CLUSTER_NAME/CLUSTER_NAME-eks-a-cluster.kubeconfig

当 etcd、控制面板和 Worker 节点准备就绪后,工作负载集群会接收其网络设置。当集群处于活动状态并且 CAPI 服务在新集群上运行时,不再需要引导集群。之后,该服务会删除引导集群。

包工作流

在引导过程中,EKS Anywhere 在目标集群创建、集群升级和集群删除的工作流中使用以下逻辑。

集群创建

有关在创建集群期间的完整包工作流,请查看 GitHub 上的 create.go。在此工作流中,EKS Anywhere 使用以下逻辑:

  • 设置和验证
    **注意:**如果此步骤失败,可能是预检失败或者注册表设置不正确。
  • 创建新的引导集群
    创建新的 KinD 集群
    引导集群上特定于提供商的 pre-capi-install-setup
    在引导集群上安装 cluster-api 提供程序
    提供程序特定的 post-setup
  • 创建新的工作负载集群
    等待外部 etcd 准备就绪
    等待控制面板变为可用
    等待工作负载 kubeconfig 生成
    在工作负载集群上安装网络
    在引导集群上安装计算机运行状况检查
    等待控制面板和 Worker 机器准备就绪
  • 在管理上安装资源
  • 安装 eks-a 组件任务
  • 安装 GitOps 管理器
  • 移动集群管理
  • 写入 ClusterConfig
  • 删除引导集群
  • 安装精选包

集群升级

有关集群升级期间的完整包工作流,请查看 GitHub 上的 upgrade.go。在此工作流中,EKS Anywhere 使用以下逻辑:

  • 设置和验证
  • 更新密钥
  • 检查 etcd CAPI 组件是否存在
  • 升级核心组件
  • 检查是否需要升级
  • 暂停 eks-a 协调
  • 创建引导集群
  • 安装 CAPI
  • 将管理移至引导集群
  • 将管理移至工作负载集群
  • 升级工作负载集群
  • 删除引导集群
  • 更新工作负载集群和 Git 资源
  • 恢复 eks-a 协调
  • 写入 ClusterConfig

集群删除

有关在删除集群期间的完整包工作流,请查看 GitHub 上的delete.go。在此工作流中,EKS Anywhere 使用以下逻辑:

  • 设置和验证
  • 创建管理集群
  • 安装 CAPI
  • 移动集群管理
  • 删除工作负载集群
  • 清理 Git 存储库
  • 删除包资源
  • 删除管理集群

创建集群时出错

如果遇到问题或错误,请查看管理计算机和 capc-controller-manager 中的日志。使用 kubectl 在 capc-system 命名空间中查看 capc-controller-manager 日志。要进一步进行故障排除,请检查位于 eksa-system 命名空间中的集群的CAPI 对象的状态。

您还可以在其他 CAPI 管理器(如 capi-kubeadm-bootstrap-controller、capi-kubeadm-control-plane-controller 和 capi-controller-manager)的日志中找到与错误相关的信息。这些管理器协同工作,您可以使用 kubectl get pods -A 命令在各自的命名空间中找到它们。有关详细信息,请参阅 EKS Anywhere 故障排除指南

有关修复引导过程中语言分析错误的脚本,请参阅 GitHub 上的 bootstrapper.go

相关信息

KinD 快速入门(在 KinD 网站上)

集群创建工作流

AWS 官方
AWS 官方已更新 1 年前