首页
/ K3s-ansible项目中的Airgap模式卸载问题分析与解决方案

K3s-ansible项目中的Airgap模式卸载问题分析与解决方案

2025-07-02 20:52:05作者:姚月梅Lane

问题背景

在使用k3s-ansible项目部署K3s集群时,如果采用Airgap(离线)模式安装,在后续执行集群卸载操作时会遇到失败的情况。具体表现为运行reset.yml剧本时,k3s-uninstall.sh脚本会报错"Additional k3s services installed, skipping uninstall of k3s"并终止执行。

问题根源分析

经过深入排查,发现问题出在airgap角色中的服务安装逻辑上。在当前的实现中,无论节点是server还是agent类型,都会同时安装k3s.service和k3s-agent.service两个服务。这导致在卸载时,k3s-uninstall.sh脚本检测到存在多个K3s服务而拒绝执行卸载操作。

k3s-uninstall.sh脚本中有一段关键逻辑:它会检查/etc/systemd/system/目录下是否存在多个k3s相关服务文件。如果发现存在多个服务,就会输出错误信息并退出,以避免误删其他服务。

技术细节

在airgap角色的main.yml文件中,有两个关键任务:

  1. 为server节点安装K3s服务
  2. 为agent节点安装K3s服务

当前实现的问题是这两个任务没有添加适当的条件判断,导致它们会在所有节点上执行。正确的行为应该是:

  • 在server节点上只安装k3s.service
  • 在agent节点上只安装k3s-agent.service

解决方案

解决方案很简单,只需要为这两个任务添加适当的when条件判断:

- name: Run K3s Install [server]
  when: inventory_hostname in groups['server']
  ansible.builtin.command:
    cmd: /usr/local/bin/k3s-install.sh
  environment:
    INSTALL_K3S_SKIP_ENABLE: "true"
    INSTALL_K3S_SKIP_DOWNLOAD: "true"
  changed_when: true

- name: Run K3s Install [agent]
  when: inventory_hostname in groups['agent']
  ansible.builtin.command:
    cmd: /usr/local/bin/k3s-install.sh
  environment:
    INSTALL_K3S_SKIP_ENABLE: "true"
    INSTALL_K3S_SKIP_DOWNLOAD: "true"
    INSTALL_K3S_EXEC: "agent"
  changed_when: true

验证与测试

在实际环境中应用此修改后,可以观察到:

  1. server节点上只安装了k3s.service
  2. agent节点上只安装了k3s-agent.service
  3. 执行reset.yml剧本时,k3s-uninstall.sh能够顺利完成卸载操作

最佳实践建议

对于使用k3s-ansible项目部署K3s集群的用户,特别是采用Airgap模式的用户,建议:

  1. 在部署前检查roles/airgap/tasks/main.yml文件,确保服务安装任务有正确的条件判断
  2. 定期更新项目代码,获取最新的修复和改进
  3. 在测试环境中验证集群的安装和卸载流程,确保一切正常后再应用到生产环境

这个问题虽然看起来简单,但它展示了在自动化部署中条件判断的重要性。特别是在处理多角色节点时,精确控制任务的执行范围是保证系统稳定性的关键。

登录后查看全文
热门项目推荐

热门内容推荐