目录
自动化任务执行的意义
1.什么是自动化执行任务?
2. 自动化执行的意义
3. 自动化任务执行的应用
Ansible安装与基础
1. 什么是Ansible?
2. Ansible的特点
3. Ansible的安装
4. Ansible的配置文件
4.1 Ansible配置文件位置的设置
4.2 Ansible配置文件
4.3 Ansible主机清单配置详解
Ansible ad-hoc模式
1. 什么是ad-hoc模式?
2. ad-hoc模式使用场景
3. ad-hoc模式的命令使用
4.ad-hoc模式的常用模块
Ansible Playbook模式
1.什么是Playbook及其组成
2.Playbook的配置语法
3.playbook的第一个应用案例
假设我们要在10台Linux服务器上安装一个Nginx服务, 手动是如何操作的?
解决方案:
登录哪些服务器;执行哪些命令;自动化程序
提升运维工作效率, 减少一份工作成本
提高准确度, 手工部署易出错
Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、 fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
#通过Python安装
pip3 install ansible -i https://pypi.douban.com/simple
#安装完成后检验版本
ansible --version
需要创建的配置文件有:
mkdir /etc/ansible
cd /etc/ansible
touch ansible.cfg
touch hosts
ansible与我们其他的服务在这一点上有很大不同,Ansible的配置文件查找是从多个地方找的,顺序如下:
export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg
ansible 的配置文件为 /etc/ansible/ansible.cfg ,ansible 有许多参数,下面我们列出一些常见的参数:
[defaults]
# 资源清单inventory文件的位置
inventory = /etc/ansible/hosts
# 指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
library = /usr/share/ansible
# 设置默认执行命令的用户`
sudo_user = root
#不检测要连接的主机是否在known_hosts用户中
host_key_checking=False
# ssh连接的管理端口,默认为22端口,建议修改,更加安全
remote_port = 22
# 存储ansible日志的文件(默认不记录日志)
log_path = /var/log/ansible.log
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no
在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表。我们可以来看看他的定义方式:
# 方法一: 直接指明主机地址或主机名
ansible1.example.com
192.168.100.1
# 方法二: 定义一个主机组[组名]把地址或主机名加进去.
# 注意: 组成员可用通配符来匹配
[mysql_test]
ansible1.example.com
ansible2.example.com
192.168.100.1
192.168.100.2
在Ansible配置文件中,简单介绍了主机清单的配置,可实现对主机的分组。那么如果想要对指定主机 实现远程ssh连接并批量执行命令,该如何操作呢? 想要远程ssh连接,有三种方式:
方法1:密码实现远程ssh连接
vim /etc/ansible/hosts 写入下面内容
[test] ansible要操作的对象
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_pass='123' 指定IP地址 用户 用户密码
172.25.254.20:22 ansible_ssh_user=root ansible_ssh_pass='123'
注意上述的内容可以根据自己的需求来写。
方法2:密钥实现远程ssh连接
1) 生成并配置ssh公钥和私钥, 如何免密登录, 快速操作如下:
# 生成公钥和私钥, 存储位置~/.ssh/目录下
$ ssh-keygen
# 将生成的公钥拷贝到需要远程登录的服务器上
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@需要登录的远程主机
# 测试能否远程无密码登录
ssh root@需要登录的远程主机
2) 编辑Ansible的配置文件
# vim /etc/ansible/hosts
# ssh用户名+ssh密钥
[test]
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_private_key_file=密钥文件的路径
3) 执行测试
ansible all -a 'date'
Ansible提供两种完成任务方式:
Ad-Hoc命令集由/usr/bin/ansible实现,其命令用法如下:
ansible [options]
ansible 192.168.1.* -a 'hostname'
ansible group1 -a 'hostname'
ansible test1 -a 'hostname'
Ad-Hoc命令集支持的模块有很多, 其中ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:
ansible-doc -l #获取全部模块的信息
ansible-doc -s MOD_NAME #获取指定模块的使用帮助
实例演示:
ansible test -m ping
这个模块可以直接在远程主机上执行命令,并将结果返回本主机。命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。注意,该命令不支持| 管道命令
。
ansible test -m command -a 'df -h'
shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
ansible test -m shell -a 'cat /etc/passwd | grep "^root"'
此模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等
#复制文件
ansible test -m copy -a 'src=/etc/passwd dest=/mnt'
#给定内容生成文件,并设定权限
ansible test -m copy -a "content='hello ansible' dest='/mnt/ansible' mode ='666'"
顾名思义,该模块主要用于软件的安装,可批量在多台主机上安装。
ansible test -m yum -a 'name=nginx state=present'
该模块用于服务程序的管理
#开启服务并设置自启动
absible test -m service -a 'name=niginx state=started enabled=true'
#关闭服务
ansible test -m service -a 'name=nginx state=stopped'
playbook基本使用
ansible-playbook playbook.yml [options]
常用选项总结:
yaml语法要点:
ansible的主配置文件设定:
[defaults]
# 资源清单inventory文件的位置
inventory = /etc/ansible/hosts
# 指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
library = /usr/share/ansible
# 设置默认执行命令的用户`
sudo_user = root
#不检测要连接的主机是否在known_hosts用户中
host_key_checking=False
# ssh连接的管理端口,默认为22端口,建议修改,更加安全
remote_port = 22
# 存储ansible日志的文件(默认不记录日志)
log_path = /var/log/ansible.log
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no
ansible的主机清单管理:
[test]
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_pass='123'
172.25.254.20:22 ansible_ssh_user=root ansible_ssh_pass='123'
创建yaml文件并编辑:
---
- hosts: test
remote_user: root
vars:
filename: "westos.c"
http_port: 8080
tasks:
#任务1:在指定位置创建文件
- name: test
file: name=/mnt/{
{filename}} state='touch'
#任务2:创建新用户
- name: create new user
user: name=winter uid=1009 system=yes shell=/bin/bash
#任务3:安装httpd
- name: install http package
yum: name=httpd state='present'
#任务4:改写httpd配置文件中的端口为8080
#此步骤前需在当前目录下 mkdir template -> cp /etc/httpd/conf/httpd.conf template/
#然后将template/httpd.conf文件中的第45行修改为Listen {
{http_port}}
- name: config http
template: src=./template/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart apache
#任务5:复制index文件
#执行此步骤前,需在template/目录下创建index.html
- name: copy index.html
copy: src=./template/index.html dest=/var/www/html/index.html backup=yes mode=666
handlers:
- name: restart apache
service: name=httpd state=restarted enabled=true
~
测试 在安装有ansible的服务器做测试
ansible-playbook westos.yml