一:ansible, saltstack

 

1.ansible:基于python开发,分布式,无客户端,轻量级,配置语言采用YAML,加密方式:open SSH支持二次开发

 

2.saltstack:基于python开发,采用C/S架构,相对于puppet更轻量级,采用配置语法YAML,加密方式:AES支持二次开发

 

二:选择ansible原因?

1.没有客户端比puppetsaltstack更轻量级

2.不用启动服务,只是一个工具,很轻松实现分布式扩展

3.更强的远程执行命令操作

4.不输于puppetsaltstack其他功能:

Ansible优点(1):模块可以使用任何语言开发

              2):被管节点不需要安装代理软件

              3):安装运行很简单

              4):右web管理界面,可以配置用户,组资源清单和执行playbook

Ansible缺点

                  1)对备管理节点为Windows有待加强

                        2Web管理界面是内置的Ansible的一部分            

                       3)需导入资源清单

                       4)执行效率较低

Ansible特性:

               

模块化:调用特定的模块,完成特定的任务

Paramiko (Pythonssh的实现)PyYamlJinja2(模板语言)三个关键模块

支持自定义模块,可使用任何编程语言写模块

基于Python语言实现

部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖KPI(无需SSL)

安全,基于OpenSSH

幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构

较强大的多层解决方案role

Ansible工具目标:

自动化部署APP

自动化管理配置项

自动化的持续交付

自动化的云服务管理

 

ansible是基于模块工作的,本身没有批量部署的能力。 真正具有批量部署的是ansible所运行的模块,ansible

只是提供一种框架

Ansible命令执行来源:

1> USER,普通用户,即SYSTEM ADMINISTRATOR

2> CMDB(配置管理数据库) API 调用

3> PUBLIC/PRIVATE CLOUD API调用 (公有私有云的API接口调用)

4> USER-> Ansible Playbook -> Ansibile

利用ansible实现管理的方式:

1> Ad-Hoc ansible单条命令,主要用于临时命令使用场景

2> Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

Ansible-playbook(剧本)执行过程 :

将已有编排好的任务集写入Ansible-Playbook

通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

Ansible主要操作对象

HOSTS主机

NETWORKING网络设备

注意事项:

执行ansible的主机一般称为主控端,中控,master或堡垒机

主控端Python版本需要2.6或以上

被控端Python版本小于2.4需要安装python-simplejson

被控端如开启SELinux需要安装libselinux-python

windows不能做为主控端 ansible不是服务,不会一直启动,只是需要的时候启动

asnsible的原理及机制:

1.用户

执行命令或者playbook

2.INI解析配置文件

从主机清单中解析出IP地址

3.执行ssh连接到主机

4.到被控机创建临时目录

5.给临时目录加执行权限

6.执行python脚本

7.删除临时目录和脚本

主机清单:

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,

可以在inventory file中将其分组命名

2> 默认的inventory file/etc/ansible/hosts

3> inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

Ansible 配置文件:/etc/ansible/ansible.cfg:

python 运维发布平台 python运维工具_python 运维发布平台

Ansible系列命令:

 

Ansible-doc -l 列出所有模块

Ansible-doc ping 查看指定模块的帮助用法

Ansible-doc -s ping 查看指定模块的帮助用法

ansible通过ssh实现配置管理 应用部署 任务执行等功能

ansible all --list 列出所有主机

1.ping模块:探测网络中被管理主机是否能够正常使用 ssh协议

如果对方主机网络正常 返回pong

 

1.检测所有主机的网络状态:默认情况被管理的主机是ssh基于key验证

Ansible all -m ping -k

2.或者实现基于key验证 将公钥ssh-copy-id 到被管理的主机上:

Ansible all -m ping

 

AnsibleHost-Pattern:

All:

Ansible all -m ping   表示所有主机清单中的主机

通配符:

Ansible “*” -m ping *表示所有主机)

Ansible 192.168.230.* -m ping

Ansible "*srvs" -m ping

或关系“:”

Ansible "webservers:appsrvs" -m ping

Ansible "192.168.230.150:192.168.230.151" -m ping

逻辑与“:&

Ansible "websrvs:&dbsrvs" -m ping

websrvs组并且在dbsrvs组的主机

逻辑非“:!”

Ansible "websrvs:&dbsrvs" -m ping

websrvs组但不在dbsrvs组的主机

综合逻辑

Ansible 'webservers:dbservers:&appsrvs:!ftpsrvs' -m ping

正则表达式

Ansible "websrvs:&dbsrvs" -m ping

Ansble "~(web|db).*\.magedu\.com" m ping

 

ansible命令执行过程:

python 运维发布平台 python运维工具_测试工具_02

查看详细执行过程:

ansible all –m ping –v

ansible all –m ping –vv

ansible all –m ping –vvv

ansible使用案列:

wang用户执行ping存活检测

ansible all -m ping -u wang -k

以wang sudo至root执行ping存活检测 (注意把普通用户加入到/etc/sudoers中,-K为询问特权密码,

-k为询问连接密码)

ansible all -m ping -u wang -k -b -K

以wang sudo至mage用户执行ping存活检测

ansible all -m ping -u wang -k -b --become-user=mage -K

以wang sudo至root用户执行(-m command为默认模块,可加可不加)

ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K

ping模块测试连接

ansible 192.168.38.126,192.168.38.127 -m ping -k

列出所有管理的主机

ansible all --list-hosts

目录

一:ansible, saltstack

二:选择ansible原因?

Ansible工具目标:

asnsible的原理及机制:

ansible命令执行过程:

执行命令异常:


python 运维发布平台 python运维工具_执行过程_03

原因:

没有在ansible管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息

 

解决办法:1.在管理节点生成公钥: ssh-keygen

                  2.添加目标结点的ssh认证信息 在管理节点执行:

                     ssh-copy-id root@destip(目标节点IP)

2.Command模块具有局限性:

Command模块  不支持特殊符号,| > * ,也不支持变量

Ansible 被控主机 -m command -a "echo centos | passwd  --stdin wang "

python 运维发布平台 python运维工具_运维_04

3.shell模块:

Shell命令是通过/bin/sh进行执行的,command命令没有shell的环境变量,因此不支持特殊符号或变量的操

作。

python 运维发布平台 python运维工具_执行过程_05

 

4.script模块

在远程机器上执行本地脚本

ansible-doc -s script

ansible db -m script -a "/root/a.sh"  # 执行本地的文件,管控机的文件

ansible db -m script -a "creates=/root/a.sh /root/a.sh"  # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过

ansible db -m script -a “creates=/tmp /root/a.sh”  # 判断被控机上的文件或目录是否存在,如果存在则不执

行,如果不存在,则执行

5.Copy模块

从ansible服务器主控端复制文件到远程主机

ansible all -m copy -a "src=/etc/fstab dest=/tmp/”

#如果目标存在,默认覆盖,此处指定先备份

ansible srv -m copy -a “src=/root/test.sh dest=/tmp/test2.sh owner=wang mode=600 backup=yes”

#指定内容,直接生成目标文件

ansible websrvs -m copy -a “content=‘test line1\ntest lin2’ dest=/tmp/test.txt”

#复制/etc/下的文件,不包括/etc/目录本身

ansible srv -m copy -a “src=/etc/ dest=/backup”

6.Fetch模块

从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录

ansible srv -m fetch -a ‘src=/root/test1.sh dest=/data/scripts’

7.file模块

功能:设置文件属性

#创建空文件

ansible srv -m file -a ‘path=/data/test.txt state=touch’

#删除空文件

ansible srv -m file -a ‘path=/data/test.txt state=absent’

#创建文件时,指定文件属主和权限

ansible srv -m file -a ‘path=/root/test.txt owner=linux mod=755’

#创建目录

ansible srv -m file -a ‘path=/data/mysql state=directory owner=mysql group=mysql’

#删除目录

ansible srv -m file -a ‘path=/data/mysql state=absent’

#创建软链接

ansible srv -m file -a ‘src=/data/testfile dest=/data/testfile-link state=link’

#删除软链接

ansible srv -m file -a ‘src=/data/testfile dest=/data/testfile-link state=absent’