1.环境

1
2
3
192.168.61.41 node1
192.168.61.42 node2
192.168.61.43 node3

2.安装Ansible

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

配置 EPEL源:

1
yum install epel-release

安装ansible:

1
yum install ansible

查看安装版本:

1
2
3
4
5
ansible --version

ansible 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  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用户,并设置该用户的密码:

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

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

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

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

1
2
3
4
5
su ansible
ssh-keygen

ls ~/.ssh
id_rsa  id_rsa.pub

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

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

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

修改/etc/ansible/ansible.cfg:

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

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

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

[ceph-nodes]
node1
node2
node3

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

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

1
2
3
4
5
6
ansible node2 -m ping

node2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
ansible k8s-nodes -m ping

node2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
node1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
node3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

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

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

node2 | SUCCESS | rc=0 >>
Wed Apr 12 21:11:39 CST 2017

node1 | SUCCESS | rc=0 >>
Wed Apr 12 21:11:39 CST 2017

7.命令帮助

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

参考