概览
机器配置的工作原理
Machine Configuration 负责在集群节点之间更新文件、管理 systemd 单元以及部署 SSH 公钥。系统提供 MachineConfig Custom Resource Definition (CRD),用于将配置文件写入主机;同时提供 MachineConfigPool CRD,用于将节点组织到配置组中。
每个 MachineConfigPool 管理一组节点及其关联的 MachineConfig。节点角色决定其 MachineConfigPool 成员身份——池根据节点的角色标签管理节点。
Machine Configuration 仅管理运行 Alauda OS 的节点。控制平面节点由控制平面池管理,其他所有节点由 worker 池管理。
Machine Configuration 随 Alauda OS 集群一起提供,无需单独安装。当 Machine Configuration Operator 首次在集群上启动时,它会自动创建两个 MachineConfigPool(控制平面和 worker),以及两个空的 MachineConfig(00-master 和 00-worker)。控制平面池管理 00-master 配置,而 worker 池管理 00-worker 配置。
您可以为需要专用配置的 worker 节点创建自定义 MachineConfigPool。控制平面节点不能使用自定义池。
自定义 MachineConfigPool 会继承 worker 池的所有配置,并添加自身的特定设置。对 worker 池的任何更改都会自动传播到自定义池。Machine Configuration 不支持不继承 worker 池的自定义池。
operator 还会创建一个名为 "cluster" 的默认 MachineConfiguration CR,用于设置全局节点更新策略。有关详细信息,请参阅节点中断策略文档。
有时,节点配置会偏离其预期状态。machine-config-daemon 会持续监控配置偏差,并将受影响的节点标记为 Degraded,直到管理员解决问题。Degraded 节点仍可正常运行,但无法接收更新。
关键概念
配置处理
MachineConfig 按字母顺序处理。第一个配置作为基础,后续配置逐层叠加。每个 MachineConfigPool 都会将其管理的配置渲染为一个名为 render-<pool-name>-<content-hash> 的 MachineConfig,并将其应用于该池中的所有节点。
更新策略
Machine Configuration 按节点年龄更新节点,从最旧的节点开始。每个 MachineConfigPool 中的 maxUnavailable 字段控制同时更新的节点数量。
管理范围
Machine Configuration 仅管理明确配置的项目。手动进行的系统更改不会受到 Machine Configuration Operator 的影响。
配置格式
所有 MachineConfig 均使用 Ignition v3.4.0 规范格式。
偏差检测
当 Machine Configuration 管理的文件在系统外部发生更改时,machine-config-daemon 会将节点标记为 Degraded,但不会覆盖已修改的文件。
池的优势
MachineConfigPool 可确保新节点加入集群时自动获得正确的配置。
支持的修改
- 普通文件(位于可写的非根目录中)
- systemd 单元及其配置
- 仅适用于 boot 用户的 SSH 公钥
Machine Configuration 不会创建用户或组。配置 SSH 密钥之前,必须先创建 boot 用户和组。
重要信息:避免手动修改节点,否则可能导致配置冲突。
配置类型
文件
创建或修改文件内容及权限。只有在文件所在分区可写时,才能管理这些文件。
Systemd 单元
定义新的 systemd 服务,或使用其他配置扩展现有服务。
SSH 公钥
为 boot 用户配置 SSH 访问权限。其他用户的密钥会被视为无效并拒绝。
节点更新过程
应用 MachineConfig 时,Machine Configuration 会确保所有受影响的节点达到所需状态。Machine Configuration Operator 会生成新的渲染配置,machine-config-daemon 则在每个节点上执行以下步骤:
- 隔离 - 将节点标记为不可调度新工作负载
- 排空 - 终止现有工作负载,并将其重新调度到其他位置
- 应用 - 将新配置写入磁盘
- 重启 - 重启节点以激活更改
- 解除隔离 - 将节点标记为可再次调度
验证 Machine Configuration 是否正在运行
在集群上创建 MachineConfig 对象之前,请确认 Machine Configuration 正在运行。
-
确认两个组件均已启动。控制器在控制平面节点上运行;守护进程在每个节点上运行:
-
确认 operator 已创建其初始对象:
-
如果未显示分区或基础配置,请检查控制器日志。控制器会在启动时创建所有这些对象:
检查 MachineConfigPool 状态
使用以下命令检查分区状态:
示例输出:
字段参考:
- NAME:分区标识符
- CONFIG:应用于分区所有节点的最新配置
- UPDATED:所有节点均使用当前配置时为
True;更新期间为False - UPDATING:至少有一个节点正在更新时为
True;所有节点均为最新状态时为False - DEGRADED:至少有一个节点无法应用配置时为
True - MACHINECOUNT:分区中的节点总数
- READYMACHINECOUNT:使用当前配置且处于健康、可调度状态的节点数
- UPDATEDMACHINECOUNT:已应用当前配置的节点数
- DEGRADEDMACHINECOUNT:标记为降级或无法协调的节点数
在此示例中,三个控制平面节点均为最新状态,而 worker 分区正在更新——其中两个节点已完成,一个节点正在更新。
获取详细的分区信息:
查看所有 MachineConfig:
示例输出:
检查特定配置:
检查单个节点的状态:
示例输出:
节点状态参考:
- NODE:节点标识符
- DESIRED:节点的目标配置
- CURRENT:当前已应用的配置
- STATE:配置状态
Done:节点健康,目标配置与当前配置匹配Working:节点正在更新(当前配置 ≠ 目标配置)Degraded:检测到配置漂移或应用失败——请检查日志以确定根本原因