美文网首页
Ansible-自动化运维工具基础知识

Ansible-自动化运维工具基础知识

作者: 1220 | 来源:发表于2019-09-17 02:12 被阅读0次

1. 什么是ansible

Ansible是一个用来批量部署远程主机上服务的工具。

这里“远程主机(Remote Host)”是指任何可以通过SSH登录的主机,所以它既可以是远程虚拟机或物理机,也可以是本地主机。

Ansible通过SSH协议实现管理节点与远程节点之间的通信。理论上来说,只要能通过SSH登录到远程主机来完成的操作,都可以通过Ansible实现批量自动化操作。

涉及管理操作:复制文件、安装服务、服务启动停止管理、配置管理等等

2.Ansible特点

 Ansible基于Python语言实现,由Paramiko和PyYAML两个关键模块构建。

 1)安装部署过程特别简单,学习曲线很平
 2)不需要单独安装客户端,只是利用现有的SSHD服务(协议)即可。
 3)不需要服务端(no servers)。
 4)ansible playbook,采用yaml配置,提前编排自动化任务。
 5)ansible功能模块较多,对于自动化的场景支持丰富。

 官网: http://docs.ansible.com/ansible/intro_installation.html

3. Ansible原理

1、连接插件connectior plugins用于连接主机 用来连接被管理端
2、核心模块 core modules 连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块 custom modules,根据自己的需求编写具体的模块
4、插件 plugins,完成模块功能的补充
5、剧本 playbooks,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单 inventor,定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
(懂Python可以二次开发)
image.png

4. 安装Ansible

管理机安装
yum install epel-release  -y
yum install ansible -y

其他所有机器:
如果有libselinux-python就不执行下面的命令了。
rpm -qa |grep libselinux-python
yum install libselinux-python -y

5. ansible配置文件

Ansible配置文件:/etc/ansible/ansible.cfg (一般保持默认) 

[defaults]
inventory =/etc/ansible/hosts #主机列表配置文件 
library =/usr/share/my-modules/#库文件存放目录 
remote-tmp=SHOME/.ansible/tmp #临时py命令文件存放在远程主机目录 localtmp =SHOME/.ansible/tmp #本机的临时命令执行目录 
forks =5 #默认并发数
sudo_user =root #默认sudo用户
ask-sudo_pass =True #每次执行ansible命令是否询问ssh密码
ask_pass =True 
remote_port =22
hostkey-checking = Falser    检查对应服务器的host-key ,建议取消注释 
log path=/var/log/ansible.log   日志文件,建议开启

[root@m01 ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles

1 directory, 2 files

6. ansible配置文件读取顺序


- ANSIBLE_CONFIG (如果设置了环境变量)
- ansible.cfg (在当前目录中)
- ~/.ansible.cfg (在家目录中)
- /etc/ansible/ansible.cfg

7. 密钥配置

配置密钥
rm -f ~/.ssh/*
#yum install sshpass -y  
ssh-keygen -f ~/.ssh/id_rsa  -P '' -q
for ip in 7 61   # ip号,为了循环下面的$ip
do
sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no"  172.16.1.$ip
done
或者关闭主机密钥检查(不建议)
如果希望禁用此行为,则可以通过编辑`/etc/ansible/ansible.cfg`或`~/.ansible.cfg`:
host_key_checking = False

或者,这可以写入环境变量中:

export ANSIBLE_HOST_KEY_CHECKING=False

8. 普通用户管理

1、管理机与所有被管理机都创建普通用户并sudo授权
vim /etc/sudoers

test     ALL=(ALL)       NOPASSWD: ALL
添加普通用户  授权all

2、管理机普通用户创建密钥对并分发公钥(上文7中讲过)

3、ansible配置

/etc/ansible/ansible.cfg

...
sudo_user      = test
deprecation_warnings = False
private_key_file = /home/test/.ssh/id_rsa


4、测试

ansible web -m copy -a "src=/etc/hosts dest=/root/" -s
ansible-playbook test.yml  -s
vim /etc/sudoers

9. 提示信息颜色

ansible软件颜色信息

绿色:  表示查看信息,对远程主机未做改动的命令

红色:  批量管理产生错误信息

黄色:  对远程主机做了相应改动

粉色:  对操作提出建议或忠告

10. 补充

ansible提供了一下命令用于检测playbook语法  --syntax-check

ansible-playbook test.yml --syntax-check

设置facts缓存

gather_facts: false

优化 Ansible 运行速度,最简单的莫过于设置 facts 缓存了。
设置 facts 缓存
我们可以设置 gather_facts: no 来禁止 Ansible 收集 facts 信息,但是有时候又需要使用 facts 中的内容,这时候可以设置 facts 的缓存。
例如,我们可以在空闲的时候收集 facts,缓存下来,在需要的时候直接读取缓存进行引用。
Ansible 1.8 版本开始,引入了 facts 缓存功能。
Ansible 的配置文件中可以修改 gathering 的值为 smart、implicit 或者 explicit。

smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts;
implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False;
explicit 则表示默认不收集,要显式收集,必须使用 gather_facts: Ture。

在使用 facts 缓存时(即设置为 smart),Ansible 支持两种 facts 缓存:redis 和 jsonfile

常见主机信息:

    ansible_all_ipv4_addresses:              仅显示ipv4的信息。
    ansible_devices:                        仅显示磁盘设备信息。
    ansible_distribution:                   显示是什么系统,例:centos,suse等。
    ansible_distribution_major_version:     显示是系统主版本。
    ansible_distribution_version:           仅显示系统版本。
    ansible_machine:                        显示系统类型,例:32位,还是64位。
    ansible_eth0:                           仅显示eth0的信息。
    ansible_hostname:                       仅显示主机名。
    ansible_kernel:                         仅显示内核版本。
    ansible_lvm:                            显示lvm相关信息。
    ansible_memtotal_mb:                        显示系统总内存。
    ansible_memfree_mb:                     显示可用系统内存。
    ansible_memory_mb:                      详细显示内存情况。
    ansible_swaptotal_mb:                       显示总的swap内存。
    ansible_swapfree_mb:                        显示swap内存的可用内存。
    ansible_mounts:                         显示系统磁盘挂载情况。
    ansible_processor:                      显示cpu个数(具体显示每个cpu的型号)。
    ansible_processor_vcpus:                显示cpu个数(只显示总的个数)。

ansible 常用参数


-m:要执行的模块,默认为command
-a:指定模块的参数
-u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,--become:变成那个用户身份,不提示密码
-k:提示输入ssh登录密码,当使用密码验证的时候用
-s:sudo运行
-U:sudo到哪个用户,默认为root
-K:提示输入sudo密码,当不是NOPASSWD模式时使用
-C:只是测试一下会改变什么内容,不会真正去执行
-c:连接类型(default=smart)
-f:fork多少进程并发处理,默认为5个
-i:指定hosts文件路径,默认default=/etc/ansible/hosts
-I:指定pattern,对已匹配的主机中再过滤一次
-list-host:只打印有哪些主机会执行这个命令,不会实际执行
-M:要执行的模块路径,默认为/usr/share/ansible
-o:压缩输出,摘要输出
--private-key:私钥路径
-T:ssh连接超时时间,默认是10秒
-t:日志输出到该目录,日志文件名以主机命名
-v:显示详细日志

相关文章

网友评论

      本文标题:Ansible-自动化运维工具基础知识

      本文链接:https://www.haomeiwen.com/subject/ljllectx.html