|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
G s& t. m5 ` _! @. gansible简介/ Y7 K' ~* K3 ?* e
ansible是与puppet、saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet、saltstack那样都需要客户端。与puppet类似,ansible也支持丰富的功能:
' t/ [9 y6 }2 ` m2 z
- n5 T3 l) O6 q/ A$ j. U/ l/ |% y- 批量执行
- 支持模块化,支持playbook(相比puppet还是弱些)
- 上手容易(puppet上手有门槛)
- 权限控制* L1 j4 Q, X) t' G2 j, ?
, L1 d1 M; p5 ~ x( k
安装方法为:yum -y install ansible或pip install ansible。+ V6 ~& C( G. H! ~" C
2 u. D8 \; s6 Z* ]5 F
) b9 K3 o7 D. O, @7 @# n
使用方法
8 |$ L/ B* ^+ p* \8 V
4 Q2 I2 w% n% T) t
8 P: I& J) B0 F, G: m在管理集群时,ansible需要先配置集群hosts列表以方便集群操作+ W% D' |! Z* P. d8 W
+ }% i, f" V/ @6 g$ cat /etc/ansible/hosts
1 M/ Z* X( i2 l; S- }5 [1 I, U[local]6 |$ D1 A3 ^7 H: M8 y3 v
# 配置密码登陆,需要ansible本机安装sshpass |5 i' N# ]6 t8 Z* n
192.168.213.135 ansible_ssh_user=root ansible_ssh_pass=root
* m8 }, p- X. Z! J' X[zabbix]
- c5 R# ~+ Y3 j+ z6 Q3 T N t# 密钥登陆, t; N, @4 c( r% l& R. T0 [
172.17.0.2:49154 ansible_ssh_user=root
# i4 b' t3 D6 z9 I/ n) B% R" U172.17.0.4:49155 ansible_ssh_user=root) g3 ?: r0 `% ?. m- f/ X% K4 x
[vpn]0 X3 L0 z. C0 l3 h, z- d7 A( b
172.17.0.10
' [# r0 n* V* J5 P5 I# y. n6 S; a9 j; C, I
7 c' H5 N6 M/ h5 ~6 _测试连接登陆是否OK( |( W" [, |; l! e" K4 C
( B% ^- M" f! d9 u1 J
$ ansible local -m ping2 i& S7 S; w, f. L
192.168.213.135 | success >> {
% S0 l0 }( u' T& V ? "changed": false,% J7 w* ?# s" _. D. M, G
"ping": "pong"4 t$ l& t/ ?( K* i# }3 s
}
. }+ _2 Z% \: R4 l9 C! V0 n3 v4 ^* t1 G" S
1 V) s! ^, G. A4 u2 @/ Dansible常见用法为ansible host-pattern -m 模块 -a 命令,host-pattern类似于简化的正则表达式,而模块可以通过ansible-doc -l命令来查询。下面是一些常用模块的使用方法:% ?4 H$ S" r( M% W: L
" A+ y0 H2 B# ~! H$ Q6 ]: N5 L- 安装软件:ansible local -m apt -a ‘name=gcc state=present’或者ansible local -m yum -a “name=nmap state=installed”
- 执行命令:ansible local -m shell -a ‘uptime’
- 拷贝文件:ansible local -m copy -a “src=/tmp/server dest=/tmp/server”
- 文件属性:ansible local -m file -a “dest=/tmp/server mode=755 owner=root group=root”9 [3 Z3 b1 |! N3 w( ]# Q; J. k
*6 X9 o3 K$ A# H) D% p1 p2 ^6 W/ [
3 w! W Z2 V% p0 Z7 X, n3 \7 ~, v. Z9 h d. S
playbook
* K; ?/ ]$ E* B- Q, O* `& s) m3 w5 E7 z
playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。
- c. m5 X7 Y, ~- @) c6 B& P( v
- j( [# J/ ^0 R5 d一个简单的playbook配置如下:; M& n5 ^6 `+ I6 ^- M1 a5 T
6 X6 @ D, t$ n: {0 b$ Y- hosts: local) r6 {- V6 v: |, E% q/ c+ Q
remote_user: root
. m6 j$ P W4 p; \) D- [* h tasks:
5 W# S8 m: n& n0 c+ |9 c# N9 } G - name: echo hi1 O$ Q. `3 Y! I: e6 U8 _/ F4 O
shell: echo "hi"# |' V& {. A8 Q( `1 K
& q" {9 L" i! {& b% p
) w$ P( l5 J: Y* M( s( a# H
ansible还支持设置handlers,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:
* H: x; k# n* ]/ ?( j" c' K/ R% y3 D l3 ^
# playbook.yml
' a% J ?1 y1 t+ r$ f---' m0 t# c6 C! ]/ z3 {* a$ e
- hosts: local # hosts中指定9 W/ b: F) F" o" ^. ~( v
remote_user: root # 如果和当前用户一样,则无需指定
5 C! a/ d. R) i tasks:
# |) A3 L. A/ ?2 v* b" D - name: whoami5 Y4 {1 [6 \4 o% @' Q4 i
copy: src=~/hosts dest=~/hosts.dest # 本地拷贝到远端: Y# H8 ~3 z% a2 y) C! u& E7 }
notify: # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行 S4 g! C& Y- N" L
- clear copy # 调用handler/ b' A9 t" P; F& E
handlers:- H4 c1 A3 z/ E
- name: clear copy e3 D( G5 x4 L3 K# }* t! M
shell: 'mv ~/hosts.dest hosts.del' # 假装删除
1 v$ g7 R" L H |
|