运维——ansible基础及实现

ansible

概念:是一个配置管理工具,是一个自动化运维工具,通过ssh实现配置管理、

            应用部署、任务执行等功能。

            基于key验证是实现ansible的基础   

作用:可以完成一些批量任务或者完成一些需要经常重复的工作
        比如:同时在100台服务器上安装服务,并在安装后启动服务
                  将某个文件一次性拷贝到100台服务器上

                  每当有新服务器加入工作环境时都要部署新的服务,也就是需要经常重复完成相同的工作

                  此时都可以用到ansible

在复制文件到受控主机时,受控主机目录下有此文件则ansible不做任何处理,若没有则复制,这些功能是shell所不具备的

控制其他主机的主机叫主控端
被控制的主机叫被控端

ansible中小型企业500台主机左右
saltstack 大型企业

puppet超大型企业


使用ansible前必须做到:

1、在主控机上安装ansible基于epel源 (要使用桥接网卡)      

        yum   install ansible  -y

2、在ansible配置文件中将受控主机写入"管理清单(/etc/ansible/hosts)"。

方式有两种:

        ①文件配置

 如果安装后没有配置文件直接使用ansible则会出现如下提示:    

             将受控主机的IP写入配置文件/etc/ansible/hosts的最底部如下:


    此时再来执行ansible命令

运维——ansible基础及实现_第1张图片

因为ansible是基于ssh的,所以要把受控主机的相关信息也要写全如下

运维——ansible基础及实现_第2张图片

配置完之后再次执行

运维——ansible基础及实现_第3张图片


如果受控主机较多这样配置显然是不可取的,大多数情况下都使用第二种方法基于秘钥认证

②基于秘钥认证

首先执行ssh-kengen生成秘钥对

运维——ansible基础及实现_第4张图片

将生成的秘钥发送给受控机如下:

运维——ansible基础及实现_第5张图片

此时再次执行

运维——ansible基础及实现_第6张图片


小结:在使用ansible时首先要安装包,然后将受控主机的IP写入配置文件/etc/ansible/hosts中,使用秘钥验证方式则首先要生成秘钥对ssh-keygen将生成的秘钥发送至受控主机 ssh-copy-id IP


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


Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件


inventory主机清单  配置文件/etc/ansible/hosts

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,
可以在主机清单中将其分组命名

文件格式:

中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;

此外,当如果目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

例如:

[A]

192.XXX.XXX.106

192.XXX.XXX.107

192.XXX.XXX.108

[B]

192.XXX.XXX.106

192.XXX.XXX.107

192.XXX.XXX.109

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

例如:

[A]

192.XXX.XXX.[106:108]


[B]

192.XXX.XXX.[100:105]

例:

运维——ansible基础及实现_第7张图片





ansible命令格式:
ansible  [-m module_name] [-a args]
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写—list
-k, --ask-pass 提示连接密码,默认Key验证
-K, --ask-become-pass 提示输入sudo
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户

-b, --become 代替旧版的sudo 切换


host-pattern:匹配主机的列表

All:表示所有inventory中的所有主机   例如:ansible all  -m ping

*:通配符  

            ansible "*" -m ping  与all相似匹配所有主机

            ansible 192.XXX.1.* -m ping

            ansible "*srvs" -m ping 匹配组名

或关系:用冒号表示可以是组名也可以是受控IP

            ansible 'A:B' -m ping  受控主机在A组或者B组的执行(AB都执行)

运维——ansible基础及实现_第8张图片


逻辑与:用冒号和&表示   只在两组重复的受控机上执行

            ansible 'A:&B' -m ping

运维——ansible基础及实现_第9张图片


逻辑非   感叹号表示

            ansible 'A:!B' -m ping 在A组中执行,不在B组中执行(如果即在A又在B中则不执行)

运维——ansible基础及实现_第10张图片



综合逻辑(生产中不常用)
ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
正则表达式
ansible 'websrvs:&dbsrvs' –m ping
ansible '~(web|db).*\.magedu\.com' –m ping

注:列表清单中最好都使用单引号



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


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

ansible  [-m module_name] [-a args]
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写—list
-k, --ask-pass 提示连接密码,默认Key验证
-K, --ask-become-pass 提示输入sudo
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户

-b, --become 代替旧版的sudo 切换

你可能感兴趣的:(linux运维)