我正在尝试使用Vagrant(v2.1.2)和VirtualBox(v5.2.20)设置本地kubernetes集群。
我的Vagrantfile使用ansible_local预配置程序来运行一些ansible剧本,以使用kubeadm预配置K8s集群。
几个月前,当我运行它时,一切都运行良好,但现在不再工作了。不确定为什么它停止工作,但是当我尝试将kube配置复制到无业游民的用户主目录时,主节点的ansible剧本失败。
失败的ansible任务如下:
- name: Copy kubeconfig for vagrant user
copy:
src: /etc/kubernetes/admin.conf
dest: /home/vagrant/.kube/
owner: vagrant
group: vagrant
这会导致以下错误:fatal: [master1]: FAILED! => {"msg": "an error occurred while trying to read the file '/etc/kubernetes/admin.conf': [Errno 13] Permission denied: '/etc/kubernetes/admin.conf'"}
src文件确实存在。如果我在失败后通过ssh进入VM,则可以使用sudo cp /etc/kubernetes/admin.conf /home/vagrant/
复制文件,但是上述失败会导致无业游民的供应失败/停止。
仅供参考,我在游戏和任务级别尝试了一些组合操作,例如become: true
,remote_user: root
,例如
---
- hosts: all
become: true
tasks:
...
...但无济于事。
admin.conf上的权限如下:
vagrant@master1:/etc/kubernetes$ ls -al admin.conf
-rw------- 1 root root 5453 Aug 5 14:07 admin.conf
完整的master-playbook.yml可以找到here。
我如何复制文件?
答案 0 :(得分:0)
引用copy
src要复制到远程服务器的文件的本地路径。
由于运行Ansible Playbook的用户无法在控制器(本地路径)上读取文件,因此播放失败
permission denied: '/etc/kubernetes/admin.conf'
使用 remote_src:是
remote_src如果是,它将进入src的远程/目标计算机
- name: Copy kubeconfig for vagrant user
copy:
remote_src: yes
src: /etc/kubernetes/admin.conf
dest: /home/vagrant/.kube/
owner: vagrant
group: vagrant
根据评论,这似乎是您想要做的
“ src文件确实存在。如果我在失败后ssh进入VM,则可以使用sudo cp /etc/kubernetes/admin.conf / home / vagrant /复制该文件”
如果允许VM上的 remote_user 进行 sudo su 且正确设置escalation,则此方法应该起作用
- hosts: all
become: yes
become_user: root
become_method: sudo
仅允许* remote_user“ sudo cp
是不够的。请参阅Can’t limit escalation to certain commands
特权升级权限必须是常规的。 Ansible并不总是使用特定的命令来做某事,而是从临时文件名运行模块(代码),该文件名每次都会更改。如果您使用“ / sbin / service”或“ / bin / chmod”作为允许的命令,则此操作将失败...