自动化运维之Ansible实战(一)

本文介绍了自动化运维工具Ansible的使用,包括Ansible的特点、常用自动化运维工具对比、安装配置、主机清单管理、常见模块实战、playbook的编写与执行、以及如何使用roles进行模块化管理。Ansible无需在被控端安装客户端,通过SSH通信,提供简单而强大的配置管理和自动化操作。
摘要由CSDN通过智能技术生成

一:Ansible概述

Ansible(官方文档中文文档)是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作

ansiblle具有如下特点:

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 主从集中化管理;
  4. 配置简单、功能强大、扩展性强;
  5. 支持API及自定义模块,可通过Python轻松扩展;
  6. 通过Playbooks来定制强大的配置、状态管理
  7. 对云计算平台、大数据都有很好的支持;

ansible整体架构如下:
Ansible自动化运维
注意事项:

  1. 执行ansible的主机一般称为主控端,中控,master或堡垒机
  2. 主控端Python版本需要2.6或以上
  3. 被控端python版本小于2.4需要安装python-simplejson
  4. 被控端如开启selinux需要安装libselinux-python
  5. windows不能作为主控端

二:常用自动化运维工具

  1. Asible:python, Agentless,中小型应用环境
  2. Saltstack:python,一般需要部署agent,执行效率更高
  3. Puppet:rubby,功能强大,配置复杂,重型,适合大型环境
  4. Fabric:python,agentless
  5. Chef:rubby,国内应用很少
  6. Cfengine
  7. func

三:安装准备

3.1 环境准备

IP System Hostname Role
172.17.2.245 CentOS7.4 node245.ginvip.com master
172.17.2.246 CentOS7.4 node246.ginvip.com slaver
172.17.2.247 CentOS7.4 node247.ginvip.com slaver
172.17.2.248 CentOS7.4 node248.ginvip.com slaver

3.2 安装

Ansible仓库默认不在yum仓库中,因此我们需要使用下面的命令安装epel仓库。

# master端安装即可
yum install epel-release -y
yum install ansible -y 
ansible --version

pip方式安装:

yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-build openssl-devl
pip install --upgrade pip
pip install ansible --upgrade

配置文件:

/etc/ansible/ansible.cfg	# 主配置文件,配置ansible工作特性
/etc/ansible/hosts			# 主机清单
/etc/ansible/roles/			# 存放角色的目录

程序文件:

/usr/bin/ansible			# 主程序,临时命令执行工具
/usr/bin/ansible-doc		# 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy		# 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook	# 定制自动化任务,编排剧本工具/usr/bin/ansible-pull远程执行命令的工具
/usr/bin/ansible-vault		# 文件加密工具
/usr/bin/ansible-console	# 基于Console界面与用户交互的执行工具

3.3 Ansible配置文件

Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。

[defaults]
    # some basic default values...
    # hostfile       = /etc/ansible/hosts   	# 指定默认hosts配置的位置
    # library_path = /usr/share/my_modules/
    # remote_tmp     = $HOME/.ansible/tmp
    # pattern        = *
    # forks          = 5						# 默认并发数
    # poll_interval  = 15
    # sudo_user      = root  					# 远程sudo用户
    # ask_sudo_pass = True  					# 每次执行ansible命令是否询问ssh密码
    # ask_pass      = True  					# 每次执行ansible命令时是否询问sudo密码
    # transport      = smart
    # remote_port    = 22
    # module_lang    = C
    # gathering = implicit
    host_key_checking = False    				# 检查对应服务器的host_key,建议取消注释
    log_path    = /var/log/ansible.log 			# 需要时可以自行添加。chown -R root:root ansible.log
	# 一般只修改上面两项配置,其他的无需修改

3.4 Ansible-doc

ansible-doc:显示模块帮助

ansible-doc [options] [module...]
-a:显示所有模块的文档
-l, --list:列表可用模块
-s, --snippet:显示指定模块的playbook片段
ansible-doc ping		# 查看ping模块的使用说明
ansible-doc -s ping		# 简洁版ping模块的使用说明

3.5 Ansible命令参数

anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]

ansible详细参数:

-v,–verbose                   #  详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)
-i PATH, -inventory=PATH      #  指定 host 文件的路径,默认是在 /etc/ansible/hosts ,inventory  [ˈɪnvəntri]  库存
-f NUM,-forks=NUM             #  NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。
-m NAME,-module-name=NAME     #   指定使用的 module 名称,默认使用 command模块
-a,MODULE_ARGS                # 指定 module 模块的参数
-k,-ask-pass                  # 提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证
-sudo                         # 指定使用 sudo 获得 root 权限
-K,-ask-sudo-pass             # 提示输入 sudo 密码,与 -sudo 一起使用
-u USERNAME,-user=USERNAME    # 指定移动端的执行用户
-C,–check                    # 测试此命令执行会改变什么内容,不会真正的去执行
-b,--become                 # 代替旧版的sudo切换
ansible dbservers -m command -a 'ls -l /root' -u ubuntu -k -b -K   # 以root身份执行
ansible all --list            	# 查看inventory列表
ansible webservers --list    	# 查看某个分组下inventory

四:主机清单(inventory)

4.1 基于密码管控主机

在/etc/ansible/hosts文件中加入要管理的主机:

[root@node245 ~]# tail -1 /etc/ansible/hosts 
172.17.2.24[6:8]

使用ping模块检测远程主机是否存活:

[root@node245 ~]# ansible 172.17.2.247,172.17.2.248 -m ping -k
SSH password: 
172.17.2.248 | SUCCESS => {
   
    "changed": false, 
    "ping": "pong"
}
# ansible只会输入一次密码,即这一个密码会自动去匹配所有的主机
# -k 使用密码登录远程主机
# -m 指定使用哪个ansible模块
# 也可以将上面的IP地址换成 all 代表检测清单中的所有主机

在/etc/ansible/hosts文件中配置远程主机密码:

[root@node245 ~]# tail -3 /etc/ansible/hosts 
172.17.2.246 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=root
172.17.2.247 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=root
172.17.2.248 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=root
ansible all -m ping		# 检测清单中所有主机,因为清单文件中配置了SSH登录信息,所以这里就不再提示要输入密码

在/etc/ansible/hosts文件中配置主机分组:

[root@node245 ~]# tail -10 /etc/ansible/hosts 
[webservers]
172.17.2.246
172.17.2.247

[dbservers]
172.17.2.247
172.17.2.248

[appservers
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值