侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 64 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Ansible入门

zyixin
2022-04-01 / 0 评论 / 0 点赞 / 1,910 阅读 / 5,884 字
温馨提示:
本文最后更新于 2022-04-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 Ansible

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

1.1 Ansible安装

ansible的安装方法有多种

1.1.1 EPEL源的rpm包安装

yum install ansible

1.1.2 编译安装

yum -y install python-jinja2 PyYAML pyramiko python-babel python-crypto
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

1.1.3 GIT方式

git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible

1.1.4 pip安装

pip是安装Python包的管理器,类似yum

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

1.1.5 确认安装及查看版本号

[root@ansible-server yum.repos.d]# ansible --version
ansible 2.9.10
  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, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

1.2 Ansible相关文件

1.2.1 配置文件

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

1.2.2 ansible主配置文件

Ansible的配置文件/etc/ansible/ansible.cfg其中大部分的配置内容无需进行修改

[defaults]
#inventory      = /etc/ansible/hosts			#主机列表配置文件
#library        = /usr/share/my_modules/		#库文件存放目录
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp				#临时py命令文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp				#本机的临时命令执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks          = 5							 #默认并发数
#poll_interval  = 15
#sudo_user      = root						  #默认sudo用户
#ask_sudo_pass = True						   #每次执行ansible命令是否询问ssh密码
#ask_pass      = True
#transport      = smart
#remote_port    = 22
#module_lang    = C
#module_set_locale = False
#host_key_checking = false					  #检查对应服务器的host_key,建议取消目录
#log_path=/var/log/ansible.log				  #日志文件,建议启动
#module_name = command						  #默认模块,可以修改为shell模块

1.2.3 inventory 主机清单

ansible的主要功用于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名默认的inventory file为/etc/ansible/hosts

主机清单文件格式
inventory文件遵循INI文件风格,中括号中的字符为组名,可以将同一个主机同时归并到多个不同的组中
此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明
如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
范例:

www.zyixinn.com
[webservers]
www.ceshi1.com:2222
www.ceshi2.com

[dbservers]
db1.ceshi.com
db2.ceshi.com
db3.ceshi.com

[websrvs]
www[1:100].example.com

[dbsrvs]
db-[a:f].example.com

[appsrvs]
10.0.0.[1:100]

1.3 Ansible相关工具

· /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界面与用户交互的执行工具

利用ansible实现管理的主要方式:
· Ad-Hoc 既利用ansible命令,主要用于临时命令使用场景
· Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

1.3.1 ansible-doc

此工具用来显示模块帮助
格式:

ansible -doc [options] [module...]
-l,--list			#列出可用模块
-s,--snippet		#显示指定模块的playbook片段

范例

#列出所有模块
ansible-doc -l
#查看指定模块帮助用法
ansible-doc ping
#查看指定模块帮助简洁用法
ansible-doc -s ping

1.3.2 ansible

此工具通过ssh协议,实现对远程主机的配置管理,应用部署,任务执行等功能
建议:使用次工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点
范例:利用sshpass批量实现基于key验证

ssh-keygen -f /root/.ssh/id-rsa -P ''
NET=192.168.139
export SSHPASS=root@123
for IP in {1..200};do
	sshpass -e ssh-copy-id $NET.$IP
done

格式:

ansible <host-pattern> [-m module_name] [-a args]
命令		分组			模块			参数

选项说明:

--version				#显示版本
-m module				#指定模块,默认为command
-v						#详细过程 -vv -vvv更详细
--list-hosts			#显示主机列表,可简写 --list
-k, --ask-pass			#提示输入ssh连接密码,默认key验证
-C,--check				#检查,并不执行
-T, --timeout=TIMEOUT	#执行命令的超时时间,默认10s
-u, --user=REMOTE_USER	#执行远程执行的用户
-b, --become			#代替旧版的sudo 切换
--become-user=USERNAME	#指定sudo的runas用户,默认为root
-k, --ask-become-pass	#提示输入sudo的口令

ansible的Host-pattern
用于匹配被控制的主机的列表
All:表示所有Inventory的所有主机
范例:

ansible all -m ping

*:通配符

ansible "*" -m ping
ansible 192.168.139.* -m ping
ansible "srvs" -m ping

或关系

ansible "websrvs:appsrvs" -m ping
ansible "192.168.139.100:192.168.139.200" -m ping

逻辑与

#在websrvs组并且在dbsrvs组的主机
ansible "websrvs:&dbsrvs" -m ping

逻辑非

#在websrvs组,但不在dbsrvs组中的主机
#注意:此处为单引号
ansible 'websrvs:!dbsrvs' -m ping

综合逻辑

ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' -m ping

正则表达式

ansible "websrvs:&dbsrvs" -m ping
ansible "~(web|db).*\.zyixin\.com" -m ping

ansible命令执行过程
1.加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如:command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/ansible.tmp-数字/xxx.py文件
4.给文件+x执行权限
5.执行并返回结果
6.删除临时py文件,退出

ansible的执行状态

[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan

· 绿色:执行成功并且不需要做改变的操作
· 黄色:执行成功并且对目标主机做变更
· 红色:执行失败

ansible使用范例

#以zyixin用户执行ping存活检测
ansible all -m ping -u zyixin -k
#以zyixin sudo至root执行ping存活检测
ansible all -m ping -u zyixin -k -b
#以zyixin sudo至test用户执行ping存活检测
ansible all -m ping -u zyixin -k -b --become-user=test
#以zyxin sudo至root用户执行ls
ansible all -m command -u zyixin -a 'ls /root' -b --become-user=root -k -k

1.3.3 ansible-galaxy

此工具会连接 https://galaxy.ansible.com 下载相应的roles
范例:

#列出所有已安装的galaxy
ansible-galaxy list
#安装galaxy
ansible-galaxy install geerlingguy.redis
#删除galaxy
ansible-galaxy remove geerlingguy.redis

1.3.4 ansible-pull

此工具会推送ansible的命令至远程,效果无限提升,对运维要求较高

1.3.5 ansible-playbook

此工具用于执行编写好的playbook任务
范例:

ansible-playbook hello.yml
cat hello.yml
---
#hello world yml file
- hosts: cat websrvs
  remote_user: root
  tasks:
    - name: hello world
	  command: /usr/bin/wall hello world

1.3.6 ansible-valut

此工具可以用于加密解密yml文件
格式:

ansible-vault [create|decrypt|edit|encrypt|rekey|view]

范例:

ansible-vault encrypt hello.yml			#加密
ansible-vault decrypt hello.yml			#解密
ansible-vault view hello.yml			#查看
ansible-vault edit hello.yml			#编辑加密文件
ansible-vault rekey hello.yml			#修改口令
ansible-vault create new.yml			#创建新文件

1.3.7 ansible-console

此工具可交互执行命令,支持tab,ansible 2.0+新增
提示符格式:

执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$

常用子命令
· 设置并发数:forks n 例如:forks 10
· 切换组:cd 主机组 例如:cd web
· 列出当前组主机列表:list
· 列出所有的内置命令:7或help

范例:

[root@ansible-server ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (2)[f:5] list
192.168.139.200
192.168.139.100
root@all (2)[f:5] cd appsrvs
root@appsrvs (2)[f:5] list
192.168.139.200
root@appsrvs (2)[f:5] yum name=httpd state=present
root@appsrvs (2)[f:5] service name=httpd state=started
0

评论区