概览
Machine Configuration 的工作原理
Machine Configuration 处理集群节点上的文件更新、systemd unit 管理和 SSH 公钥部署。系统提供 MachineConfig Custom Resource Definition (CRD) 用于将配置文件写入主机,以及 MachineConfigPool CRD 用于将节点组织到配置组中。
每个 MachineConfigPool 管理一组节点及其关联的 MachineConfig。节点角色决定 MachineConfigPool 的成员资格——池根据其角色标签管理节点。
Machine Configuration 作为集群插件交付,并按集群安装;请参阅 安装。当 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,用于设置全局节点更新策略。有关详细信息,请参阅 Node Disruption Policy 文档。
有时节点配置会偏离其预期状态。machine-config-daemon 持续监控配置漂移,并将受影响的节点标记为 Degraded,直到管理员解决问题。Degraded 节点保持运行状态,但无法接收更新。
关键概念
配置处理
MachineConfig 按字母顺序处理。第一个配置作为基础,后续配置叠加在其上。每个 MachineConfigPool 将其管理的配置渲染为单个 MachineConfig,命名为:render-<pool-name>-<content-hash>,该配置应用于该池中的所有节点。
更新策略
Machine Configuration 按年龄更新节点,从最旧的开始。每个 MachineConfigPool 中的 maxUnavailable 字段控制同时更新的节点数量。
管理范围 Machine Configuration 仅管理显式配置的项。手动系统更改不受 Machine Configuration Operator 的影响。
配置格式 所有 MachineConfig 均使用 Ignition v3.4.0 规范格式。
漂移检测 当 Machine Configuration 管理的文件在系统外发生更改时,machine-config-daemon 将节点标记为 Degraded,但不会覆盖修改的文件。
池的优势 MachineConfigPool 确保新节点加入集群时自动接收正确的配置。
支持的修改
- 常规文件(在可写的非 root 目录中)
- systemd unit 及其配置
- 仅适用于 boot 用户的 SSH 公钥
Machine Configuration 不创建用户或组。您必须在配置 SSH 密钥之前创建 boot 用户和组。
重要:避免手动修改节点——它们可能导致配置冲突。
有关版本历史和更改,请参阅 Release Notes。
配置类型
文件 创建或修改文件内容和权限。只有当包含分区可写时,才能管理文件。
Systemd Unit 定义新的 systemd 服务或使用附加配置扩展现有服务。
SSH 公钥 为 boot 用户配置 SSH 访问。其他用户的密钥将被拒绝为无效。
节点更新过程
当您应用 MachineConfig 时,Machine Configuration 确保所有受影响的节点达到所需状态。Machine Configuration Operator 生成新的渲染配置,machine-config-daemon 在每个节点上执行以下步骤:
- Cordon - 将节点标记为不可调度新工作负载
- Drain - 终止现有工作负载并将其重新调度到其他地方
- Apply - 将新配置写入磁盘
- Reboot - 重启节点以激活更改
- Uncordon - 将节点再次标记为可调度
检查 MachineConfigPool 状态
使用以下命令检查池状态:
示例输出:
字段参考:
- NAME:池标识符
- CONFIG:所有池节点上最近应用的配置
- UPDATED:当所有节点具有当前配置时为
True;更新期间为False - UPDATING:当至少一个节点正在更新时为
True;当所有节点都是当前时为False - DEGRADED:当配置无法应用于至少一个节点时为
True - MACHINECOUNT:池中的总节点数
- READYMACHINECOUNT:具有当前配置且处于健康、可调度状态的节点
- UPDATEDMACHINECOUNT:已应用当前配置的节点
- DEGRADEDMACHINECOUNT:标记为 degraded 或不可调和的节点
在此示例中,所有三个控制平面节点都是当前的,而 worker 池正在更新——两个节点已完成,一个正在进行中。
获取详细的池信息:
查看所有 MachineConfig:
示例输出:
检查特定配置:
检查单个节点状态:
示例输出:
节点状态参考:
- NODE:节点标识符
- DESIRED:节点的目标配置
- CURRENT:当前应用的配置
- STATE:配置状态
Done:节点健康,所需配置和当前配置匹配Working:节点正在更新(current ≠ desired)Degraded:检测到配置漂移或应用失败——检查日志以找出根本原因