|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
q4 a8 _ z9 ~) V6 N
ansible简介3 g/ R2 q9 V3 N, n
ansible是与puppet、saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet、saltstack那样都需要客户端。与puppet类似,ansible也支持丰富的功能:
: ~* ]! e5 W& P k9 M. z# `) y; q4 G& \2 m0 V4 i2 H( M" W
- 批量执行
- 支持模块化,支持playbook(相比puppet还是弱些)
- 上手容易(puppet上手有门槛)
- 权限控制( B5 c( K8 V4 ]* \
0 N1 e0 a, ?0 f0 R/ Y安装方法为:yum -y install ansible或pip install ansible。0 R5 ]9 ^& [5 w& N
! ~* A+ M! b, m* Y) H
$ \$ P9 x- L) W- W使用方法1 ^, O5 l1 D! w5 z9 o. U1 R
2 I' l' {! e9 d$ a, k
2 X. M' ^( Y5 D2 T
在管理集群时,ansible需要先配置集群hosts列表以方便集群操作% N$ y& ^) P- {& G- @6 V; R0 Q: n
, O6 N, ]% `) Z8 l |, Y6 N, w8 Z
$ cat /etc/ansible/hosts
! L5 X" P: ]4 p6 t- ?[local]& y. Z W _4 M2 y8 Y
# 配置密码登陆,需要ansible本机安装sshpass0 t5 J# [4 M7 h4 y5 X
192.168.213.135 ansible_ssh_user=root ansible_ssh_pass=root. j2 }5 O: `% Y; ~. o g; j
[zabbix]
- e4 {; P' [4 F4 D# l: A( g# 密钥登陆) g2 T1 q1 N/ @
172.17.0.2:49154 ansible_ssh_user=root0 m' z! c5 I6 O6 o' [! E1 S
172.17.0.4:49155 ansible_ssh_user=root
0 B: M# K q5 U! i7 U6 Q[vpn]' t! B: i, \' M
172.17.0.107 d" {* Z4 ]& J
]/ M" Z: |% s
( N5 J" q8 H5 S, p测试连接登陆是否OK
- {+ V5 c# l0 H# z. ?
" n& t6 @5 r) D& s$ ansible local -m ping5 M6 N% F. \7 ^- b
192.168.213.135 | success >> {) f3 W9 K. i5 {/ Q: ] D& s- c
"changed": false, x2 R3 o" u9 b$ Y
"ping": "pong", E7 }: S) d* Y# N; R' f7 l
}
9 l' U# \, {1 I
1 I! K2 y% d0 l" X( e s3 a
- C: F- \' V. ]5 T3 q7 x9 g2 Mansible常见用法为ansible host-pattern -m 模块 -a 命令,host-pattern类似于简化的正则表达式,而模块可以通过ansible-doc -l命令来查询。下面是一些常用模块的使用方法:% Z' v2 H) ^' a, E0 L8 {. A! r
" b/ M7 a+ P: ~; a& B5 ^5 o
- 安装软件: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”5 M+ @, R# s7 ^& n$ {4 h# q& i
*( u: h1 }- H6 o0 a" f; i7 N1 W! _" `
e2 ~7 K/ E0 U
7 I$ i, q/ C3 u8 Hplaybook! {; q* B: T, ]5 ^0 {/ A
5 U- q* ~$ A& a8 O$ v6 }
playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。 4 b+ L' `) b( C
. g& W7 i/ J }- C! j% V6 J' x
一个简单的playbook配置如下:* M! f) Y# n5 @8 W' I
& Q5 [ a7 \8 \* r8 l
- hosts: local
$ C. [1 h( n4 F# A) z remote_user: root9 f1 i; Q& I* d8 E: W
tasks:
6 `/ a, l4 D( C# O" ^7 z; j - name: echo hi2 E' S) S0 _5 ]0 w
shell: echo "hi") m4 t* C. d" x9 U( c9 u i2 ^
$ ^ l% q. Y" |* L9 \. ^, d* E* N
- S i8 b8 [; Y' o+ G
ansible还支持设置handlers,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:
3 N! w( P' V U t3 }0 p9 T# ^& \: W' p7 K' G: F
# playbook.yml8 O" }& L# R6 b q/ `+ S
---
/ }( ~$ j9 Z4 d$ ]- hosts: local # hosts中指定8 l& V2 U1 s9 q& A
remote_user: root # 如果和当前用户一样,则无需指定
2 l T* q; I2 S" }$ C1 P' v tasks:' }( j% T% [4 ?$ ]: z# E
- name: whoami
2 O0 ?: p4 ?; I" C- D8 {6 S copy: src=~/hosts dest=~/hosts.dest # 本地拷贝到远端 S1 `; p' |4 x
notify: # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行, A! E, T1 T P1 l& S
- clear copy # 调用handler
/ f" D. y. M1 K6 z handlers:
9 V A3 [' P* D' m" j; e8 H& G - name: clear copy. o- p5 ]: I- P2 X, k
shell: 'mv ~/hosts.dest hosts.del' # 假装删除- n g( U4 K1 _7 p, ]
|
|