ansible自动化运维的使用总结
注:本文章会不断持续更新,请大家留意。
目录
2、编写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操作
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版本
-
#使用用户名和密码对主机进行操作
-
-
(
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"
-
}
-
2、编写ceshiyml文件使用playbook模块对被控节点进行管理
-
#编写playbook的yml 对文件进行复制,安装httpd服务和启动httpd服务
-
-
[
root@localhost
~]
# vim ceshi.yml
-
---
-
-
hosts:
ceshi
-
gather_facts:
false
-
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 #运行截图如下
3、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解释器
转载:https://blog.csdn.net/xueyuhui1/article/details/112859190
查看评论