1.环境

1192.168.61.41 node1
2192.168.61.42 node2
3192.168.61.43 node3

2.安装Ansible

node1将做为控制主机(ansiblecontrol),下面在node1上安装Ansible。

配置 EPEL源:

1yum install epel-release

安装ansible:

1yum install ansible

查看安装版本:

1ansible --version
2
3ansible 2.2.1.0
4  config file = /etc/ansible/ansible.cfg
5  configured module search path = Default w/o overrides

3.熟悉配置

Ansible的配置文件是INI格式的,前面的ansible --version打印了配置文件的位置/etc/ansible/ansible.cfg。 实际上ansible命令会按照预先设定的顺序查找配置文件:

  1. ANSIBLE_CONFIG环境变量指定的位置
  2. 当前目录中的./ansible.cfg
  3. 用户家目录中的~/ansible.cfg
  4. /etc/ansible/ansible.cfg

另外大多数的ansible配置参数都可以设置ANSIBLE_开头的环境变量进行配置,设置了这些环境变量配置之后,就可以在playbook中直接使用。

下面我们来熟悉一下ansible.cfg中的常用配置:

  • [defaults]小节
    • inventory 资源清单(ansile连接和管理的主机列表)文件的位置, 默认值/etc/ansible/hosts
    • library 存放Ansible模块的目录。Ansible对被管理主机的操作都使用一小段代码来执行,这小段代码就是Ansible模块,默认值 /usr/share/ansible。配置多个目录的话可以以冒号:隔开,同时会检查palybook同目录下的./library目录
    • become_user 设置默认执行命令的用户,默认值是root。在playbook中可以重新设置这个参数
    • remote_port 指定Ansible连接和管理主机节点的端口,默认值22。

4.配置控制节点到各节点SSH无密访问

在各节点上创建ansible用户,并设置该用户的密码:

1useradd  -d /var/lib/ansible ansible
2passwd ansible

确保各节点上ansible用户具有sudo权限:

1echo "ansible ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

切换到ansible用户,生成该用户的ssh秘钥对:

1su ansible
2ssh-keygen
3
4ls ~/.ssh
5id_rsa  id_rsa.pub

接下来下发密钥,ji8ang公钥id_rsa.pub拷贝到各节点:

1ssh-copy-id ansible@node1
2ssh-copy-id ansible@node2
3ssh-copy-id ansible@node3

5.使用ping模块进行连通测试

修改/etc/ansible/ansible.cfg:

1[defaults]
2sudo_user=ansible
3remote_user=ansible

修改资产清单文件/etc/ansible/hosts:

1[k8s-nodes]
2node1
3node2
4node3
5
6[ceph-nodes]
7node1
8node2
9node3

我们将ansible连接和管理的主机分成了两组k8s-nodesceph-nodes

下面我们使用ping模块对受管主机进行ping操作:

1ansible node2 -m ping
2
3node2 | SUCCESS => {
4    "changed": false,
5    "ping": "pong"
6}

可以对整组主机进行操作:

 1ansible k8s-nodes -m ping
 2
 3node2 | SUCCESS => {
 4    "changed": false,
 5    "ping": "pong"
 6}
 7node1 | SUCCESS => {
 8    "changed": false,
 9    "ping": "pong"
10}
11node3 | SUCCESS => {
12    "changed": false,
13    "ping": "pong"
14}

6.使用command模块执行远程命令

1ansible all -m command -a "date"
2node3 | SUCCESS | rc=0 >>
3Wed Apr 12 21:11:39 CST 2017
4
5node2 | SUCCESS | rc=0 >>
6Wed Apr 12 21:11:39 CST 2017
7
8node1 | SUCCESS | rc=0 >>
9Wed Apr 12 21:11:39 CST 2017

7.命令帮助

使用ansible-doc -l可以列出Ansible支持的模块。 使用ansible-doc 模块名称将显示模块的介绍和使用示例,例如:

参考