01-ansible安装与架构配置说明
ansible安装
- 参考资料:
ansible 的特点
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
ansible安装方式
- Ansible中文权威指南官网:http://www.ansible.com.cn
- centos/redhat系统
yum -y install epel-release yum list all *ansible* yum info ansible yum -y install ansible ansible --version
- apt(ubuntu)系统
sudo apt-get install software-properties-common sudo apt-add-repository ppa:ansible/ansible sudo apt-get update sudo apt-get install ansible
- 编译安装
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto wget -c https://releases.ansible.com/ansible/ansible-1.5.4.tar.gz tar xf ansible-1.5.4.tar.gz cd ansible-1.5.4 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible
- git方式
git clone git://github.com/ansible/ansible.git --recursive cd ./ansible source ./hacking/env-setup
- 通过pip安装
yum install -y python-pip
pip install --upgrade pip
easy_install pip pip install ansible --upgrade
ansible --version
ansible架构
- Ansible:Ansible核心程序。
- Host Inventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
- Playbooks:“剧本”,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
- CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
- CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
- ConnectionPlugins:连接插件,Ansible和Host通信使用
-
API:供第三方程序调用的应用程序编程接口
Ansible任务执行流程
Ansible系统由控制主机对被管节点的操作方式可分为两类(ad-hoc)和(playbook)
- ad-hoc支持单个模块,支持批量执行单条命令;
- playbook通过多个task集合完成一类功能,可以理解为通过组合多条ad-hoc操作的配置文件;

公钥认证
- Ansible1.2.1及其之后的版本都会默认启用公钥认证,编辑/etc/ansible/ansible.cfg 或~/.ansible.cfg
[defaults] host_key_checking = False
#也可以通过设置环境变量来实现 export ANSIBLE_HOST_KEY_CHECKING=False
- ssh免密登录
ansible all -m authorized_key -a "user=nameke state=present key=\"{{ lookup('file','~/.ssh/id_rsa.pub') }} \"" -k
Ansible 相关文件
- /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
- /etc/ansible/hosts 主机清单
- /etc/ansible/roles/ 存放角色的目录
- Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
[defaults] #inventory = /etc/ansible/hosts #主机列表配置文件 #library = /usr/share/my_modules/ #库文件存放目录 #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录 #local_tmp = $HOME/.ansible/tmp #本机的临时命令执行目录 #forks = 5 #默认并发数 #sudo_user = root #默认sudo 用户 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码 #ask_pass = True #remote_port = 22 #host_key_checking = False #检查对应服务器的host_key,建议取消此行注释,实现第一次连 接自动信任目标主机 #log_path=/var/log/ansible.log #日志文件,建议启用 #module_name = command #默认模块,可以修改为shell模块 [privilege_escalation] #普通用户提权配置 #become=True #become_method=sudo #become_user=root #become_ask_pass=False
inventory文件
- Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts
主机与组
- /etc/ansible/hosts 文件的格式与windows的ini配置文件类似:
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
- 端口号不是默认设置时,可明确的表示为:
badwolf.example.com:5309
- 设置一些别名,但不是在系统的 host 文件中设置,又或者你是通过隧道在连接
jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50
- 一组相似的 hostname , 可简写如下:
[webservers] www[01:50].example.com #数字的简写模式中,01:50 也可写为 1:50,意义相同.你还可以定义字母范围的简写模式: [databases] db-[a:f].example.com
- 常用配置
[targets] localhost ansible_connection=local other1.example.com ansible_connection=ssh ansible_ssh_user=mpdehaan other2.example.com ansible_connection=ssh ansible_ssh_user=mdehaan
主机变量
#配变量给主机,变量定义后可在 playbooks 中使用 [atlanta] host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909
组的变量
[atlanta] host1 host2 [atlanta:vars] ntp_server=ntp.atlanta.example.com proxy=proxy.atlanta.example.com
把一个组作为另一个组的子成员
- 可以把一个组作为另一个组的子成员,以及分配变量给整个组使用. 这些变量可以给 /usr/bin/ansible-playbook 使用,但不能给 /usr/bin/ansible 使用
[atlanta] host1 host2 [raleigh] host2 host3 [southeast:children] atlanta raleigh [southeast:vars] some_server=foo.southeast.example.com halon_system_timeout=30 self_destruct_countdown=60 escape_pods=2 [usa:children] southeast northeast southwest northwest
inventory 参数说明
ansible_ssh_host #将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置. ansible_ssh_port #ssh端口号.如果不是默认的端口号,通过此变量设置. ansible_ssh_user #默认的 ssh 用户名 ansible_ssh_pass #ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥) ansible_sudo_pass #sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass) ansible_sudo_exe #sudo 命令路径(适用于1.8及以上版本) ansible_connection #与主机的连接类型.比如:local,ssh 或paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行. ansible_ssh_private_key_file #ssh使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况. ansible_shell_type #目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'. ansible_python_interpreter #目标主机的python路径.适用于的情况:系统中有多个Python,或者命令路径不是"/usr/bin/python",比如\*BSD,
或者/usr/bin/python不是2.X 版本的Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python"可执行程序名不可为python以外的名字
(实际有可能名为python26).与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
Ansible相关工具
/usr/bin/ansible 主程序,临时命令执行工具 /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本 /usr/bin/ansible-pull 远程执行命令的工具 /usr/bin/ansible-vault 文件加密工具 /usr/bin/ansible-console 基于Console界面与用户交互的执行工具 /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
- 实现基于key验证的脚本1
[root@centos8 ~]#vim /etc/ssh/ssh_config #修改下面一行 StrictHostKeyChecking no [root@centos8 ~]#cat hosts.list 192.168.56.14 192.168.56.15 [root@centos8 ~]#vim push_ssh_key.sh #!/bin/bash rpm -q sshpass &> /dev/null || yum -y install sshpass [ -f /root/.ssh/id_rsa ] || ssh-keygen -f /root/.ssh/id_rsa -P '' export SSHPASS=magedu while read IP;do sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $IP done < hosts.list
- 实现基于key验证的脚本2
[root@centos8 ~]#cat ssh_key.sh #!/bin/bash #Author:chenwei #Time:2020-01-11 00:43:56 #Name:file.sh #Version:V1.0 #Description:This script is used for . /home/nameke/scripts/functions IPLIST=" 192.168.56.11 192.168.56.13 192.168.56.14 192.168.56.15 192.168.56.16" rpm -q sshpass &> /dev/null || yum -y install sshpass [ -f /root/.ssh/id_rsa ] || ssh-keygen -f /root/.ssh/id_rsa -P '' export SSHPASS=zhongguo for IP in $IPLIST;do { sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $IP; } & done wait

浙公网安备 33010602011771号