20-ansible.rst.txt
5.01 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
ansible集群管理工具
=======================================
离线安装包: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1
playback实例在 ansible_playback_example 目录。
在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序
我们有三种使用方法:
1. 写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。--此方法学习成本低,易上手。初级使用方法
2. 使用ansible提供的module+playback。 module相当于shell命令(copy/ls/ps/apt-get等等),playback相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playback语法(yml),优点是反馈更清晰,流程掌控更好,playback比shell和python好写些。
3. 编写python脚本,使用ansible-api。 --此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。
中文说明文档:http://www.ansible.com.cn/docs/
常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html 。
安装
-------------------------------------------
- 安装
繁星的离线包已放在sdv,放在主节点上执行install.sh即可
在自己主机上安装: pip install ansible 。然后安装sshpass(支持在配置文件中增加密码免询问)
配置
------------------------------------------
- 配置主机列表
.. code-block:: shell
mkdir /etc/ansible
vim /etc/ansible/hosts
文件实例
.. code-block:: shell
[starnet1]
ubuntu@192.168.66.7
#指定密码,支持sudo不询问密码
ubuntu@192.168.66.12 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.27 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.32 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.4 ansible_sudo_pass='ubuntu'
[starnet2]
#公司内部使用这种配置方法。
192.168.66.[2:41] ansible_ssh_pass="ubuntu" ansible_ssh_user="ubuntu" ansible_sudo_pass='ubuntu'
- **非交互式用户名密码方式(推荐公司内部采用此方式,方便但安全性低)**
此方法需要安装sshpass。离线包已包含。密码需要已明文卸载配置中,不安全,在安全要求高的环境中禁止使用。但这个方法节省了对每个主机执行ssh-copy-id,是最方便的。参考配置文件中的starnet2组。在执行命令前,需要配置环境变量 export ANSIBLE_HOST_KEY_CHECKING=False,否则会报错。
执行 ansible starnet2 -m ping, 会向192.168.66.2,192.168.66.3 ... 192.168.66.41 测试是否连通。
- ssh公钥方式
.. code-block:: shell
ssh-keygen #一路回车
ssh-copy-id ubuntu@目标节点IP
#测试是否成功
ssh ubuntu@ip #不需要输入密码就能登录则说明成功
#也可以用root账户,输入密码。所有主机拷贝一次,后续就可以免密登陆了
#测试ping所有主机
ansible all -m ping
- 交互式用户名密码方式(询问密码)
.. code-block:: shell
ansible starnet1 -m ping --user=ubuntu -k
使用
-------------------------------------------
“上传文件夹,执行脚本” 。这种模式可以批量部署程序
- 执行多条指令方式
.. code-block:: shell
#拷贝文件/文件夹
`ansible starnet -m copy -a "src=./ansible_offline_tx1 /home/ubuntu/"`
#在主机上执行shell命令
`ansible starnet -m command -a "chmod +x /home/ubuntu/ansible_offline_tx1/install.sh"`
`ansible starnet -m command -a "bash /home/ubuntu/ansible_offline_tx1/install.sh"`
以上两条指令结合,可满足大部分需求。
- playback方式
playback文件内容:
.. code-block:: shell
---
- hosts: starnet
sudo: yes
tasks:•
- name: copy dir to remote
copy: src=ansible_offline_tx1 dest=/home/ubuntu/ansible_offline_tx1
- name: run script
command: chmod +x install.sh
args:
chdir: /home/ubuntu/ansible_offline_tx1/
command: bash install.sh
args:
chdir: /home/ubuntu/ansible_offline_tx1/
保存 ansible_offline_tx1.yml
执行playback
.. code-block:: shell
ansible-playback ansible_offline_tx1.yml
ansible提供了非常多的module,常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html。
ansible-doc -l #可查看所有模块
ansible-doc 模块名 #查看某模块的使用方法,比如 ansible-doc apt ; ansible-doc pip ; ansible-doc ps
我这里的介绍只是快速入门方法,还有很多强大的功能,比如copy的backup特性,幂性,hosts的多级分组,定时任务等等 建议通读一遍中文说明文档:http://www.ansible.com.cn/docs/