说下 ansible 吧 (基础篇 + Ad-hoc 实战)

olei 2,085 views 0

前言

  1. 之前一直用的都是 saltstack,C/S 架构的,需要 master 端以及 minion 端,一台或者多台 master 端,批量控制 minion 端
  2. ansible 呢,没那么复杂,基于 ssh 协议来的批量部署工具,不需要 master 与 minion 端,python 编写的
  3. 基于 ubuntu 16.04 来说明的

安装

  • 方法一:源安装
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible
  • 方法二:pip 安装
pip install ansible
  • 方法三:源码安装 (不作说明,自行百度,建议源或者 pip)

基础介绍

准备

  • 书写 hosts 文件
vim /etc/ansible/hosts
----------------
[test]
xxx.xx.xx
  • 无密码连接远程服务器设置
ssh-copy-id -i ~/.ssh/id_rsa.pub xxx@xxx.xx.xx
  • 测试是否联通
ansible test -m ping
--------------------
test | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

介绍

Anable Ad-hoc::是个临时命令集

展示远程主机的/www 下的所有文件以及文件夹

ansible test -m shell -a "ls /www" --user=root

目标主机需要密码如何处理?(ansible 默认通过 ssh 公钥方式登录)

  1. 添加公钥文件,见上面无密码连接远程服务器设置
  2. 添加一个--ask-pass 参数
ansible text -m shell -a "ls /www" --user=root --ask-pass

参数

  • 普通可选参数
-a --args  后面的整个内容当做一个参数来传给模块
-f --forks 并发控制机器
-m --module-name 指定模块,一般是 ansbile 自带的,比如 ping,shell
-M --module-path 指定模块存放的路径,一般是自定义的一些模块
-i --inventory 改变默认的行为
  • 连接目标主机参数
-K --ask-pass 密码方式连接远程主机
--private-key 连接需要指定私钥的时候
-u --user 连接需要指定用户的时候
-c --connection 控制连接的类型
-T --timeout 控制连接的超时时间
  • 权限控制参数
-s --sudo 需要执行 sudo 命令的时候
-S --su 需要执行 su 切换用户命令的时候
-b --become 普通用户要切换到 root 用户,并且切换过程不需要密码的时候

Ansible Inventory

定义主机关系的文件
默认路径为/etc/ansible/hosts (没有的话,创建一下)
文件内容格式是 ini 格式的

  • Inventory 主机组 -- > [组名]
xxx.xx.xx.xx
[组名]
xxx.xx.xx.xx
xxx.xx.xx.xx
  • Inventory 主机别名
jumper ansible_ssh_port=22 ansible_ssh_host=xxx.xxx.xx.xx ansible_ssh_user=root

这样,这个主机的别名就是 jumper

  • Inventory 连接参数
ansible_ssh_host # 连接的远程主机名
ansible_ssh_port # ssh 端口号
ansible_ssh_user # 默认的 ssh 用户名
ansible_ssh_pass # ssh 密码 (不安全,建议使用--ask-pass 或者 ssh 秘钥)
ansible_sudo_pass # 密码 (不安全,建议使用--ask-sudo-pass)
  • Inventory 批量主机组
[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

实战

ubuntu 安装 supervisor

  • 安装
ansible test -m apt -a "name=supervisor state=present"
  • 查看运行状态
ansible test -m shell -a "/etc/init.d/supervisor status"
  • 启动
ansible test -m systemd -a "name=supervisor state=started"
  • 关闭
ansible test -m systemd -a "name=supervisor state=stopped"
  • 重启
ansible test -m systemd -a "name=supervisor state=restarted"
  • 重载
ansible test -m systemd -a "name=supervisor state=reloaded"

后记

以上都是最基本的概念,命令,之后会说说 ansible-playbook,peace yo~

发表评论 取消回复
表情 图片 链接 代码

分享