一、Ansible安装

1. yum源安装

基于centos7.9和默认Python2.7安装。

1
2
yum install -y http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2. 验证ansible安装结果

查看版本

1
2
3
4
5
6
7
[root@localhost ansible]# ansible --version
ansible 2.9.27
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, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

查看/etc/ansible/路径下配置文件

1
2
3
4
5
[root@localhost ansible]# ll /etc/ansible/
total 28
-rw-r--r--. 1 root root 19983 May 23 04:53 ansible.cfg
-rw-r--r--. 1 root root 1219 May 23 04:32 hosts
drwxr-xr-x. 2 root root 6 Jan 15 2022 roles

3. 编辑host文件

/etc/ansible/hosts文件里面,添加三台测试机器的用户信息。

当然,此方式不安全,大家都知道。更安全的是配置私钥连接或者将密码加密。

1
2
3
4
[kubernetes]
192.168.132.129 ansible_ssh_user=root ansible_ssh_pass='***'
192.168.132.130 ansible_ssh_user=root ansible_ssh_pass='***'
192.168.132.131 ansible_ssh_user=root ansible_ssh_pass='***'

4. 编辑playbook sample

/etc/ansible/路径下添加test.yml文件如下,hosts: kubernetes表示对应的[3. 编辑host文件]谈到的服务器组。tasks则是执行任务,name遵守开发命名规范即可。

命令含义:将字符串kongkong输出到/etc/kongkong.txt文件中

1
2
3
4
5
- hosts: kubernetes
gather_facts: No
tasks:
- name: echo test data to file
shell: echo kongkong >> /etc/kongkong.txt

5. 执行测试

查看执行结果ok=1 changed=1表示执行成功,update1个。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ansible]# ansible-playbook test.yml

PLAY [kubernetes] ****************************************************************************************************

TASK [find file] *****************************************************************************************************
changed: [192.168.132.131]
changed: [192.168.132.130]
changed: [192.168.132.129]

PLAY RECAP ***********************************************************************************************************
192.168.132.129 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.132.130 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.132.131 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

6. 验证测试结果

到192.168.132.[129-130]任意一台机器,查看如下结果,表示成功。

1
2
[root@localhost ~]# cat /etc/kongkong.txt
kongkong

二、Ansible配置

1. 主机分组

  • hosts文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#密码设置
[master]
192.168.132.129 ansible_ssh_user=root ansible_ssh_pass='***' zk_myid=1

[node1]
192.168.132.130 ansible_ssh_user=root ansible_ssh_pass='***' zk_myid=2

[node2]
192.168.132.131 ansible_ssh_user=root ansible_ssh_pass='***' zk_myid=3

#分组设置
[kubernetes:children]
master
node1
node2

2.测试分发文件到所有主机

1
ansible all -m copy -a "src=/etc/hosts dest=/tmp"

3.通过ansible批量更新hostname

配置HOST,默认配置在inventory = /etc/ansible/hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[local-node001]
192.168.139.11 hostname=local-node001 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node002]
192.168.139.12 hostname=local-node002 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node003]
192.168.139.13 hostname=local-node003 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node004]
192.168.139.14 hostname=local-node004 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node005]
192.168.139.15 hostname=local-node005 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node006]
192.168.139.16 hostname=local-node006 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node007]
192.168.139.17 hostname=local-node007 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[local-node008]
192.168.139.18 hostname=local-node008 ansible_ssh_user=dahouzi ansible_ssh_pass='dahouzi' ansible_become_pass="dahouzi"
[localcluser:children]
local-node001
local-node002
local-node003
local-node004
local-node005
local-node006
local-node007
local-node008
  • 编辑和执行主机命名脚本
    创建文件:set_hostname.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- hosts: localcluser
become: yes
become_user: root
become_method: sudo
tasks:
- name: set hostname
shell: hostnamectl set-hostname {{hostname}}

# 执行
ansible-playbook set_hostname.yaml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [localcluser] *****************
TASK [Gathering Facts] *************
ok: [192.168.10.182]
ok: [192.168.10.183]
ok: [192.168.10.185]
TASK [set hostname] ****************
changed: [192.168.10.182]
changed: [192.168.10.183]
changed: [192.168.10.181]
PLAY RECAP *************************
192.168.10.181 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0