20-ansible.rst.txt 5.01 KB
ansible集群管理工具
=======================================

离线安装包:  smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1

playbook实例在 ansible_playbook_example 目录。


在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序

我们有三种使用方法:

1. 写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。--此方法学习成本低,易上手。初级使用方法

2. 使用ansible提供的module+playbook。 module相当于shell命令(copy/ls/ps/apt-get等等),playbook相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playbook语法(yml),优点是反馈更清晰,流程掌控更好,playbook比shell和python好写些。

3. 编写python脚本,使用ansible-api。 --此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。

中文说明文档:http://www.ansible.com.cn/docs/ 

常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html 。

安装
-------------------------------------------

- 安装

繁星的离线包已放在sdv,放在主节点上执行install.sh即可

在自己主机上安装: pip install ansible 。然后安装sshpass(支持在配置文件中增加密码免询问)

配置
------------------------------------------

- 配置主机列表

.. code-block:: shell

  mkdir /etc/ansible
  vim /etc/ansible/hosts


文件实例

.. code-block:: shell

  [starnet1]
  ubuntu@192.168.66.7
  #指定密码,支持sudo不询问密码
  ubuntu@192.168.66.12 ansible_sudo_pass='ubuntu'
  ubuntu@192.168.66.27 ansible_sudo_pass='ubuntu'
  ubuntu@192.168.66.32 ansible_sudo_pass='ubuntu'
  ubuntu@192.168.66.4 ansible_sudo_pass='ubuntu'
  [starnet2]
  #公司内部使用这种配置方法。
  192.168.66.[2:41] ansible_ssh_pass="ubuntu" ansible_ssh_user="ubuntu" ansible_sudo_pass='ubuntu'



- **非交互式用户名密码方式(推荐公司内部采用此方式,方便但安全性低)**

此方法需要安装sshpass。离线包已包含。密码需要已明文卸载配置中,不安全,在安全要求高的环境中禁止使用。但这个方法节省了对每个主机执行ssh-copy-id,是最方便的。参考配置文件中的starnet2组。在执行命令前,需要配置环境变量 export ANSIBLE_HOST_KEY_CHECKING=False,否则会报错。

执行 ansible starnet2 -m ping, 会向192.168.66.2,192.168.66.3 ... 192.168.66.41 测试是否连通。

- ssh公钥方式

.. code-block:: shell

  ssh-keygen #一路回车
  ssh-copy-id ubuntu@目标节点IP
  #测试是否成功
  ssh ubuntu@ip #不需要输入密码就能登录则说明成功
  #也可以用root账户,输入密码。所有主机拷贝一次,后续就可以免密登陆了 
  #测试ping所有主机
  ansible all -m ping 


- 交互式用户名密码方式(询问密码)

.. code-block:: shell

  ansible starnet1 -m ping --user=ubuntu -k



使用
-------------------------------------------



“上传文件夹,执行脚本” 。这种模式可以批量部署程序

- 执行多条指令方式

.. code-block:: shell

  #拷贝文件/文件夹
  `ansible starnet -m copy -a "src=./ansible_offline_tx1 /home/ubuntu/"`
  #在主机上执行shell命令
  `ansible starnet -m command -a "chmod +x /home/ubuntu/ansible_offline_tx1/install.sh"`
  `ansible starnet -m command -a "bash /home/ubuntu/ansible_offline_tx1/install.sh"`
  以上两条指令结合,可满足大部分需求。

- playbook方式

playbook文件内容:

.. code-block:: shell

  ---
  - hosts: starnet
    sudo: yes
    tasks:•
      - name: copy dir to remote
        copy: src=ansible_offline_tx1 dest=/home/ubuntu/ansible_offline_tx1
      - name: run script
        command: chmod +x install.sh
        args:
          chdir: /home/ubuntu/ansible_offline_tx1/
        command: bash install.sh
        args:
          chdir: /home/ubuntu/ansible_offline_tx1/

保存 ansible_offline_tx1.yml

执行playbook

.. code-block:: shell

  ansible-playbook ansible_offline_tx1.yml


ansible提供了非常多的module,常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html。

ansible-doc -l #可查看所有模块

ansible-doc 模块名   #查看某模块的使用方法,比如 ansible-doc apt  ;  ansible-doc pip  ; ansible-doc ps

我这里的介绍只是快速入门方法,还有很多强大的功能,比如copy的backup特性,幂性,hosts的多级分组,定时任务等等 建议通读一遍中文说明文档:http://www.ansible.com.cn/docs/