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

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可以二次开发)
Ansible-自动化运维工具基础知识_第1张图片
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
Ansible-自动化运维工具基础知识_第2张图片
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-自动化运维工具基础知识)