[toc]
Ansible基础概念 什么是Ansible? Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命 令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
同类软件对比
ansible:学习难,安装ruby环境难,没有远程执行功能
puppet:轻量级,大规模环境下只通过ssh会很慢,串行的
saltstack:一般选择salt会使用C/S结构的模式,salt-master和salt-minion,并行的,大规模批量操作的情况下,会比Ansible速度快一些,底层使用的是zero-MQ消协队列
对比
puppet
ansible
saltstack
开发语言
ruby
python
python
远程执行功能
没有
有,串行执行
有,并行执行
客户端
没有
没有
有
架构
没有
SSH
C/S 也支持SSH
ansible的功能及优点
远程执行
配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
事件驱动
通过Ansible的模块,对服务进行不同的事件驱动 #例:file copy script shell common
比如:
修改配置后重启
只修改配置文件,不重启
修改配置文件后,重新加载
远程启停服务管理
管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台。
二次开发
因为语法是Python,所以便于运维进行二次开发。
任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务 yum appget yum
在Ubuntu上安装apache服务名字叫apache2
在CentOS上安装apache服务名字叫httpd
在CentOS6上启动服务器使用命令:/etc/init.d/nginx start
在CentOS7上启动服务器使用命令:systemctl start nginx
ansible架构
连接插件connection plugins用于连接主机 用来连接被管理端
核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
自定义模块custom modules根据自己的需求编写具体的模块
插件plugins完成模块功能的补充
剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
安装ansible架构 环境准备
主机名
WanIP
LanIP
角色
m01
10.0.0.61
172.16.1.61
ansible控制端
web01
10.0.0.7
172.16.1.7
被控端
web02
10.0.0.8
172.16.1.8
被控端
安装ansible 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 yum install -y ansible --version -v -i -m -a -k -C -T ansible --version ansible 2.9.27 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules' ,u'/usr/share/ansible/plugins/modules' ] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
ansible配置文件读取顺序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 rpm -ql ansible zcat /usr/share/man/man1/ansible-config.1.gz For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command . /etc/ansible/ansible.cfg \-\- Config file, used if present ~/.ansible.cfg \-\- User config file, overrides the default config if present \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. $ANSIBLE_CONFIG ./ansible.cfg ~/.ansible.cfg /etc/ansible.cfg
absible配置文件详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cat /etc/ansible/ansible.cfghost_key_checking = False log_path = /var/log/ansible.log 71 host_key_checking = False 111 log_path = /var/log/ansible.log
Ansible Inventory(主机清单) ansible主机清单 /etc/ansible/hosts是ansible默认主机资产清单文件,用于定义被管理主机的认证信息,例如ssh登录用户名、密码以及key相关信息。
Inventory文件中填写需要被管理的主机与主机组信息。
还可以自定义Inventory主机清单的位置,使用”-i”指定文件位置即可。
使用IP+端口+用户+密码 1 2 3 4 5 6 7 8 vim /etc/ansible/hosts [web_group] 10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1' 10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1' ansible web_group -m ping
使用主机名+密码 1 2 3 4 5 6 7 8 9 10 11 12 vim /etc/ansible/hosts [web_group] web0[1:2] ansbibe_ssh_pass='1' vim /etc/hosts 10.0.0.7 web01 10.0.0.8 web02 ansible web_group -m ping
使用秘钥连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7 ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.8 vim /etc/ansible/hosts [web_group] 10.0.0.7:22 10.0.0.8 ansible web_group -m ping
企业使用规范 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7 vim /etc/hosts 10.0.0.7 web01 10.0.0.8 web02 vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 web02 ansible_ssh_host=10.0.0.8
配置主机标签组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 web02 ansible_ssh_host=10.0.0.8 [lb_group] lb01 ansible_ssh_host=10.0.0.5 [lnmp:children] web_group lb_group mysql_group ansible all -m ping ansible web01 -m ping ansible 10.0.0.7 -m ping