["Shared connection closed."], "stdout": "sudo: 使用 Ansible 剧本时密码是 required\r\n

["Shared connection closed."], "stdout": "sudo: a password is required\r\n while using Ansible playbook

我正在尝试 运行 一本用于在 Ubuntu 16.04 OS 上使用工具 kubespray 部署 Kubernetes 集群的 Ansible 剧本。我有一台安装了 Ansible 和克隆的 kubespray Git 存储库的基础机器。集群中包含一个主节点和两个工作节点。

我的主机(更新)文件就像下面的截图,

[all]
MILDEVKUB020 ansible_ssh_host=MILDEVKUB020 ip=192.168.16.173 ansible_user=uName  ansible_ssh_pass=pwd
MILDEVKUB030 ansible_ssh_host=MILDEVKUB030 ip=192.168.16.176 ansible_user=uName  ansible_ssh_pass=pwd
MILDEVKUB040 ansible_ssh_host=MILDEVKUB040 ip=192.168.16.177 ansible_user=uName  ansible_ssh_pass=pwd

[kube-master]
MILDEVKUB020

[etcd]
MILDEVKUB020

[kube-node]
MILDEVKUB020
MILDEVKUB030
MILDEVKUB040

[k8s-cluster:children]
kube-master
kube-node

hosts.ini 文件的位置是 /inventory/sample。我正在尝试以下 Ansible 命令

sudo ansible-playbook -i inventory/sample/hosts.ini cluster.yml --user=uName --extra-vars "ansible_sudo_pass=pwd"

我正在使用以下 link

中的剧本“cluster.yml”

https://github.com/kubernetes-sigs/kubespray/blob/master/cluster.yml

我的 /etc/hosts 文件包含条目,

127.0.0.1 MILDEVDCR01.Milletech.us MILDEVDCR01
192.168.16.173 MILDEVKUB020.Milletech.us MILDEVKUB020
192.168.16.176 MILDEVKUB030.Milletech.us MILDEVKUB030
192.168.16.177 MILDEVKUB040.Milletech.us MILDEVKUB040

更新错误

TASK [adduser : User | Create User Group] 
Thursday 04 April 2019  11:34:55 -0400 (0:00:00.508)       0:00:33.383 ********
fatal: [MILDEVKUB040]: FAILED! => {"changed": false, "msg": "groupadd: Permission denied.\ngroupadd: cannot lock /etc/group; try again later.\n", "name": "kube-cert"}
fatal: [MILDEVKUB020]: FAILED! => {"changed": false, "msg": "groupadd: Permission denied.\ngroupadd: cannot lock /etc/group; try again later.\n", "name": "kube-cert"}
fatal: [MILDEVKUB030]: FAILED! => {"changed": false, "msg": "groupadd: Permission denied.\ngroupadd: cannot lock /etc/group; try again later.\n", "name": "kube-cert"}

即使我能够使用 ssh 从主机连接所有机器,我也会收到这样的错误。我如何跟踪 运行 使用此命令部署 Kubernetes 集群的问题是什么?

您可能需要指定 ssh 用户或密钥

  • 将用户名添加到清单
ansible_ssh_user=<USERNAME>
  • 添加密码:
ansible_ssh_pass=<PASSWORD>

如果没有 - 分享正在运行的 ssh 命令。

如果您删除了密码,ssh 连接现在应该可以了。 您是否在更改后更新了远程主机上的 ssh 密钥?

如果您使用user/password组合登录。执行 ansible 的用户应该出现在 sudoers 文件中以切换到 root 或其他特权用户

检查 sudoers 并尝试在目标服务器上手动执行 sudo su root

在尝试大量研究后,我发现当我们是 运行 ansible 剧本时,需要添加参数“--ask-pass --become --ask-become-pass”。我尝试了以下命令,

sudo ansible-playbook -i inventory/sample/hosts.ini cluster.yml --user=docker --ask-pass --become --ask-become-pass

而且,在继续部署kubernetes集群的时候,又会出现inventory name只能用小写字母的问题。所以我编辑了所有清单名称和 etc/hostname 和 /etc/hosts 小写 hostname 。并且还将所有小写字母放入库存文件中。现在它工作成功。

/etc/hosts 包含以下内容,

127.0.0.1 MILDEVDCR01.Milletech.us mildevdcr01
192.168.16.173 MILDEVKUB020.Milletech.us mildevkub020
192.168.16.176 MILDEVKUB030.Milletech.us mildevkub030
192.168.16.177 MILDEVKUB040.Milletech.us mildevkub040

etc/hostname

mildevdcr01

和hosts.ini文件如下,

[all]
mildevkub020 ansible_ssh_host=mildevkub020 ip=192.168.16.173 ansible_user=uName  
ansible_ssh_pass=pwd
mildevkub030 ansible_ssh_host=mildevkub030 ip=192.168.16.176 ansible_user=uName  
ansible_ssh_pass=pwd
mildevkub040 ansible_ssh_host=mildevkub040 ip=192.168.16.177 ansible_user=uName  
ansible_ssh_pass=pwd

[kube-master]
mildevkub020

[etcd]
mildevkub020

[kube-node]
mildevkub020
mildevkub030
mildevkub040

[k8s-cluster:children]
kube-master
kube-node

如果我们这样做,我们将在目标主机上获得部署的 Kubernetes 集群。