本文发布于Cylon的收藏册,转载请著名原文链接~

运维工具

OS Provisioning: PXE, Cobbler(repository,distritution, profile)

      PXE: dhcp, tftp, (http, ftp)

      dnsusq: dhcp, dns

OS Config:

      puppet, saltstack, func

Task Excute:

      fabric, func, saltstack

Deployment:

      fabric

管理主机,要想管理被管理节点,二者必须有安全管理通道。puppet、saltstack在管理被管节点时,每一个被管节点必须运行puppet agent,管理端进程与每一个被管节点的agent进程进行通信,通信时使用的HTTP协议。此种方式必须在被管节点安装应用程序的agent,远程接收到指令,并在本地负责执行相应的任务。

根据远程管理时,是不是在每一个被管主机上安装agent端,分为两种puppet、func、saltstack;与无需agent端,ansible、fabric。依赖被管节点的ssh服务。而管理端需要知道对方主机上的账号密码。

ansible的组成

ansible核心

host invenory :为了管控每个被管主机,每个主机在本地需要注册。用来定义由ansible远程配置管理的主机,每个主机的IP地址、掩码、SSH监听的地址、端口号、账号密码等。

core modules:ansible执行任何特定管理任务,都是不由ansible自身玩成的,而是通过模块完成的。

custom Modules:使用任何编程语言来编写模块。

playbooks:将主机要完成的多个任务,事先定义在文件中可以多次调用。

1 ansible的特性

  • 基于Python语言实现,由Paramiko, PyYAML和jiniia2三个关键模块
  • 部署简单,agentless
  • 默认使用SSH协议
  • 主从模式:
    • master:ansible, ssh client
    • slave: ssh server
  • 支持自定文模块:支持各种编程语言,支持Playbook,基于“模块”完成各种“任务”。

安装依赖于epel源


配置文件

1
2
/etc/ansible/ansible.cfg
Invertory:/etc/ansible/hosts

2 ansible命令应用基础

语法: ansible <host-pattern> [-f forks] [-m module_name] [-a args]

参数 说明
-f forks 启助的并发线程数。
-m module_name 要使用的模块。
-a args 模块特有的参数

查看模块

1
2
3
4
5
6
7
8
ansible-doc -l
command           	Executes a command on a remote node                            
composer         	Dependency Manager for PHP                                     
consul          	Add, modify & delete services within a consul cluster.         
consul_acl      	Manipulate Consul ACL keys and rules                           
consul_kv       	Manipulate entries in the key/value store of a consul cluster. 
consul_session    	manipulate consul sessions                                     
copy               	Copies files to remote locations    
1
2
3
4
5
$ ansible-doc -s command
- name: Executes a command on a remote node
  command:
    chdir:# Change into this directory before running the command.
     creates: A filename or (since 2.0) glob pattern, when it already exists, this step will *not* be run.

2.1 常见模块

command命令模块,默认模块,用于在远程执行命令。

1
2
3
4
5
6
7
$ ansible 10.0.0.12 -m command -a 'date'
10.0.0.12 | SUCCESS | rc=0 >>
Wed May  2 14:40:57 CST 2018

$ ansible 10.0.0.12 -a 'date'
10.0.0.12 | SUCCESS | rc=0 >>
Wed May  2 14:41:03 CST 2018

cron

state:表示任务是添加还是移除。present表示必须提供的,absent表示必须不能提供的 present:安装、absent移除。可以不写,默认都是。state默认 present

1
ansible websrvs cron -a 'minute="*/10" job="/bin/echo hellow' name-"test cron job"'

user:指明创建用户的名字

1
ansible all -m user -a 'name=user1'
1
2
ansible all -m group -a 'name=mysql gid=2000 system=yes'
ansible all -m user -a 'user=mysql group=mysql system=yes uid=3306'

copy

src本地原路径,可以使用相对和绝对路径 dest远程目标路径,必须使用绝对路径

1
ansible all -m copy -a 'src=/etc/hosts dest=/tmp/h.ansible' owner='root' mode='644'

content:取代src,表示直接用此处指定的信息生成为目标文件内容

1
2
3
4
5
ansible all -m copy -a 'content="test ansible" dest=/tmp/h.ansible' 

$ ll /tmp/
total 56
-rw-r--r--. 1 root root   12 May  2 14:50 h.ansible

file

设置文件属性,path指定文件路径,可以用name或dest替代。

创建文件的符号链接

1
2
3
4
5
ansible all -m file -a 'path=/tmp/h src=/tmp/h.ansible state=link'

$  ll /tmp/
lrwxrwxrwx 1 root root   14 May  2 23:08 h -> /tmp/h.ansible
-rw-r--r-- 1 root root   12 May  2 23:05 h.ansible
1
2
3
4
5
6
ansible all -m file -a 'name=/tmp/h.123 src=/tmp/h.ansible state=link'

$ ll /tmp/
total 56
lrwxrwxrwx. 1 root root   14 May  2 14:53 h -> /tmp/h.ansible
lrwxrwxrwx. 1 root root   14 May  2 15:00 h.123 -> /tmp/h.ansible

删除文件夹

1
ansible all -m file -a 'path=/tmp/ state=absent'

创建文件夹

1
ansible all -m file -a 'path=/tmp/test-create state=directory'

state=file如果文件不存在,将失败,请使用copy或templates创建

1
ansible-doc -s file

修改文件权限

1
ansible test -m file -a 'owner=mysql group=mysql mode=000 path=/tmp/tomcat.xml'

service 指定运行状态

  • enabled:是否开机自动启动,取值为true或false
  • name:服务名称
  • state:状态,取位有started stopped restarted

shell:在远程主机上运行命令。

script:将本地脚本复制到远程主机并运行

yum 安装程序包

  • name:指明要安装的程序包,可以带上版本号
  • state:present,latest安装 absent卸载
1
ansible test -m yum -a 'name=zsh state=present'

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:ansible介绍

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。