安装 Bare Metal Provider
本文介绍如何在 global 集群上安装 Bare Metal 基础设施 Provider 和集群引导 Provider,以及如何将安装在 Bare Metal 上的 global 集群准备为管理集群。
目录
适用场景先决条件安装 Provider 集群插件将 global 集群准备为管理集群让 provider 指向实际存在的平台证书在 global 集群上安装 Cluster API providers将基础镜像上传到 global Registry创建 elemental 镜像目录业务注册使用平台域名后续步骤适用场景
在 global 集群安装完成后、创建第一个 Bare Metal 业务集群之前,完成安装 Provider 集群插件。无论 global 集群本身运行在哪种 IaaS 平台上,都必须完成此操作。在 DR 对中,请在两个 global 集群上都完成此操作,以便发生故障转移后,备用集群能够协调相同的业务集群。
如果 global 集群安装在 Bare Metal 上,还要完成将 global 集群准备为管理集群。所有安装在 Bare Metal 上的 global 集群都需要执行此操作,无论您是否计划创建 Bare Metal 业务集群:
- 在停用引导集群之前完成此操作。
- 完成交接后,重新配置
global节点时,会从globalRegistry 拉取baremetal-base-image;本节会将其上传到该 Registry。 - 在创建 Bare Metal 业务集群之前完成此操作。
这项任务与安装 global 集群中的 Provider 操作步骤是分开的。那些操作步骤会将 Provider 软件包上传到临时引导集群,以创建 global 集群本身。
先决条件
安装 Provider 之前,请确保您具备:
- 访问
global集群的权限。 - 可访问 Customer Portal 以下载集群插件。
安装 Provider 集群插件
下载软件包
裸金属工作流需要两个集群插件。请从 Customer Portal 下载这两个插件。对于 4.5,它们列在 Common ACP Extensions 下;请参阅下载。
- Alauda Container Platform Cluster Bootstrap Provider
- Alauda Container Platform Infrastructure Provider for Bare Metal(一个 umbrella chart,会同时提供
cluster-api-provider-baremetal-manager和elemental-operator子 chart)
上架软件包
使用 violet push 将这两个软件包上架到平台。有关命令及其参数,请参阅上架软件包。
安装集群插件
在 global 集群上安装这两个集群插件。有关操作步骤,请参阅集群插件。
如果 global 集群安装在 Bare Metal 上,请在安装 Infrastructure Provider for Bare Metal 时设置以下值。请在安装前确定这些值:
elemental.tls.caCertSecretKey:在dex.tls中找到的密钥;请参阅将 Provider 指向实际存在的平台证书。- 在 DR 对中,双方的
elemental.systemAgent.splitAuthEnabled: true,以及 active 集群上的elemental.systemAgent.sharedAuthReadOnly: false和 standby 集群上的true。每个global集群都保留自己的值;DR 同步不会复制 Provider 的ModuleInfo。
按照通过 YAML 安装中的说明,使用 YAML 安装 Infrastructure Provider for Bare Metal,并将这些值放入其 ModuleInfo 的 spec.valuesOverride 中;Web Console 安装表单没有用于设置这些值的字段:
如果插件已安装,请将相同的 valuesOverride 添加到其现有的 ModuleInfo 中:使用 kubectl get moduleinfo -l cpaas.io/cluster-name=global,cpaas.io/module-name=cluster-api-provider-baremetal 找到它,然后运行 kubectl edit moduleinfo <name>。不要编辑 Provider 的 AppRelease:平台会根据 ModuleInfo 重新生成它,因此所做的更改会丢失。
umbrella chart 会在一个操作步骤中同时安装裸金属 Provider manager 和 elemental-operator。它还会创建 elemental-image-catalog ConfigMap,但其中没有任何条目,并且软件包不包含 Alauda OS 镜像。创建集群前,请将 Bare Metal OS 镜像导入平台 Registry,并将您要部署的每个 Kubernetes 版本添加到 catalog 中;请参阅已导入 OS 镜像并填充镜像目录。
验证安装
安装插件后,验证 controller 和 CRD 是否存在:
预期输出包括:
baremetalclusters.infrastructure.cluster.x-k8s.iobaremetalmachines.infrastructure.cluster.x-k8s.iobaremetalmachinetemplates.infrastructure.cluster.x-k8s.iomachineinventorypools.infrastructure.cluster.x-k8s.iomachineinventories.elemental.cattle.iomachineregistrations.elemental.cattle.ioseedimages.elemental.cattle.io
安装完成后,elemental-image-catalog 中没有 data 条目。添加要部署的 Kubernetes 版本后,请确认这些版本:
集群使用的每个 Machine.spec.version(包括创建时和升级时)都必须作为此 ConfigMap 中的键存在。缺少键会使 BaremetalMachine 停留在 Failed,并显示 Reason=ImageCatalogMiss。
将 global 集群准备为管理集群
本节适用于安装在裸金属上的 global 集群。
安装 global 集群 本身会创建 global 集群。
之后创建裸金属业务集群是另一项工作:global 集群随后会作为 Cluster API 管理集群,
并且需要引导准备步骤未放置在其中的 provider 组件和制品。对于 DR 对中的两个 global 集群,都要完成本节操作——
发生故障转移后,备用集群会成为活动管理集群,并且必须能够协调相同的业务集群。
安装期间导入 Cluster API 资源只会创建 CRD,不会在 global 集群上安装
Bare Metal provider 或 Cluster Bootstrap Provider。
设置本节使用的值。每个 global 集群运行一次,并将
GLOBAL_KUBECONFIG 指向要准备的集群。OS_IMAGE_TAG 和 K8S_VERSION 是
global 安装中第 3 步和
第 1 步使用的值。
从要准备的集群自身的
ProductBase 和 cpaas-system/registry-admin Secret 中读取 Registry 地址和密码:
让 provider 指向实际存在的平台证书
Bare Metal provider 从
elemental.tls.caCertSecretName / caCertSecretKey 挂载 platformUrl 的 CA bundle,这些值默认分别为
dex.tls 和 ca.crt。
这些默认值假定存在由 cert-manager 签发的 dex.tls。在 global 集群上,dex.tls 改为由安装程序的
console.cert 流程提供,而 thirdParty 证书生成的 Secret 仅包含
tls.crt 和 tls.key。使用默认键时,operator 永远不会启动:
检查 Secret 实际包含哪些键,并按照安装集群插件中的说明,在 provider 的
ModuleInfo 中相应设置 caCertSecretKey。对于自签名
平台证书,证书本身就是其 CA,因此 tls.crt 是正确的键:
在 global 集群上安装 Cluster API providers
将用于引导集群的相同 Bare Metal 和 Cluster Bootstrap Provider 软件包上传到此
global 集群,然后按照安装 Provider 插件中的说明安装两个插件。对于 DR 对中的备用
global 集群,按照上架软件包中的说明将软件包上传到备用集群。
安装 Bare Metal provider 时,将 caCertSecretKey 设置为上一步找到的键。在 DR 对中,还要将 DR 字段设置为与该侧引导版本相同的值:
两侧的 elemental.systemAgent.splitAuthEnabled: true,活动集群上的 sharedAuthReadOnly: false,以及备用集群上的 true。按照安装集群插件中的说明,仅在 provider 的
ModuleInfo 的 spec.valuesOverride 中设置这些值。
此 global 集群不会继承引导版本的值;不要复制其他引导值,例如 handoffHook.*。
继续操作前,确认 manager 和 elemental-operator 正在此 global 集群上运行:
将基础镜像上传到 global Registry
业务 SeedImage 构建在 global 集群上运行,并从
ProductBase.spec.registry.address 中记录的 Registry 拉取基础 ISO。交接后,重新置备 global 节点时也会
从该 Registry 拉取 baremetal-base-image,因为安装程序会将 global
集群的 cpaas.io/registry-address 注解重写为该 Registry。在第 3 步中导入的镜像仅存在于
引导 Registry 中,因此在将这两个镜像推送到 global Registry 之前,ISO 构建会因
MANIFEST_UNKNOWN 而失败。在引导节点上,从 bare-metal-os containerd
命名空间推送这些镜像。--skip-verify 需要 --local:
每个响应都必须列出 ${OS_IMAGE_TAG}。完成后,使用
ctr -n bare-metal-os images rm "baremetal-base-image:${OS_IMAGE_TAG}" "baremetal-base-image-iso:${OS_IMAGE_TAG}" 删除本地副本。
如果引导节点上已不再有这些镜像,则按照已导入 OS 镜像并填充镜像目录中的说明,从 OS 存档导入。
创建 elemental 镜像目录
provider 通过由 --image-catalog-namespace 和 --image-catalog-name 定位的 ConfigMap,将 Kubernetes 版本映射到 elemental 升级镜像;这两个值默认分别为
cpaas-system 和 elemental-image-catalog。provider chart 创建此 ConfigMap 时不包含任何版本条目,
而且 global 集群不会继承你在引导版本中设置的条目。在添加条目之前,业务集群的首次
BaremetalMachine 会立即失败:
为此 global 集群管理的每个 Kubernetes 版本添加一个条目,包括其自身节点使用的
${K8S_VERSION}。请修改现有 ConfigMap,而不是替换它,以保留之前添加的条目:
遇到 ImageCatalogMiss 的 BaremetalMachine 在修复目录后仍会保持 Failed。
重新协调对象和重启 provider 都不会改变其状态;协调器会刻意将缺少映射视为终止状态,而不是回退到默认镜像。
删除 Machine,使其所有者 KubeadmControlPlane 或 MachineSet 重新创建它。
在应用第一个业务集群清单之前填充目录,即可完全避免此问题。
业务注册使用平台域名
业务 MachineRegistration 不得带有
baremetal.cluster.io/system-agent-auth-scope: global 注解。其注册 URL 会解析为
https://<platform-domain>/...,生成的 MachineInventory 会带有
system-agent-auth-scope: shared 注解。该共享身份与共享 ServiceAccount
签名密钥共同使业务主机能够在故障转移后继续通过平台域名报告状态。
后续步骤
安装 provider 后,您可以继续执行以下操作:
- 创建集群
- 查看 Provider 概览,了解资源池模型和计划生命周期。