Machine Configuration 负责集群节点上的文件更新、systemd 单元管理以及 SSH 公钥部署。系统提供了 MachineConfig 自定义资源定义(CRD)用于向主机写入配置文件,以及 MachineConfigPool CRD 用于将节点组织成配置组。
每个 MachineConfigPool 管理一组节点及其关联的 MachineConfig。节点角色决定 MachineConfigPool 的归属——pool 根据节点的角色标签管理节点。
在集群安装过程中,系统会自动创建两个 MachineConfigPool(master 和 worker)以及两个空的 MachineConfig(00-master 和 00-worker)。master pool 管理 00-master 配置,worker pool 管理 00-worker 配置。
您可以为需要特殊配置的 worker 节点创建自定义 MachineConfigPool。master 节点不支持使用自定义 pool。
自定义 MachineConfigPool 会继承 worker pool 的所有配置,并添加自己的特定设置。对 worker pool 的任何更改都会自动传播到自定义 pool。Machine Configuration 不支持不继承 worker pool 的自定义 pool。
集群包含一个名为 "cluster" 的默认 MachineConfiguration CR,用于设置全局节点更新策略。详情请参见 Node Disruption Policy 文档。
有时节点配置会偏离预期状态。machine-config-daemon 会持续监控配置漂移,并将受影响节点标记为 Degraded,直到管理员解决问题。Degraded 节点仍可运行,但无法接收更新。
配置处理
MachineConfig 按字母顺序处理。第一个配置作为基础,后续配置叠加其上。每个 MachineConfigPool 会将其管理的配置渲染成一个名为 render-<pool-name>-<content-hash>
的单一 MachineConfig,并应用到该 pool 中的所有节点。
更新策略
Machine Configuration 按节点年龄顺序更新节点,先更新最老的节点。每个 MachineConfigPool 中的 maxUnavailable
字段控制同时更新的节点数量。
管理范围
Machine Configuration 仅管理显式配置的项目。手动系统更改不会被 Machine Configuration Operator 覆盖。
配置格式
所有 MachineConfig 使用 Ignition v3.4.0 规范格式。
漂移检测
当 Machine Configuration 管理的文件被系统外部修改时,machine-config-daemon 会将节点标记为 Degraded,但不会覆盖被修改的文件。
Pool 的优势
MachineConfigPool 确保新加入的节点自动获得正确的配置。
支持的修改类型
Machine Configuration 不会创建用户或组。您必须先创建 boot 用户和组,才能配置 SSH 密钥。
重要提示:避免手动修改节点,可能导致配置冲突。
文件
创建或修改文件内容和权限。仅当文件所在分区可写时,文件才可被管理。
Systemd 单元
定义新的 systemd 服务或通过附加配置扩展现有服务。
SSH 公钥
配置 boot 用户的 SSH 访问权限。其他用户的密钥会被视为无效并拒绝。
当您应用 MachineConfig 时,Machine Configuration 确保所有受影响节点达到期望状态。Machine Configuration Operator 生成新的渲染配置,machine-config-daemon 在每个节点执行以下步骤:
使用以下命令检查 pool 状态:
示例输出:
字段说明:
True
,更新中为 False
True
,全部完成时为 False
True
在此示例中,所有三个 master 节点均为当前状态,而 worker pool 正在更新——两个节点已完成,一个节点正在进行中。
获取详细 pool 信息:
查看所有 MachineConfig:
示例输出:
查看特定配置:
检查单个节点状态:
示例输出:
节点状态说明:
Done
:节点健康,当前配置与目标配置一致Working
:节点正在更新(当前配置不等于目标配置)Degraded
:检测到配置漂移或应用失败——请检查日志以确定根因