Ansible介绍、配置与主机清单

toc

Ansible介绍

AnsibleSaltStackPuppet 等都是配置管理系统(configuration management system)
AnsibleSaltStack 都是 Python 编译的自动化运维工具,都是使用模块管理。不一样的是Ansible没有客户端(使用的 SSH 通道传输)而 SaltStack 有客户端(虽然 SaltStack 也能够用 SSH通道,但和 Ansible 相比就是个笑话),这方面各有优势吧,有客户端的更稳定,没有客户端的更灵活可移植性强
相比 Puppet 来讲 Ansible 没有客户端(使用的 SSH 通道传输)、简单易用和日志集中控管python

Ansible 能够帮助咱们完成一些批量任务,或者完成一些须要常常重复的工做。
好比:同时在100台服务器上安装 NFS 服务,并在安装后启动服务。
好比:将某个文件一次性拷贝到100台服务器上。
好比:每当有新服务器加入工做环境时,你都要为新服务器部署某个服务,也就是说你须要常常重复的完成相同的工做。
这些场景中咱们均可以使用到 Ansibleweb

Ansible 特色shell

  1. Ansible 不须要单独安装客户端,SSH 至关于 Ansible 客户端。
  2. Ansible 能够在配置文件里面记录 SSH 帐号密码方式也可使用密钥对方式链接。
  3. Ansible 不须要启动任何服务,仅需安装对应工具便可。
  4. Ansible 依赖大量的 Python 模块来实现批量管理。

Ansible 架构
Ansible 是用模块来管理的,而模块是 Python 写的,这就须要控制端和受控端都须要有 Python,这对于 LInux 不是问题
vim

  • 主机清单(HostInventory):记录由Ansible管理的主机信息,包括端口、密码、ip等。并进行逻辑上分组。
  • Ab-Hoc(命令行):经过命令行调用模块管理受控端
  • Playbooks(剧本):YAML格式文件,多个任务定义在一个文件中,定义主机须要调用哪些模块来完成的功能
  • CoreModules(核心模块):主要操做是经过调用核心模块来完成管理任务
  • CustomModules(自定义模块):完成核心模块没法完成的功能,支持多种语言
  • plugins(插件):完成模块功能的补充
  • ConnectionPlugins(链接插件):用于链接主机,用来链接被管理端

Ansible配置

YUM 安装 Ansiblecentos

Ansible 包在 epel 库,部分依赖在 base缓存

[root@Ansible ~]# yum install ansible -y
## 查看Ansible版本信息(版本号低的,看看epel源有吗)
[root@Ansible ~]# ansible --version
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

上面指定了 Ansible 的配置文件位置,不过 Ansible 为了方便,也为了可移植性,配置文件不是固定的,下面根据前后顺序读取:bash

  • 变量 $ANSIBLE_CONFIG 信息
  • 当前目录 ansible.cfg 文件
  • 当前用户的家目录 ansible.cfg 文件
  • /etc/ansible/ansible.cfg 文件

经常使用配置服务器

[defaults] #通用默认配置
inventory      /etc/ansible/hosts #被控制端IP或者DNS列表
library = /usr/share/my_modules/ ##默认搜寻模块的位置
remote_tmp = ~/.ansible/tmp #远程执行临时文件
local_tmp = ~/.ansible/tmp
plugin_filters_cfg = /etc/ansible/plugin_filters.yml
forks = 5 ##并行线程数
poll_interval = 15 ##回频率或轮询间隔时间
sudo_user = root ##sudo远程执行用户名
ask_sudo_pass = True ##使用sudo,是否须要输入密码
ask_pass = True ##是否须要输入密码
transport = smart ##通讯机制
remote_port = 22 ##远程SSH端口
module_lang = C ##模块和系统之间通讯的语言
module_set_locale = False
gathering = implicit ##控制默认facts收集(远程系统变量)
gather_subset = all
gather_timeout = 10
roles_path = /etc/ansible/roles ##使用playbook搜索Ansible roles
host_key_checking = False ##是否检查远程公钥指纹
sudo_exe = sudo ##sudo远程执行命令
sudo_flags = -H -S -n ##传递sudo以外的参数
timeout = 10 ##SSH超时时间
remote_user = root ##远程登陆用户名
log_path = /var/log/ansible.log ##日志文件存放路径
module_name = command ##Ansible命令默认执行的模块
executable = /bin/sh ##执行的shell环境,用户shell模块
hash_behaviour = replace ##特定的优先级覆盖变量
jinja2_extensions = jinja2.ext.do,jinja2.ext.i18 ##容许开启jinja2扩展模块
private_key_file = /path/to/file ##私钥文件存储位置
display_skipped_hosts = True ##显示跳过任何任务的状态
system_warnings = True ##禁用系统运行Ansible潜在问题警告
deprecation_warnings = True ##PlayBook输出禁用“不建议使用”警告
command_warnings = False ##command模块Ansible默认发出警告
nocolor = 1 ##输出带上颜色区别,0表示开启,1表示关闭
pipelining = False ##开启pipe SSH通道优化

[accelerate] ##accelerate缓存加速
accelerate_port = 5099 ##加速链接端口5099
accelerate_timeout = 30 ##命令执行超过期间,单位为s
accelerate_connect_timeout = 5.0 ##上一个活动链接的时间,单位为min
accelerate_daemon_timeout = 30 ##容许多个私钥被加载到daemon
accelerate_multi_key = yes ##任何客户端想要链接daemon都要开启这个选项

主机清单

## 添加客户主机信息,client清单下两台主机(IP,用户,密码,端口)
[root@Ansible ~]# vim /etc/ansible/hosts
[client]
192.168.1.2 ansible_ssh_user='root' ansible_ssh_pass='redhat' ansible_ssh_port='22'
192.168.1.3 ansible_ssh_user='root' ansible_ssh_pass='redhat' ansible_ssh_port='22'

验证 Ansible
能够把配置文件中 host_key_checking = False 注释去掉,防止第一次 SSH 连通须要公钥指纹致使的 Ansible 的连通失败架构

## 用ping模块测试主机是否连通
[root@Ansible ~]# ansible client -m ping
192.168.1.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.1.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
## -m:调用什么模块。-a:执行什么动做
[root@Ansible ~]# ansible client -m command -a "df -h"
192.168.1.2 | CHANGED | rc=0 >>
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 3.1G 14G 18% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.8M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 173M 842M 18% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.1.3 | CHANGED | rc=0 >>
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 3.1G 14G 18% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 173M 842M 18% /boot
tmpfs 98M 0 98M 0% /run/user/0

使用密钥对链接app

## 建立密钥对
[root@Ansible ~]# ssh-keygen -t rsa
## 发送到相应的主机上
[root@Ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.2
[root@Ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.3
## 删除配置文件IP后面的帐号密码
[root@Ansible ~]# vim /etc/ansible/hosts
[client]
192.168.1.2
192.168.1.3
## 链接测试
[root@Ansible ~]# ansible client -m command -a "hostname"
192.168.1.3 | CHANGED | rc=0 >>
Client2
192.168.1.2 | CHANGED | rc=0 >>
Client1

组能够包括其余组

## 从新定义主机清单(组调用其余组在组名后面加上:children)
[root@Ansible ~]# vim /etc/ansible/hosts
[web]
192.168.1.2

[nfs]
192.168.1.3

[local]
localhost ansible_connection=local

[hosts:children]
web
nfs
local
## 执行命令测试连通性
[root@Ansible ~]# ansible web --list-host
  hosts (1):
    192.168.1.2
[root@Ansible ~]# ansible nfs --list-host
  hosts (1):
    192.168.1.3
[root@Ansible ~]# ansible local --list-host
  hosts (1):
    localhost
[root@Ansible ~]# ansible hosts --list-host
  hosts (3):
    192.168.1.2
    192.168.1.3
    localhost
## Ansible自带一个all组,为所有主机
[root@Ansible ~]# ansible all --list-host
  hosts (3):
    192.168.1.2
    192.168.1.3
    localhost

用别名代替IP

## 编辑文件
[root@Ansible ~]# vim /etc/ansible/hosts
[web]
web1 ansible_ssh_host=192.168.1.2

[nfs]
nfs1 ansible_ssh_host=192.168.1.3

[local]
localhost ansible_connection=local

[hosts:children]
web
nfs
local
## 列出全部主机
[root@Ansible ~]# ansible hosts --list-host
  hosts (3):
    web1
    localhost
    nfs1

-i 指定文件

[root@Ansible ~]# vim hosts
[client]
192.168.1.2
192.168.1.3
[root@Ansible ~]# ansible client -m command -a "w" -i ./hosts
192.168.1.2 | CHANGED | rc=0 >>
 20:08:04 up 14:03, 2 users, load average: 0.00, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.1 20:08 0.00s 0.14s 0.00s w
root pts/1 192.168.1.254 14:04 6:28 0.38s 0.38s -bash
192.168.1.3 | CHANGED | rc=0 >>
 20:08:04 up 14:02, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.1 20:08 0.00s 0.14s 0.00s w
root pts/1 192.168.1.254 14:42 1:06m 0.43s 0.43s -bash
相关文章
相关标签/搜索