菜鸟玩云计算之二十:saltstack入门初步
2015-04-08 14:35
281 查看
菜鸟玩云计算之二十
SaltStack 入门初步0. saltstack 是什么
参考下面的文章:http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.htmlSalt Stack 初探 之 另外一种用 Python 写的配置管理系统http://www.mamicode.com/info-detail-461069.htmlsaltstack这货居然是用python2.6写的,费了好大的劲,才弄出来用python调用它.首先安装好salt-master(或者salt-minion),然后输入下面的命令:# python2.6>>> import salt.config没有错误. 那么接下来就可以用python调用salt的api干活了.0.1 salt-key 管理
master上执行:# 列出所有key# salt-key -L# 接受所有key
# salt-key -A# 验证并接受指定minion的key
# salt-key -f '202'202: fd:c3:43:22:df:14:7e:b9:1e:cd:be:9a:fc:62:17:7c在minion id: 202上执行:
# salt-call key.finger --locallocal:fd:c3:43:22:df:14:7e:b9:1e:cd:be:9a:fc:62:17:7c在master上接受202的key:
# salt-key -a '202'
0.2 发送命令
## 测试命令# salt '*' test.ping## 打印磁盘使用
# salt '*' disk.usage## 打印帮助文档
# salt '*' sys.doc## 执行ls命令
# salt '*' cmd.run 'ls -l /etc'## 显示minion的网络信息:
# salt '*' network.interfaces
0.3 安装软件包
salt 会调用合适的包管理工具执行软件包的安装(如yum和apt):# salt '*' pkg.install ${pkgname}如(节点必须配置好yum源):
# salt '*' pkg.install hadoop-lzo
1. 同步文件
slatsatck用于同步master上的配置文件到minion节点,首先在master上增加设置:# mkdir -p /srv/salt/dev/services /srv/salt/dev/states /srv/salt/prod/services /srv/salt/prod/services # mkdir /etc/salt/master.d/ # vi fileserver.conf # service salt-master restartfileserver.conf内容如下:
#### fileserver.conf # Salt runs a lightweight file server written in zeromq to deliver files to # minions. This file server is built into the master daemon and does not # require a dedicated port. file_roots: base: - /srv/salt/ dev: - /srv/salt/dev/services - /srv/salt/dev/states prod: - /srv/salt/prod/services - /srv/salt/prod/states假设在master: /srv/salt/下创建了文件: first.xml, 使用下面的命令可以实现文件first.xml下发到所有minions的/tmp下面:
# salt ‘*‘ cp.get_file salt://first.xml /tmp/first.xml 或 gzip=1-9,数字越大,压缩越高; makedirs=True 自动创建目录 # salt ‘*‘ cp.get_file salt://first.xml /tmp/salt/first.xml gzip=9 makedirs=True这样我们就可以用脚本灵活控制服务器端(master)的配置文件的分发。
2. 目录同步
cp.get_dir,get_dir与get_file的用法十分相似,用来将整个目录分发到minions. 本例在master的/srv/salt下创建目录和文件:/srv/salt/hadoop_conf_dir/hadoop.config, 同步到所有minion节点的/tmp/hacl_conf下面, 如果目录不存在则创建,使用压缩# salt ‘*‘ cp.get_dir salt://hadoop_conf_dir /tmp/hacl_conf gzip=9 makedirs=True这样,minion上为:
/tmp/hacl_conf/hadoop_conf_dir/hadoop.config
3. grains
1) grains的作用是在minion端的服务启动时,调用这个接口,收集minion端的信息,这些信息数据可以在salt的其他模块中直接使用,需要注意的是,这个接口只在minion端的minion服务启动时被调用一次,所以收集的数据是静态的,不会改变的,除非你重启了minion端的服务. 在master上执行下面的命令(202是minion节点id)收集minion端的信息:# salt '202' grains.ls显示:
- SSDs - biosreleasedate - biosversion - cpu_flags - cpu_model - cpuarch - domain - fqdn - fqdn_ip4 ...2) 使用grains.items模块列出所有可用grains的具体数据:
# salt '202' grains.items3) 查看所有节点的IP地址:
# salt ‘*‘ grains.item ipv4 # NOT grains.items4) 查看202的os版本:
# salt ‘202‘ grains.item os
4. 自定义grains_module
所有操作都是在master上运行!4.1 写模块/srv/salt/_grains
/${module_name}.py
自定义的grains_module存放在
/srv/salt/_grains目录,下面定义一个获取
max_open_file的grains:
# vi /srv/salt/_grains/max_open_file.py # chmod a+x /srv/salt/_grains/max_open_file.py
max_open_file.py内容如下:
#!/usr/bin/python2.6#-*- coding: UTF-8 -*-# cheungmineimport os,sys,commandsdef Grains():grains = {}max_open_file=65536try:getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')except Exception,e:passif getulimit[0]==0:max_open_file=int(getulimit[1])grains['max_open_file'] = max_open_filereturn grains
4.2 同步grains模块
## 到所有节点# salt '*' saltutil.sync_all## 到指定minion id的节点## salt '202' saltutil.sync_all得到显示:
203:----------grains:- grains.max_open_filemodules:outputters:renderers:returners:states:utils:202:----------grains:- grains.max_open_filemodules:outputters:renderers:returners:states:utils:
4.3 刷新模块(让minion编译模块)
# salt '*' sys.reload_modules或#### salt '202' sys.reload_modules203:True202:True
4.4 验证max_open_file
$ salt '*' grains.item max_open_file203:----------max_open_file:1024202:----------max_open_file:1024
5. 自定义module
存放在/srv/salt/_modules下面. 写一个测试的module: /srv/salt/_modules/nodejs.py, 内容如下:#!/usr/bin/python2.6#-*- coding: UTF-8 -*-#def status(cmd):ret = {}ret['Cmd'] = cmdret['Msg'] = "Good-Bye"ret['Result'] = Truereturn ret提交到所有minions(虚拟机上时间比较长):
# chmod a+x ./nodejs.py# salt '*' saltutil.sync_all# salt '*' sys.reload_modules203:----------grains:modules:- modules.nodejsoutputters:renderers:returners:states:utils:202:----------grains:modules:- modules.nodejsoutputters:renderers:returners:states:utils:执行:
# salt '*' nodejs.status "hello"203:----------Cmd:helloMsg:Good-ByeResult:True202:----------Cmd:helloMsg:Good-ByeResult:True
相关文章推荐
- 菜鸟玩云计算之二十:saltstack入门初步
- 菜鸟玩云计算之廿一: saltstack之pillar
- 菜鸟玩云计算之廿二: saltstack 配置
- 菜鸟玩云计算之廿二: saltstack 配置
- 菜鸟玩云计算之廿一: saltstack之pillar
- saltstack快速入门
- SaltStack入门(二)Grains、NoteGroup和State
- 运维自动化之SaltStack简单入门
- 运维自动化之SALTSTACK简单入门
- SaltStack实战之SaltStack快速入门
- SaltStack 入门到精通第二篇:Salt-master配置文件详解
- Saltstack 快速入门教程
- saltstack的安装和初步试用体验
- python第三方库系列之二十--批量机器配置管理库SaltStack
- SaltStack实战之SaltStack快速入门
- Saltstack快速入门简单汇总
- SaltStack实战之SaltStack快速入门
- SALTSTACK技术入门与实战 目录
- saltstack初步学习
- saltstack快速入门##个人整理篇