You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Playbook执行Kubernetes节点加入时提权后找不到shell脚本

Kubernetes节点加入集群脚本找不到问题解决方案

修复步骤

  • 修正Ansible提权配置语法
    你最后测试的配置存在语法错误,sudo become: yes 不符合Ansible规范,正确的提权写法如下:
- name: Join the node to cluster 
  become: yes
  shell: /tmp/join-command.sh

Ansible提权统一使用 become、become_method、become_user 三个参数即可,不要额外添加sudo关键字。

  • 统一使用绝对路径执行脚本
    放弃相对路径写法./tmp/join-command.sh,所有执行场景统一使用绝对路径/tmp/join-command.sh,避免Ansible执行任务时工作目录变化导致路径解析失败。

  • 排查PrivateTmp路径隔离问题
    如果节点的sshd服务开启了PrivateTmp=true,Ansible执行上下文看到的/tmp目录和你登录节点看到的/tmp属于不同的命名空间,会导致文件找不到。
    验证和修复方法:

  1. 执行systemctl show sshd | grep PrivateTmp检查配置,如果返回值为yes则需要修改
  2. 编辑sshd服务配置文件,将PrivateTmp改为no
  3. 执行以下命令重启服务生效:
systemctl daemon-reload
systemctl restart sshd

你也可以暂时把脚本拷贝到/home/marlon/等非/tmp目录执行,验证是否是该问题导致。

  • 修复脚本换行符格式
    如果脚本是在Windows环境下生成的,默认使用CRLF换行符,Linux系统无法正确识别,也会出现找不到文件的报错。可以在拷贝脚本的任务中添加换行符转换配置:
- name: Copy the join command to server location
  become_user: marlon
  copy: 
    src: join-command
    dest: /tmp/join-command.sh
    mode: 0777
    newline_sequence: '\n'

也可以登录节点执行dos2unix /tmp/join-command.sh转换格式后手动执行验证。

  • 前置校验文件状态
    可以在执行脚本前增加校验任务,确认文件实际存在:
- name: Verify join script exists
  stat:
    path: /tmp/join-command.sh
  register: script_stat
- debug:
    msg: "Script exists: {{ script_stat.stat.exists }}, permissions: {{ script_stat.stat.mode }}"

内容的提问来源于stack exchange,提问作者Marlon Goncalves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:54:01