20-ansible.rst 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(支持在配置文件中增加密码免询问)

配置

  • 配置主机列表
mkdir /etc/ansible
vim /etc/ansible/hosts

文件实例

[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公钥方式
ssh-keygen #一路回车
ssh-copy-id ubuntu@目标节点IP
#测试是否成功
ssh ubuntu@ip #不需要输入密码就能登录则说明成功
#也可以用root账户,输入密码。所有主机拷贝一次,后续就可以免密登陆了
#测试ping所有主机
ansible all -m ping
  • 交互式用户名密码方式(询问密码)
ansible starnet1 -m ping --user=ubuntu -k

使用

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

  • 执行多条指令方式
#拷贝文件/文件夹
`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文件内容:

---
- 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

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/