自动化运维Ansible实践(一)

第 1 章 Ansible概述

1.1 IT自动化的好处
1.1.1 团队影响
? 节省时间,提高工作效率
? 消除重复任务
? 更少的错误风险
? 改善协作和工作满意度
1.1.2 企业影响
? 克服复杂性
? 更多创新资源
? 加强问责制和合规性
1.2 Ansible是什么
Ansible是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言,可以完美地描述IT应用程序基础结构。
1.3 Ansible架构

2. 第 2 章 Ansible安装与配置

2.1 Ansible使用要求
2.1.1 服务端要求
? Python2.6/2.7/3.x
? RedHat,Debian,CentOS,OS X等。不支持Windows
2.1.2 被管理端要求
? OpenSSH
? Python2.6/2.7/3.x
2.2 安装Ansible
? yum install ansible (推荐)
? pip install ansible
? https://releases.ansible.com/ansible or https://github.com/ansible/ansible.git
2.3 配置文件
vim /etc/ansible/ansible.cfg --------ansible的主配置文件
[defaults]

inventory = /etc/ansible/hosts

forks = 5

become = root

remote_port = 22

host_key_checking = False

timeout = 10

log_path = /var/log/ansible.log

private_key_file = /root/.ssh/id_rsa
2.4 Inventory(主机清单)
未分组的主机
green.example.com
blue.example.com
192.168.100.1
192.168.100.10

属于webservers组的主机集合
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
www[001:006].example.com

示例3:属于dbservers组主机集合
[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57
db-[99:101]-node.example.com

主机和主机组变量:

[webservers]
192.168.1.10 ansible_ssh_user=root ansible_ssh_pass=‘123456’ http_port=80
192.168.1.11 ansible_ssh_user=root ansible_ssh_pass=‘123456’ http_port=80

[webservers:vars]
http_port=8080
server_name=www.ctnrs.com

组变量分解到单个文件:
cat /etc/ansible/group_vars/webservers.yml

http_port: 8080
server_name: www.ctnrs.com

3. 第 3 章 ad-hoc命令

3.1 命令行工具常用选项,可以使用ansible --help查看帮助
格式:ansible <host-pattern> [ options ]

选项:
-a MODULE_ARGS, --args=MODULE_ARGS 模块参数
-C, --check 运行检查,不执行任何操作
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 设置附加变量 key=value
-f FORKS, --forks=FORKS 指定并行进程数量,默认5
-i INVENTORY, --inventory=INVENTORY 指定主机清单文件路径
--list-hosts 输出匹配的主机列表,不执行任何操作
-m MODULE_NAME, --module-name=MODULE_NAME 执行的模块名,默认command
--syntax-check 语法检查playbook文件,不执行任何操作
-t TREE, --tree=TREE 将日志输出到此目录
-v, --verbose 详细信息,-vvv更多, -vvvv debug
--version 查看程序版本

连接选项:控制谁连接主机和如何连接
-k, --ask-pass 请求连接密码
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE 私钥文件
-u REMOTE_USER, --user=REMOTE_USER 连接用户,默认None
-T TIMEOUT, --timeout=TIMEOUT 覆盖连接超时时间,默认10秒

提权选项:控制在目标主机以什么用户身份运行
-b, --become 以另一个用户身份操作
--become-method=BECOME_METHOD 提权方法,默认sudo
--become-user=BECOME_USER 提权后的用户身份,默认root
-K, --ask-become-pass 提权密码
sudo操作实例
ansible webservers -a "ls /root" -u tuwei -k --become -K
需要输入两次密码,一次是连接远程主机,一次是sudo提权
没有配置root用户,连接远程主机普通用户
[[email protected] ansible]# ansible webservers -a "pwd" -u tuwei -k
SSH password:
192.168.132.14 | SUCCESS | rc=0 >>
/home/tuwei

192.168.132.16 | SUCCESS | rc=0 >>
/home/tuwei

3.2 SSH密码认证
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_pass=’123456’
192.168.1.11:22 ansible_ssh_user=root ansible_ssh_pass=’123456’
3.3 SSH秘钥对认证
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_key=/root/.ssh/id_rsa
192.168.1.11:22 ansible_ssh_user=root
配置了密码或者秘钥认证后,在使用ansible执行命令时无需交互。
主机清单已经配置
例如:[[email protected] ~]# ansible webservers -a "df -h"
192.168.132.14 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.5G 41G 11% /
tmpfs 383M 0 383M 0% /dev/shm
/dev/sda1 194M 29M 155M 16% /boot

192.168.132.16 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 5.6G 12G 34% /
tmpfs 284M 0 284M 0% /dev/shm
/dev/sda1 190M 82M 99M 46% /boot

4. 第 4 章 Ansible常用模块

ansible帮助说明可以参考网站https://docs.ansible.com/
4.1 执行shell命令(command和shell)
默认为command,可以省略。但如果命令中有特殊字符,如<> |等,则需要使用shell模块,该模块可以执行所有shell命令
[[email protected] ~]# ansible webservers -m shell -a "netstat -tnlp|grep httpd"
192.168.132.14 | SUCCESS | rc=0 >>
tcp 0 0 :::80 :::* LISTEN 1384/httpd

192.168.132.16 | SUCCESS | rc=0 >>
tcp 0 0 :::80 :::* LISTEN 1974/httpd

4.2 ping模块
用来测试主机是否是通的,不涉及参数。
[[email protected] ~]# ansible webservers -m ping
192.168.132.16 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.132.14 | SUCCESS => {
"changed": false,
"ping": "pong"
}

4.3 script模块
在目标主机上执行管理端的shell脚本。
ansible 192.168.132.16 -m script -a ‘/root/test.sh‘

4.4 文件传输(copy和file)
4.4.1 copy模块主要是用来复制文件到远程目标主机。
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代”src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,
则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。
如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
ansible webservers -m copy -a "src=/tools/nagios-3.5.1.tar.gz dest=/tmp"
[[email protected] tools]# ansible webservers -a "ls /tmp"
192.168.132.16 | SUCCESS | rc=0 >>
VMwareDnD
VMwareTools-10.1.15-6627299.tar.gz
cafenv-appconfig
ansibleztwPs
nagios-3.5.1.tar.gz
test.sh
vmware-root
vmware-tools-distrib

192.168.132.14 | SUCCESS | rc=0 >>
ansible_VohgWG
cmdserver.sock
nagios-3.5.1.tar.gz
test.sh

4.4.2 file模块主要用于远程主机上的文件操作,包括以下选项:
force:需要在两种情况下强制创建软链接

1.源文件不存在但之后会建立的情况下

2.目标软连接已经存在,需要取消之前的软链接,然后创建新的软连接,有两个选项:yes|no

group:定义文件/目标的属组

mode:定义文件/目录的权限

owenr:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

state:directory:如果文件不存在,创建目录

file:即使文件不存在,也不会被创建

link:创建软连接

hard:创建硬链接

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

absent:删除目录、文件或者取消链接文件
实例:
创建目录
ansible webservers -m file -a "path=/tmp/abc123 state=directory"
创建文件
ansible webservers -m file -a "path=/tmp/abc123 state=touch"

4.5 cron模块
cron模块,用来管理计划任务, 包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:用来指定一个计划任务文件,也就是将计划任务写到远程主机上/etc/cron.d目录下,
创建一个文件对应的计划任务。 day:日(1-31,<em>,</em>/2,……)
hour:小时(0-23,<em>,</em>/2,……) minute:分钟(0-59,<em>,</em>/2,……)
month:月(1-12,<em>,</em>/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:定义定时任务的描述信息
special_time: 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),
weekly(每周),daily(每天),hourly(每小时)
state:确认该任务计划是创建还是删除,有两个值可选,分别是present和absent,present表示创建定时任务,
absent表示删除定时任务,默认为present。
user:以哪个用户的身份执行job指定的任务。

使用示例:
ansible 192.168.132.14 -m cron -a ‘name="job for reboot" special_time=reboot job="/data/bootservice.sh"‘
ansible 192.168.132.14 -m cron -a ‘name="test" weekday="1" minute=40 hour=19 user="root" job="sh /server/scripts/test.sh"‘
查看[[email protected] scripts]# crontab -l
#Ansible: test
40 19 1 sh /server/scripts/test.sh
ansible 192.168.132.14 -m cron -a ‘backup="True" name="autobackup" weekday="6" minute=30 hour=1 user="root" job="/home/ixdba/backup.sh"‘
ansible 192.168.132.14 -m cron -a ‘name="checkhttp" minute=30 hour=12 user="root" job="/home/ixdba/check_http.sh" cron_file="check_http_for_ansible" ‘
ansible 192.168.132.14 -m cron -a ‘name="yum autoupdate" state=absent‘

4.6 service模块
用于管理远程主机上的服务,该模块包含如下选项:
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,
就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
sleep:如果执行了restarted,则在stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
实例:
ansible 192.168.132.14 -m service -a "name=httpd state=stopped"
关闭httpd服务
ansible 192.168.132.14 -m service -a "name=httpd enabled=yes"

4.7 yum模块
进行软件包安装。
实例:state可以是present,表示指定安装,或者是latest即安装最新版
absent表示卸载
ansible 192.168.132.14 -m yum -a "name=lrzsz state=latest"

4.8 user模块
创建用户相关
ansible 192.168.132.14 -m user -a "name=test password=123456"新建用户
ansible 192.168.132.14 -m user -a "name=test password=123456 shell=/sbin/nologin" 创建用户,不让登陆

ansible 192.168.132.14 -m user -a "name=test state=absent" 删除用户

4.9 git模块
从源代码管理系统部署,要使用git,需要目标主机已安装git
ansible 192.168.132.14 -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible"

4.10 setup模块
ansible 192.168.132.14 -m setup 输出系统信息,在写playbook时用到
ansible 192.168.132.14 -m setup -a "filter=ansible_nodename" 利用filter进行输出信息过滤。

原文地址:https://blog.51cto.com/tuwei/2388215

时间: 2025-01-15 18:10:00

自动化运维Ansible实践(一)的相关文章

自动化运维Ansible实践(二)

上篇提到了ansible基本安装.配置及命令行使用,这篇分享下ansible的高级用法即playbook,在生产环境如果需要完成负责任务,如大批量服务安装配置等,可以采用playbook方式来完成,高效且易于维护. 第 1 章 Playbook基本使用 使用Playbook的好处特点? 易读的编排语言? 适合配置管理和应用部署? 非常适合部署复杂的工作先来认识一下Playbook自动部署Nginx main.yml hosts: webserversvars:hello: Ansible tas

Linux下的自动化运维ansible工具

什么是自动化运维     随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务, 面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷.安 全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等).从初期的 几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术.业务.管理等方面的要求,那么标 准化.自动化.架构优化.过程优化等降低IT服务成本的因素越来越被人们所重视.其中,自动化最开始作

自动化运维Ansible之Playbook剧本(持续更新)

附上前两篇关于Ansible的博客地址,以供查阅,欢迎学习交流!自动化运维之Ansible概述及Ansible部署Ansible命令应用之常用模块 Playbook简介 playbook是ansible用于配置,部署,和管理被控节点的剧本. 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成. 也可以这么理解,playbook 字面意思,即剧本,现实中

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

关于自动化运维的实践×××

谈起自动化运维,现在已经成为运维工作最热门的词语,关于运维自动化本人早在2012年就已经接触了BMC的ITSM系统,将ITIL运维管理体系和自动化运维工具的有效的结合大幅度的提高了运维工作效率.下图为HP提的统一运维自动化理念和运维手册,从目前企业基础架构层来看,运维人员无关乎关心的如下几个方面的自动化. 要了解运维自动化在企业当中应用场景和是否真正能够解决运维团队工作的问题.那我们则需要站到企业运维人员的角度去考虑问题.那么我首先要知道一个企业或者运维团队在规划运维的时候所需要考虑的问题及面临

3.2 企业自动化运维ansible

ansible的Host-pattern ansible的Host-pattern 匹配主机的列表All :表示所有Inventory中的所有主机 ansible all –m ping:通配符 ansible "" -m ping 这个"*"号相当于all全部主机 ansible 192.168.1.* -m ping ansible "*srvs" -m ping 或关系 ansible "websrvs:appsrvs"

自动化运维-Ansible (第二部)

Ansible 命令应用基础 之前的一篇文章讲到了Ansible 的安装和作用,有兴趣的可以看看Ansible 介绍与安装.学习 ansible 就是重新学习一次命令和语法. Ansible 可以使用命令行进行自动化管理,基本语法如下: ansible <host-patterm> [-m module_name] [-a args] <host-patterm>:对哪些主机生效 [-m module_name]:要使用的模块 [-a args] :模块特有参数 Ansible 的

自动化运维Ansible之安装部署

目录 1.SSH分发 2.安装Ansible 3.Ansible清单管理 1.SSH分发 ansible自动化部署条件 1.建议基于ssh密钥方式建立远程连接 2.基于ssh口令方式建立远程连接(不建议) 在部署之前需要保证管理主机和受控主机能够基于ssh密钥的方式进行远程连接 管理主机生成SSH密钥(私钥和公钥),分发公钥到每台受控主机: 1.安装sshpass [[email protected] ~]# yum install sshpass -y 2.生成密钥 // 直接生成密钥 [[e

自动化运维 ansible

1.   如何添加机器 2.ansible   命令格式 3. 执行  ping  的流程 4.  ansible   命令详解 5.   什么事Inventory 7.....Inverntory