Ansible自动化运维实战

一、Ansible入门

1、Ansible、Saltstack和Puppet是目前互联网IT使用最最广泛的自动化运维工具,主要是用于自动化管理、配置数以万计的服务器,具体可以对服务器做哪些管理呢?

  • 修改、更新服务器配置文件;
  • 创建目录、文件、删除;
  • 执行各种SHELL命令,不支持交互模式指令;
  • 查看服务器资源、CPU、MEM、DISK;
  • 安装软件服务、启动、停止、重启。

2、Ansible自动运维工具特点?

  • 基于Python语言编写的;
  • 通过SSH协议通信,客户端无需安装Agent;
  • 支持普通用户、sudo去管理客户端;
  • 更新或者操作时,只需在管理端执行即可;
  • 去中心化管理,任意主机即可安装Ansible工具。

二、Ansible工作原理

结构图:
在这里插入图片描述注:图中的Host Inventoy代表的便是下述的本地Hosts配置文件,注意这个hosts文件不是本地域名解析使用的/etc/hosts这个文件!

原理:Ansible工具依赖多个模块(每个模块都有不同功能),读取本地hosts配置文件中客户端的IP地址,使用SSH协议远程管理客户端,将需要执行的操作和指令推送给客户端,所有的发送给客户端的指令会在客户端上被运行,最终会将执行后结果返回在Ansible管理端终端上。

三、Ansible的安装与基本使用

1、安装yum扩展源及ansible

 yum install epel-release ansible -y

2、编辑hosts文件添加服务器

hosts文件位置:/etc/ansible/hosts
添加主机有两种方式:

  • 添加组
[web]  #组名
172.16.193.201 #需要添加到此组中的服务器的IP地址
172.16.193.202
[db]
172.16.193.203
172.16.193.204

注:基于组这个单位去对大量服务器进行管理

  • 直接添加主机
172.16.193.201
172.16.193.202

3、使用基本ansible命令

ansible命令参数详解:

-v,–verbose  						打印详细模式;
-i PATH,–inventory=PATH   			指定host文件路径;
-f NUM,–forks=NUM   				指定fork开启同步进程的个数,默认5;
-m NAME,–module-name=NAME   		指定module名称,默认模块command;
-a MODULE_ARGS              		module模块的参数或者命令;
-k,–ask-pass                		输入远程被管理端密码;
–sudo                       		基于sudo用户执行;
-K,–ask-sudo-pass           		提示输入sudo密码与sudo一起使用;
-u USERNAME,–user=USERNAME  		指定移动端的执行用户;
-C,–check                   		测试执行过程,不改变真实内容,相当于预演;
-T TIMEOUT,							执行命令超时时间,默认为10秒;
--version 							查看Ansible软件版本信息。
(1)编辑ansible配置文件关闭host_key_checking
vim /etc/ansible/ansible.cfg

设置为False即可
在这里插入图片描述注:如果这个参数开启,就会出现咱们一个服务器在ssh连接一个从未连接过的服务器时,需要输入yes才能连接如下所示:
在这里插入图片描述注:因为ansible不支持交互式场景,所以我们必须关闭它!

(2)熟悉ansible命令
#ansible命令大致可分为三个部分如下:
ansible -k -i /etc/ansible/hosts all -m command -a "df -hT"
			指定hosts文件位置		       指定模块    执行的动作
#注:如果hosts文件位置和名字为/etc/ansible/hosts,那么-i可以省略

#如果要使用默认模块command,则可以省略-m参数,学了ansible配置文件可以修改默认模块
ansible命令可以简化成:
ansible -k all -a "df -hT"

#-k为输入密码登录,可以配置ssh免密登录,省略-k参数
ansible all -a "df -hT"
注:这里的all是指定的hosts文件中哪些主机执行这条命令,如果添加了组,可以写ansible web -a "df -hT",只让web组执行此条命令。

在这里插入图片描述

扫描二维码关注公众号,回复: 9133780 查看本文章

4、配置ssh免密登录

ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.193.201
            指定本服务器公钥文件位置    指定copy到那个服务器

在这里插入图片描述
在这里插入图片描述

四、ansible重要模块的透析

1、shell模块实战(重点)

Ansible shell模块主要用于远程客户端上执行各种Shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令
例:

ansible -k all -m shell -a "/bin/sh /tmp/variables.sh >>/tmp/var.log"

注:我们在linux中使用的命令它都支持,基本上掌握了这个模块,linux自动化运维都可以用这个模块搞定!

2、synchronize模块实战

Ansible synchronize模块主要用于目录、文件同步,基于Rsync命令同步目录,Synchronize模块使用详解

使用模块前应先用shell模块给各个主机安装rsync软件包

#用ansible给web组的服务器安装rsync软件包
ansible -k web -m shell -a "yum install rsync -y"

ansible中的synchroniz模块参数详解:

compress        			    开启压缩,默认为开启;
archive         				是否采用归档模式同步,保证源和目标文件属性一致;
checksum        			    是否效验;
dirs            				以非递归的方式传输目录;
links           				同步链接文件;
recursive       				是否递归yes/no;
rsync_opts      				使用rsync 的参数;
copy_links      				同步的时候是否复制连接;
delete          				删除源中没有而目标存在的文件;
src                          源目录及文件;
dest	        				目标目录及文件;
dest_port       				目标接受的端口;
rsync_path      				服务的路径,指定 rsync 命令来在远程服务器上运行;
rsync_timeout   				指定rsync操作的IP超时时间;
set_remote_user 			    设置远程用户名;
--exclude=.log  				忽略同步.log结尾的文件;
mode            			同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push。

Ansible synchronize模块企业常用案例如下:
(1)将本ansible服务器的/tmp/目录的所有文件同步到其他所有服务器的/tmp目录下

ansible  -k  all  -m synchronize  -a 'src=/tmp/ dest=/tmp/'

(2)将本ansible服务器的/tmp/目录的所有文件同步到其他所有服务器的/tmp目录下,并开启compress压缩传输,让目标与源目录文件保持完全一致,不同步.txt结尾的文件

ansible  -k  all  -m synchronize  -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=.txt'

3、copy模块实战

Ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能,copy模块使用详解

ansible中的copy模块参数详解:

src		 	 	Ansible端源文件或者目录,空文件夹不拷贝;
content		 	用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest			    客户端目标目录或者文件,需要绝对路径;
backup			拷贝之前,先备份远程节点上的原始文件;
directory_mode	用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow			支持link文件拷贝;
force			覆盖远程主机不一致的内容;
group		 	设定远程主机文件夹的组名;
mode		 	指定远程主机文件及文件及的权限;
owner		 	设定远程主机文件夹的用户名。

(1)Ansible copy模块操作,src表示源文件,dest表示目标目录或者文件,owner指定拥有者

ansible -k all -m copy  -a  'src=/etc/passwd  dest=/tmp/  mode=755  owner=root'

(2)Ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者

ansible -k all -m copy  -a  'content="Hello World"  dest=/tmp/jfedu.txt  mode=755  owner=root'

五、ansible配置文件参数详解

Ansible默认配置文件为/etc/ansible/ansible.cfg,配置文件中可以对ansible进行各项参数的调整,包括并发线程、用户、模块路径、配置优化等,如下为Ansible.cfg常用参数详解:

[defaults]   									通用默认配置段;
inventory      = /etc/ansible/hosts     	    被控端IP或者DNS列表;
library        = /usr/share/my_modules/ 	    Ansible默认搜寻模块的位置;
remote_tmp     = $HOME/.ansible/tmp       		Ansible远程执行临时文件;
forks          = 5    							并行进程数;
sudo_user      = root   						sudo远程执行用户名;
ask_sudo_pass = True   							使用sudo,是否需要输入密码;
ask_pass      = True    						是否需要输入密码;
remote_port    = 22    							远程SSH端口;
module_lang    = C   							模块和系统之间通信的语言;
host_key_checking = False    					检查远程主机密钥;
#sudo_exe = sudo     					   		sudo远程执行命令;
#sudo_flags = -H								传递sudo之外的参数;
timeout = 10									SSH超时时间;
remote_user = root   					    	远程登陆用户名;
log_path = /var/log/ansible.log     		    日志文件存放路径;
module_name = command 				   		 	Ansible命令执行默认的模块;
#executable = /bin/sh     				    	执行的Shell环境,用户Shell模块;
#system_warnings = True    						禁用系统运行ansible潜在问题警告;
#command_warnings = False    			    	command模块Ansible默认发出警告;
#nocolor = 1  									输出带上颜色区别,开启/关闭:0/1; 
pipelining = False								开启pipe SSH通道优化;

其中:host_key_checking、command_warnings、module_name、forks修改几率最大!

为了安全可能会修改sudo_user,这个参数表示用sudo提权的用户连接时映射的用户身份为什么!

remote_user这个参数,我们在之前的ansible命令的-k参数指定密码,众所周知我们一般都需要指定用户和密码才行,未用-u指定用户,这里的这个参数就是设定的默认使用用户!!

发布了162 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/104274936