k3s-ansible搭建K8s集群多节点不同ansible_user报错如何解决
问题根因
你遇到的token变量缺失报错,本质是master节点部署任务完全未执行成功,k3s server未完成初始化,自然不会生成对应的token存储到主机变量中,worker节点尝试获取master节点的token时就会抛出未定义错误。从执行日志的PLAY RECAP也能验证这点:master节点的ok值为0,说明没有任何任务执行成功。
而导致该问题的根源是你在inventory中直接将用户名写入主机地址(pi@x.x.x.x)的不规范写法,结合全局ansible_user配置冲突,最终引发主机变量索引异常、master节点部署失败。
解决步骤
1. 修正inventory配置
不要将ssh用户名直接拼接在主机IP前,改为按组/按主机单独指定ansible_user变量,同时删除all.yml中全局的ansible_user: antonis配置,避免全局值覆盖分组配置。
修改后的hosts.ini参考:
[master] 192.168.xxx.xxx ansible_user=antonis [node] 192.168.xxx.xxx ansible_user=pi 192.168.xxx.xxx ansible_user=pi [k3s_cluster:children] master node
如果节点数量多,也可以用分组变量简化配置:
- 新建
inventory/my-cluster/group_vars/master.yml,写入ansible_user: antonis - 新建
inventory/my-cluster/group_vars/node.yml,写入ansible_user: pi - 此时
hosts.ini里不需要每个主机单独加ansible_user变量,保持纯IP即可
2. 清理之前部署的残留文件
之前执行了一半的部署会留下残留配置,需要先清理避免后续部署异常:
- 在master节点执行命令:
sudo /usr/local/bin/k3s-uninstall.sh - 在两个worker节点执行命令:
sudo /usr/local/bin/k3s-agent-uninstall.sh
3. 重新执行部署
执行以下命令启动集群部署:ansible-playbook site.yml -i inventory/my-cluster/hosts.ini
内容的提问来源于stack exchange,提问作者e7lT2P
相关产品推荐
相关产品推荐

