1、自动化运维工具
本质是批量管理
利用工具执行繁琐、重复性的工作
使用UI界面避免输入大量的命令
2、LB集群 调度器 2台 realserver 50台 修改realserver上的某项配置
3、ansible是一款基于ssh协议的一款远程管理工具
4、ansible的组件
shellansible 核心程序 主机清单 core module custom module plugins playbook connection plugin
5、主机清单
/etc/ansible/hosts
4、ansible管理被管理主机
ansible服务器如何与被管理主机连接? 方法一、
shell#在hosts文件中写明连接被管理主机的用户名、密码、端口号
192.168.2.10 ansible_ssh_user=root ansible_ssh_pass=123@.com ansible_ssh_port=22
方法二、
shell#做ssh免密登录
ssh-copy-id 192.168.2.10
shell[root@cong11 ~]# ansible --help #查看帮助 Usage: ansible <host-pattern> [options] #使用方法,ansible+主机+选项 例如:ansible [组名] [-i 主机文件] [-m 模块名称] [-a 模块参数] ansible详细参数: -v #详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv) -i #指定清单文件(hosts)的路径,默认是在 /etc/ansible/hosts -m #指定使用的module名称,默认使用 command模块 -a #指定module模块的参数 -u #ssh连接的用户名,默认用root,ansible.cfg中可以配置 -k #提示输入ssh登录密码,当使用密码验证的时候用 -s,--sudo:远程执行命令时使用sudo方式,相当于Linux系统下的sudo命令。 -U SUDO_USERNAME,sudo到哪个用户,默认为root 注意:上述的-s和-U选项在新版中已经失效。新版本选项如下两项: -s,--sudo 被改成 -b,--become -U,--sudo-user被改成 --become-user -K, --ask-become-pass:使用--become或者--become-user时使用的密码认证(即提示输入sudo密码,当不是NOPASSWD模式时使用)。 -C #测试此命令执行会改变什么内容,不会真正的去执行 -f FORKS, --forks=FORKS:并行线程数量,当有数量巨大的机器需要配置,可以使用高并发线程,默认是5个。 --list-host:只打印有哪些主机会执行这个命令,不会实际执行 ansible-doc详细参数: ansible-doc -l #列出所有的模块列表 ansible-doc -s 模块名 #查看指定模块的参数 -s, --snippet # [ˈsnɪpɪt] 片断
shell设置用户名密码:echo '<新密码>' | passwd --stdin <用户名> 或者 echo <用户名>:<密码> | chpasswd 例1:echo "123456" | passwd --stdin username 例2:echo "username:123456" | chpasswd
shellansible all -m shell -a "ip a l ens33" #查看所有组主机的ens33网卡信息
向被控制端主机拷贝数据
shell例1:
[root@cong11 ~]# ansible web_server -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root group=root mode=640 backup=yes'
说明:
#src 主控端文件位置
#dest 被控端目标位置
#owner 文件复制过去后的所有者
#group 文件复制过去后的所属组
#mode 文件的权限设定
#backup=yes 如果目标位置存在同名的文件,在覆盖之前将原文件备份
shell例2:使用content [root@cong11 ~]# ansible web_servers -m copy -a 'content="Hello ansible\nyou are clever!\n" dest=/tmp/ansible.txt'
对文件的操作 :比如创建,删除,软硬链接等
shellgroup:定义文件/目录的属组 mode:定义文件/目录的权限 owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径 recurse:递归的设置文件的属性,只对目录有效 src:要被链接的源文件的路径,只应用于state=link的情况 dest:被链接到的路径,只应用于state=link的情况 state: directory:如果目录不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件
shell例1:
[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/hosts mode=777"
#在web_servers组中所有主机的/tmp目录下创建hosts文件,权限为777
例2:
[root@cong11 ~]# ansible web_servers -m file -a "src=/tmp/hosts dest=/opt/hosts state=link"
#将web_servers组中的所有主机中/tmp/hosts软连接到/opt/hosts
用来调用yum命令安装一些服务和依赖
shell#yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。
#常用参数:
#name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
#state参数:用于指定软件包的状态 ,默认值为present,表示确保软件包已经安装,除了present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
#disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。
#update_cache参数:是否更新缓存,默认值时no
#enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
#disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。
#enablerepo 参数和 disablerepo 参数可以同时使用
shell例1:
[root@cong11 ~]# ansible web_servers -m yum -a "name=httpd state=latest"
#给web_servers组主机安装httpd服务
shellAnsible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等。 service模块详解: name参数:此参数用于指定需要操作的服务名称,比如 nginx,httpd。 state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的httpd,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted(重启)、reloaded。 enabled参数:此参数用于指定是否将服务设置为开机启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。 runlevel参数:服务启动级别 arguments参数:服务命令行参数传递 注:想使用service模块启动服务,被启动的服务,必须可以使用service 命令启动或关闭
用法
shell例1:
[root@cong11 ~]# ansible web_servers -m service -a "enabled=yes name=httpd state=started"
#启动httpd服务并设置开机自启
[root@cong11 ~]# ansible web_servers -m service -a "name=httpd state=restarted"
#重启httpd服务
shelluser 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。 常用参数 name参数:必须参数,用于指定要操作的用户名称。 group参数:此参数用于指定用户所在的基本组。 gourps参数:此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。 append参数:如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no。 shell参数:此参数用于指定用户的默认 shell。 uid参数:此参数用于指定用户的 uid 号。 expires参数:此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列,比如,你想要设置用户的过期日期为2020年12月31日,那么你首先要获取到2020年12月31日的 unix 时间戳,使用命令 “date -d 2020-12-31 +%s” 获取到的时间戳为1609344000,所以,当设置 expires= 1609344000 时,表示用户的过期时间为2020年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成18627(表示1970年1月1日到2020年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。 comment参数:此参数用于指定用户的注释信息。 state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。 remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel -r” 命令。 password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串
shell例1:
[root@cong11 ~]# ansible web_servers -m user -a "name=berry shell=/sbin/nologin state=present"
#创建berry用户,不可登陆
例2:
[root@cong11 ~]# ansible web_servers -m user -a "name=berry remove=yes state=absent"
#删除betty用户并删除家目录
例3:
ansible web_servers -m user -a "name=zyw shell=/bin/login password={{'123.com'|password_hash('sha512')}} state=present"
#创建zyw用户密码为123.com
shellgroup 模块可以帮助我们管理远程主机上的组。 常用参数 name参数:必须参数,用于指定要操作的组名称。 state参数:用于指定组的状态,两个值可选,present,absent,默认为 present,设置为absent 表示删除组。 gid参数:用于指定组的gid
shell例1:
[root@cong11 ~]# ansible web_servers -m group -a "name=test"
#创建一个名为test的组
例2:
[root@cong11 ~]# ansible web_servers -m group -a 'name=test state=absent'
#删除名为test的组
shell#远程从被控制端拉取数据到本机
[root@ansible ansible]# ansible all -m fetch -a "src=/etc/profile dest=/root/"
#将所有主机的/etc/profile文件拉取到本机的root下
shell1、yml文件一般都是以--开头 2、yml文件是以‘#’号为注释符 3、yml文件对大小写比较敏感 4、用缩进来表示层级关系,只要每层级的前面空格数一样即可 5、除了结尾是:的,其他的:号后面都要有空格 6、短横线表示列表项,短横线后面跟个空格。多个项在同一层级表示同一列表 7、文件结尾名一般为yaml或yml
shell对于Ansible, 每一个YAML文件都是从一个列表(列表list,又称为序列 sequence)开始。列表中的每一项都是一个键值对,通常它们被称为一个 “哈希” 或 “字典”或映射。所以, 我们需要知道如何在YAML中编写列表和字典。
#列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个减号和一个空格)。
#具体在ansible playbook中,列表所描述的是局部环境,它不一定要有名称,只要使用"- ",它就表示圈定一个范围,范围内的项都属于该列表。例如:
shellhosts: #执行的远程主机 tasks: #任务集 Varniables #内置变量或自定义变量在playbook中调用 Templates #模板,可替换模板文件中的变量并实现一些简单逻辑的文件◆Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行 tags #标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
运行方式
shellansible-playbook <filename.yml> ...[options]
常用选项
shell--check #只检测可能会发生的改变,并不会真正的去改变,就是测试的意思 --list-hosts #列出运行任务的主机 --limit #主机列表只针对主机列表中的主机运行 -v #显示过程 -vv -vvv更详细
本文作者:YOUWEI
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!