背景: ansible执行安装脚本报错:unattended-upgrades

unattended-upgrades 是 Ubuntu 系统默认的 “自动更新服务”,会后台自动下载并安装系统安全更新,期间会占用 dpkg 锁,阻止其他 apt/dpkg 操作。以下是分步修复方案:

一、核心思路

  1. 先停止 unattended-upgrades 服务,释放 dpkg 锁;
  2. 清理可能残留的锁文件(若服务停止后锁仍被占用);
  3. 禁用自动更新(避免后续再次干扰);
  4. 重新执行 Ansible 安装任务。

二、分步修复方案(在报错的 worker 节点 192.168.36.124 执行)

步骤 1:停止 unattended-upgrades 服务,释放锁
# 1. 停止自动更新服务
sudo systemctl stop unattended-upgrades

# 2. 禁用服务(避免开机自启,后续手动更新)
sudo systemctl disable unattended-upgrades

# 3. 验证服务已停止
sudo systemctl status unattended-upgrades
# 预期输出:inactive (dead)
步骤 2:清理 dpkg 残留锁文件(关键!)

若服务停止后仍提示 “锁被占用”,说明有残留锁文件,需手动清理:

# 1. 强制删除 dpkg 前端锁(报错中提到的锁文件)
sudo rm -f /var/lib/dpkg/lock-frontend

# 2. 同时删除 dpkg 后端锁(避免关联锁占用)
sudo rm -f /var/lib/dpkg/lock

# 3. 清理 apt 缓存锁(可选,防止连锁问题)
sudo rm -f /var/cache/apt/archives/lock
sudo rm -f /var/lib/apt/lists/lock

# 4. 修复 dpkg 数据库(若之前更新中断导致数据库损坏)
sudo dpkg --configure -a
步骤 3:更新 apt 缓存,确保安装正常
# 更新 apt 源缓存(避免安装时依赖解析失败)
sudo apt update -y
步骤 4:手动测试安装(可选,验证锁已释放)
# 手动安装 kubelet/kubeadm/kubectl(版本与 Ansible 配置一致)
sudo apt-get -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" install kubelet=1.24.9-00 kubeadm=1.24.9-00 kubectl=1.28.2-00
  • 若手动安装成功,说明锁已释放,可继续执行 Ansible 任务;
  • 若仍报错 “锁占用”,重启节点(终极方案,彻底释放锁):sudo reboot
步骤 5:重新执行 Ansible 任务

回到 Ansible 控制节点,重新运行安装组件的 Playbook:

ansible-playbook 你的部署剧本.yaml  # 替换为你的实际 Playbook 文件名
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐