我研究了这个问题,使用Ansible 管理minikube 不是一个容易的话题。让我详细说明一下:
主要问题如下:
在 POSIX 环境下执行的大多数 Ansible 模块需要目标主机上的 Python 解释器。除非另有配置,否则 Ansible 将尝试在每个目标主机上第一次为该主机执行 Python 模块时发现合适的 Python 解释器。
-- Ansible Docs
这意味着大多数模块将无法使用。甚至 ping
重现步骤:
- 安装 Ansible
- 安装 Virtualbox
- 安装 minikube
- 启动 minikube
- SSH 到 minikube
- 配置 Ansible
- 测试
安装 Ansible
正如原帖所说,它可以通过 pip 安装。
例如:
$ pip3 install ansible
请为您的系统下载并安装合适的版本。
安装 minikube
请关注本站:Kubernetes.io
启动 minikube
你可以通过调用命令来启动minikube:
$ minikube start --vm-driver=virtualbox
参数--vm-driver=virtualbox 很重要,因为它在以后连接到minikube 时很有用。
请等待 minikube 在 Virtualbox 上成功部署。
SSH 进入 minikube
需要知道Virtualbox内部minikube的IP地址。
获取此 IP 的一种方法是:
- 打开虚拟盒子
- 点击minikube虚拟机显示
- 输入 root 作为帐户名称。它不应该要求输入密码
- 执行命令:
$ ip a | less 并找到网络接口的地址。格式应为 192.168.99.XX
请从用于启动 minikube 的终端运行以下命令:
$ minikube ssh
上面的命令将ssh 到新创建的minikube 环境,并将私钥存储在位置:
HOME_DIRECTORY .minikube/machines/minikube/id_rsa
需要id_rsa 才能连接到minikube
尝试通过调用命令登录minikube:
ssh -i PATH_TO/id_rsa docker@IP_ADDRESS
如果登录正确发生,则 Ansible 应该没有问题
配置 Ansible
使用ansible-playbook 需要2个文件:
-
Hosts 文件包含有关主机的信息
-
Playbook 文件,其中包含您要求 Ansible 执行的操作
主机文件示例:
[minikube_env]
minikube ansible_host=IP_ADDRESS ansible_ssh_private_key_file=./id_rsa
[minikube_env:vars]
ansible_user=docker
ansible_port=22
ansible_ssh_private_key_file=./id_rsa 将告诉 Ansible 使用文件中的 ssh 密钥,并将正确的密钥用于此 minikube 实例。
请注意,此声明需要将 id_rsa 文件与其余文件放在同一位置。
示例剧本:
- name: Playbook for checking connection between hosts
hosts: all
gather_facts: no
tasks:
- name: Task to check the connection
ping:
您可以通过调用命令来测试连接:
$ ansible-playbook -i hosts_file ping.yaml
上面的命令应该会失败,因为没有安装 Python 解释器。
致命:[minikube]:失败! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "module_stderr": "与 192.168.99.101 的共享连接已关闭。\r\n", "module_stdout" : "/bin/sh: /usr/bin/python: 没有那个文件或目录\r\n", "msg": "模块执行失败,你可能需要设置解释器。\n见stdout/stderr对于确切的错误", "rc": 127}
Ansible 和 minikube 之间的连接成功,但没有 Python 解释器支持它。
有一种方法可以在没有 Python 解释器的情况下使用 Ansible。
Ansible documentation 正在解释 raw 模块的使用。