我想了解 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 网站上)
集群创建工作流