Skip to content

Ansible Learning Report csd

YagoToasa edited this page Oct 19, 2019 · 1 revision

参考资料:Ansible Documents

Ansible是什么?

Ansible是一个配置管理和应用部署工具。

Ansible默认通过SSH协议管理机器,因此Ansible不需要在受控服务器上安装客户端程序,只需要将Ansible安装在用于集中控制/管理的服务器上即可。

管理节点

要求

  1. Python 2 (version 2.6 or later) or Python 3 (version 3.5 or later).
  2. System:Fedora、RHEL、CentOS、Ubuntu、Debian、Gentoo、FreeBSD、macOS、Arch Linux……

安装

  1. 因为项目后续要求使用python,因此这里采用pip安装方式,这里我直接全局安装了。

    pip install ansible
    
    ansible --version
    • Result:

      ansible1
  2. 使用pip安装的ansible没有配置配置文件(config file),可以使用touch命令创建一个空的ansible.cfg文件

    sudo touch /etc/ansible.cfg
    
    ansible --version
    • Result:

      ansible-2
  3. 官方提供的默认配置文件实例:ansible.cfg

配置项说明

  • inventory:指定ansible连接的主机清单,默认/root/ansible/hosts;
  • forks:Ansible可以同时启用的进程数量,默认是5个;
  • remote_user:远程连接用户,默认root;
  • sudo_user:默认执行命令的用户,默认root;
  • remote_port:远程连接使用的端口,默认22;
  • private_key_file:SSH使用密钥认证时,指定的密钥路径;
  • host_key_checking:设置是否检查SSH主机密钥,设置为False可以跳过SSH首次登陆时的验证;
  • log_path:日志文件路径,Ansible默认不记录日志。

免密登陆

  1. 在控制节点创建秘钥,执行命令,之后一直敲回车就行。

    ssh-keygen -t rsa -C "email-address"
    
    ls -al ~/.ssh
    • Result:

      ansible-3
    • id_rsa.pub 即为公钥文件

    • id_rsa为私钥,不能外泄!

  2. 拷贝当前主机的ssh key到远程主机,username@IP

    # 这里我连接的是k8smaster节点
    ssh-copy-id [email protected]
  3. 将受控节点的ip保存到管理节点的known_hosts中

    ssh-keyscan 192.168.209.152 >> ~/.ssh/known_hosts
    • Result:

      ansible-4
  4. 若出现请输入私钥密码,按照以下方法解决

    Enter passphrase for key 'path'
    
    ssh-add -K path
  5. 登陆远程服务器

    ssh username@IP

inventory 文件配置

Default path: /etc/ansible/hosts,若不存在,创建一下就行。

  • 现在将需要管理的受控节点地址配置到hosts文件中

    sudo vim /etc/ansible/hosts
    • Demo:

      ansible-6
      1. 可用[name]来指定分组/名称
      2. 免密登陆这一步,我仅将公钥发送给了k8smaster节点,并未发送给k8snode01节点,因此连接k8snode01,需要指定用户名ansible_user及密码ansible_ssh_pass
      3. 已配置过免密登陆的k8smaster 只需要指定用户名即可。
    • 编辑完毕后保存并退出即可:wq

  • 连接测试

    ansible all -m ping
    • Result:

      ansible7