ansible自动化运维的使用总结
注:本文章会不断持续更新,请大家留意。
目录
4、编写ceshiyml文件使用playbook模块对被控节点进行管理
一、ansible概述
1、ansible简介
1、Ansible 是一款类 Unix 系统开发的、集成的IT 系统的配置管理、应用部署、执行特定任务的自由开源的配置和自动化工具。它采用Python语言写成,和运维自动化工具 saltstack 和 Puppet类似。
2、Ansible基于python paramiko开发,分布式,无需客户端,轻量级,配置语法使用YMAL和jinja2模块语言,拥有更强的远程命令执行操作。
3、官方网站:https://www.ansible.com/
2、ansible特点
(1)部署简单易操作,只需要在主控端部署ansible环境即可,被控端无需做任何操作。
(2)默认使用 SSH 协议对机器进行管理也可以使用密钥对机器进行管理并且采用主从集中化管理。
(3)配置简单、功能强大、扩展性强,支持 API 及自定义模块,可通过 Python 轻松扩展。
(4)通过 Playbooks 来定制强大的配置、状态管理,对于计算平台、大数据都有很好的支持。
3、ansible的工作原理以及架构
原理:ansible在管理节点将ansible模块通过SSH协议推送到目标主机上(被管理节点上)的 下,然后再执行,执行完成后自动删除。可以通过SVN等来管理编排以及自定义模块。
由ansible架构图可知道ansible有5个部分组成:
(1)ansible:ansible的核心。
(2)Core Modules:里面包括了ansible自带的核心模块以及自定义模块。
(3)Plugins:插件,用于完成模块功能的补充。包括连接插件,邮件插件等等。
(4)Playbooks:剧本,定义了ansible多任务配置文件。由ansible自动执行。
(5)Inventory:定义了ansible管理主机的清单。
补充:工作流程-----用户使用 ansible 先去主机清单(host inventory)里读个组或者全部。如果没有剧本(playbook)就指定使用的模块,例如ping模块。调用conne ction去ssh连接,去ping主机。如果有剧本直接执行剧本
二、ansible操作
1、ansible的安装及简单配置
(1)Ansible仓库默认不在yum仓库中,因此我们需要使用下面的命令启用epel仓库
[root@localhost ~]# yum install epel-release -y //启用epel
(2)或者直接wget下载阿里云镜像站里的epel仓库(如公司的请下载公司的yum仓库,这里就不过多介绍了)
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
补充:阿里云镜像站网站https://developer.aliyun.com/mirror/
(3)yum安装ansible
[root@localhost ~]# yum install -y ansible //安装ansible
补充:如需指定版本
[root@localhost ~]# yum install -y ansible-2.9.16-1.el7 //指定安装ansible版本
2、ansible的使用基本语法
anisble命令语法
ansible [
-
i 主机文件] [
-
f 批次] [组名] [
-
m 模块名称] [
-
a 模块的参数]
使用命令行
ansible
-
i 跟上指定的主机清单 机器列表组名
-
u 跟上你的服务器用户名
-
k
-
K
-
m 跟上要使用的模块
-
a 跟上要执行的参数
使用playbook
ansible
-
palybook
-
i 跟上指定的主机清单 机器列表名称 跟上要执行的palybook
参数
3、ansible的基本配置
#使用用户名和密码对主机进行操作
(1)编辑/etc/ansible/hosts 更改主机清单保存退出
[root@localhost ~]# vim /etc/ansible/hosts
[ceshi] //主机列表名称为ceshi
192.168.70.131 ansible_ssh_user=root ansible_ssh_pass=123456 //ip 用户root 密码123456
(2)编辑/etc/ansible/ansible.cfg 更改主机配置文件
[root@localhost ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False //不检查主机密钥
forks = 20 //并发数20
(3)ansible使用ping模块看是否可以ping通
[root@localhost ~]# ansible ceshi -m ping
运行结果
192.168.70.131 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
4、编写ceshiyml文件使用playbook模块对被控节点进行管理
#编写playbook的yml 对文件进行复制,安装httpd服务和启动httpd服务
[root@localhost ~]# vim ceshi.yml
--- #剧本的开头,可以不写
- hosts: node #指定主机组,使用ceshi主机列表
gather_facts: false #是否启用facts 采集被管理机器设备信息
vars:
- selinux_status: disabled #定义变量selinux_status为disabled
tasks: #执行的动作
- name: disabled selinux #任务名称自定义
template:
src: /root/selinuxconfig.js2
dest: /etc/selinux/config
- name: stop firewalld #
service:
name: firewalld
state: stopped
enabled: no #管理firewalld服务,停止服务
- name: iptables clear
shell: iptables -F #清理防火墙规则
- name: copy files
copy: src=/root/123.txt dest=/home/cesi.txt mode=655
- name: install httpd
yum: name=httpd state=installed #yum安装httpd服务
- name: start httpd
service: name=httpd state=started enabled=yes #管理httpd服务,执行启动并设置开机自启
- name: copy html
copy: src=/root/index.html dest=/var/www/html/index.html mode=755 #copy index.html文件
#使用play模块运行ceshi.yml
[root@localhost ~]# ansible-playbook ceshi.yml #运行截图如下
5、ansible的文件说明及详解
#ansible文件说明
rpm -qi ansible #查看ansible版本信息
rpm -qa | grep ansible #查看ansible包名称
rpm -ql ansible #查看ansible安装目录
/etc/ansible #ansible主目录
/etc/ansible/ansible.cfg #ansible主配置文件
/etc/ansible/hosts #ansible主机清单
/etc/ansible/roles #ansible角色目录
/usr/bin/ansible #ansible主程序目录
/usr/bin/ansible-connection #ansible连接工具
/usr/bin/ansible-console #ansible控制台
/usr/bin/ansible-doc #ansible文档工具
/usr/bin/ansible-galaxy #ansible galaxy
/usr/bin/ansible-inventory #ansible资产
/usr/bin/ansible-playbook #ansible playbook剧本工具
/usr/bin/ansible-pull #ansible pull是指在客户端组件基于ansible pull的方式从服务器上拉取文件
#ansible.cfg配置详解
[default]
inventory = /etc/ansible/hosts #被控端主机清单文件
library = /usr/share/my_modules/ #指定ansible搜索模块位置,如果需要自定ansible模块,需要放到 library 所指定的目录下
remote_tmp = ~/.ansible/tmp #临时文件远程主机存放目录
local_tmp = ~/.ansible/tmp #临时文件本地主机存放目录
forks = 5 #ansible在执行工作时进程数量
poll_interval = 15 #默认轮询间隔时间,单位秒
sudo_user = root #被控端默认执行sudo命令所切换的用户
ask_sudo_pass = True #每次执行sudo命令时是否询问sudo到目标用户的密码
ask_pass = True #每次执行ansible命令是否询问ssh密码
transport = smart #通信机制
remote_port = 22 #远程连接被控端的ssh端口
module_lang = C #模块和系统之间通信的语言,默认为C语言
gathering = implicit #控制默认facts收集,远程系统变量
roles_path = /etc/ansible/roles #角色存储路径
host_key_checking = False #是否检查远程主机密钥
sudo_exe = sudo #sudo远程执行命令
sudo_flags = -H -S -n #传递sudo之外的参数
timeout = 10 #SSH超时时间
remote_user = root #指定默认的远程连接用户
log_path = /var/log/ansible.log #ansible日志文件,执行ansible的用户需要对日志文件具有写入权限
module_name = command #ansible默认执行的模块
executable = /bin/sh #执行的shell环境,用户shell模块
hash_behaviour = replace #如果变量重叠,优先级更高的一个是替换优先级低得还是合并在一起,默认为替换
private_role_vars = yes #默认情况下,角色中的变量将在全局变量范围中可见。 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量
private_key_file = /path/to/file #私钥文件存储位置
command_warnings = False #command模块Ansible默认发出警告
nocolor = 1 #ansible输出带上颜色区别,0表示开启,1表示关闭
pipelining = False #开启pipe ssh通道优化
[inventory]
[privilege_escalation]
#出于安全角度考虑,部分公司不希望直接以root的高级管理员权限直接部署应用,往往会开放普通用户权限并给予sudo的权限,该部分配置主要针对sudo用户提权的配置
become=True #是否sudo
become_method=sudo #sudo方式
become_user=root #sudo后变为root用户
become_ask_pass=False #sudo后是否需要验证密码
[paramiko_connection]
pty=False #是否禁用sudo功能
[ssh_connection]
#Ansible默认使用SSH协议连接对端主机,该部署是主要是SSH连接的一些配置,但配置项较少,多数默认即可
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s #ssh连接时的参数
pipelining = False #SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。如果不使用 sudo,建议开启。打开此选项可以减少 ansible 执行没有传输时 ssh 在被控机器上执行任务的连接数。不过,如果使用 sudo,必须关闭 requiretty 选项
scp_if_ssh = smart #该项为True时,如果连接类型是ssh,使ansible使用scp,为False是,ansible使用sftp。默认为smart,smart为先尝试sftp,然后尝试scp
[persistent_connection] #持续连接
connect_timeout = 30 #ansible如果在30秒内没有收到请求,则关闭连接,默认为30秒
command_timeout = 30 #ansible执行命令如果在30秒内没有收到回应则认为命令超时
[accelerate] #缓存加速
accelerate_port = 5099 #加速连接端口5099
accelerate_timeout = 30 #命令执行超时时间
ccelerate_connect_timeout = 5.0 #连接超时时间,单位为秒
accelerate_daemon_timeout = 30 #上一个活动连接的时间,单位为分钟
accelerate_multi_key = yes #允许多个私钥被加载到daemon
[selinux]
special_context_filesystems=nfs,vboxsf,fuse,ramfs,9p #文件系统在处理安全上下文时需要特殊处理,定义复制现有上下文的文件系统
libvirt_lxc_noseclabel = yes #将此设置为yes,以允许libvirt_lxc连接在没有SELinux的情况下工作
[colors]
#Ansible对于输出结果的颜色也进行了详尽的定义且可配置,该选项对日常功能应用影响不大,几乎不用修改,保持默认即可。
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
[diff]
always = no
context = 3
#主机hosts清单详解
ansible_ssh_host=192.168.70.131 #目标主机地址
ansible_ssh_port=22 #目标端口,默认为ansible.cfg中配置的端口
ansible_ssh_user=test #连接目标主机的用户
ansible_ssh_pass=123456 #连接目标主机的用户密码
ansible_ssh_private_key_file=/root/.ssh/id_rsa #连接目标主机的用户密钥,密钥和密码二选一即可
ansible_sudo_ssh=123456 #sudo到ansible.cfg配置中指定用户的密码
ansible_python_interpreter=/bin/python2.7 #指定python解释器