Ansible 安装配置及使用

一、ansible 介绍

Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用、安装软件、执行命令、配置和编排任务。

 
 

一、Ansible工作机制

 
 

从图中可以看出ansible分为以下几个部份:

1> Control Node:控制机器

2> Inventory:主机清单,配置管理主机列表

3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。

4> Modules(Core | Custom):模块,用于执行某个具体的任务

5> connection plugin(连接插件):Ansible通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机。

二、Ansible执行流程

 
 

简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

Ansible中有两种模式,分别是 Ad-Hoc模式和playbook模式

 
 

二、安装Ansible

一台控制主机:192.168.0.202

三台管理主机:

  • 192.168.100.131
  • 192.168.100.141
  • 192.168.100.231

安装要求:

  • 控制服务器:需要安装 Python2.6/2.7
  • 管理服务器:需要安装 Python2.4 以上版本,若低于 Python2.5 需要安装 pythonsimplejson; 若启用了 selinux,则需要安装 libselinux-python。

本次安装基于CentOS7系统环境、Python2.7.5、root用户。

2.1yum安装(推荐)

# 安装依赖

yum install rpm-build python2-devel sshpass PyYAML python-jinja2 python-paramiko python-six python2-cryptography -y

yum install epel-release -y

yum install ansible -y

2.2pip安装

pip install ansible1

注:pip方式安装不会在/etc/ansible目录下生成默认的相关配置文件

三、ansible配置使用

3.1ansible.cfg 配置

defaults下的配置项,常用的配置参数:

1)inventory 该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表 inventory = /root/ansible/hosts

 
 

2)library Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录 library = /usr/share/ansible

 
 

3)forks 设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。 forks = 5

 
 

4)sudo_user 这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数 sudo_user = root //注意:新版本已经作了修改,如ansible2.4.1下已经为: default_sudo_user = root

 
 

5)remote_port 这是指定连接被关节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的 remote_port = 22

 
 

6)host_key_checking 这是设置是否检查SSH主机的密钥。可以设置为True或False host_key_checking = False

3.2hosts配置文件

主机登录方式:

方式一:ssh用户+ssh密码

[group_name]

192.168.100.231:22 ansible_ssh_user=root ansible_ssh_pass='123456'

Ssh用户+ssh密码

方式二:ssh用户+ssh密钥

[group_name]

192.168.100.231:22 ansible_ssh_user=root ansible_ssh_private_key_file=idrsapath(密钥路径)

Ssh用户+ssh密钥

 
 

方式三:别名+ssh用户+ssh密钥

[group_name]

test1 192.168.100.231:22 ansible_ssh_user=root ansible_ssh_private_key_file=idrsapath(密钥路径)

别名+ssh用户+ssh密钥

3.3ansible 使用

3.3.1、Ansible 组的使用

规划两个主机组 test_group1 test_group2

 
 

3.3.2、用户密码、密钥登录

场景1 密码登录

安装ssh_pass包

yum –y install sshpass #apt-get install sshpass

示例如下:

[test_group1]

192.168.100.231:22 ansible_ssh_user=root ansible_ssh_pass='dianying123?'

192.168.100.141:22 ansible_ssh_user=root ansible_ssh_pass='dianying123?'

[test_group2]

192.168.100.128:22 ansible_ssh_user=root ansible_ssh_pass='dianying123?'

192.168.100.142:22 ansible_ssh_user=root ansible_ssh_pass='dianying123?'

场景2 密钥登录

  • 生成并配置ssh公钥、私钥

[root@node0 ansible]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

/root/.ssh/id_rsa already exists.

Overwrite (y/n)? y

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

66:7b:8b:17:19:65:73:24:9f:5e:28:24:28:53:dc:ec root@node0

The key's randomart image is:

+--[ RSA 2048]----+