qmya00 发表于 2018-1-2 12:32:47

Ansible基础

  Ansible是一种集成IT系统配置管理、应用部署、执行特定任务的开源平台
  特点:
  部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作
  默认使用SSH协议对设备进行管理
  主从集中化管理,配置简单、功能强大、扩展性强
  支持API及自定义模块、可通过python轻松扩展
  通过Plybooks来定制强大的配置、状态管理
  对云计算平台,大数据都有很好的支持
  提供一个功能强大、操作性强的Web管理界面和REST API 接口 ----AWX平台
  1、安装EPEL
  http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  安装ansible
  yum install ansible -y
  2、修改主机与组配置
  vim /etc/ansible/hosts
  

## green.example.com  
#
# blue.example.com  
192.168.190.131
  
192.168.190.132
  

  

  

  
## alpha.example.org
  
## beta.example.org
  
192.168.190.131
  
192.168.190.132
  

  测试连通性
  

# ansible 192.168.190.132 -m ping -k  
SSH password:
  
192.168.190.132 | SUCCESS => {
  "changed": false,
  "ping": "pong"
  
}
  

  3、配置linux主机ssh无密码访问
  

ssh-keygen -t rsa  #执行,有询问直接回车即可  

  完成后会在 /root/.ssh/ 下生成一对秘钥 ,id_rsa为密钥id_rsa.pub为公钥(需要下发到被控主机用户.ssh目录,同时要求重新命名成authorized_keys 文件)
  使用ssh-copy-id公钥拷贝工具同步公钥至被控主机, 命令格式:/usr/bin/ssh-copy-id [-i ]
  

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.190.132  

  完成后运行ssh root@192.168.190.132,如直接进入目标root账号,说明配置成功
  在执行就不需要密码了
  

ansible 192.168.190.* -m ping  

  4、定义主机于组
  所有定义的主机与组规则都在 /etc/ansible/hosts 文件中,webservers 和 dbservers 为组名,紧跟着的主机为它的成员
  

192.168.190.131  
192.168.190.133
  

  

  
## alpha.example.org
  
## beta.example.org
  
192.168.190.131
  
192.168.190.133
  

  

  
192.168.190.134
  
192.168.190.135
  

  5、主机可以用 域名、IP、别名进行标识
  别名定义例:
  

jpname ansible_ssh_port=22 ansible_ssh_host=192.168.190.149  

  组成员主机名称支持正则描述如:
  

  
www[
01:50].example.com  
db
-.example.com  

  jpname为定义的一个别名,更多主机变量:
  

ansible_ssh_host    #连接目录主机的地址  
ansible_ssh_port    #连接目录主机的SSH端口,默认22无需指定
  
ansible_ssh_user    #连接目录主机的默认用户
  
ansible_ssh_pass    #连接目录主机的默认用户的密码
  
ansible_connection    #目录主机连接类型,可以使local、ssh、paramiko
  
ansible_ssh_private_key_file    #连接目录主机的ssh私钥
  
ansible_ssh_host    #指定采用非Python的其他脚本语言
  

  6、定义主机变量
  主机可以指定变量,以便后面提供Playbooks配置使用,例 定义host1和host2上Apache参数MaxRequestsPerChild,目的是让两台主机根据不同机器产生有差异的httpd.conf(类似于saltstack的pillar和state)
  

  
host1 maxRequestsPerChild
=808  
host2 maxRequestsPerChild
=909  

  定义组变量(组变量的作用域是覆盖组的所有成员,通过定义一个新块,快名是:组名+:vars 组成)
  

  
host1
  
host2
  

  

  
maxRequestsPerChild
=808  

  变量的命名规则
  变量名的命名规则有字母、数字和下划线组合组成,变量必须以字母开头,不合法变量名:"12port"、"foo-port"、"foo port"、"foo.port"
  7、分离主机于组特定数据
  ansible支持将/etc/ansible/hosts 文件中的主机名于组变量剥离出来存在指定的文件夹中,采用YAML格式存放,存放位置规定:/etc/ansible/group_vars/+组名 和 /etc/ansible/host_vars/+主机名
  例如:/etc/ansible/group_vars/webservers
  定义的webservers变量格式(定义的webservers要和hosts中定义的组名字一致)(YAML格式,变量名: 变量值)
  

maxRequestsPerChild: 808  

  /etc/ansible/group_vars/all (all文件内的变量表示对所有组都生效)
页: [1]
查看完整版本: Ansible基础