saltstack的使用

saltstack是自动化管理工具。

术语:

Master - 控制中心,salt命令运行和资源状态管理端

Minions - 需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息

States - 配置管理的指令集

Grains - minion端的变量,静态

pillar - minion端的变量,动态

highstate - 给minion永久下添加状态,从sls配置文件读取到的

salt schedule - 自动保持客户端配置

安装源

centos6

rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm

centos5

rpm –Uvh http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm

安装

yum –y install salt-master (master 安装)

yum –y install salt-minion (minion 安装)

master配置

编辑配置文件/etc/salt/master 修改如下所示的配置项,去掉注释

interface: 0.0.0.0

keep_jobs: 12         #12小时清楚一次cache

file_recv: Ture       #开启master从minion上拉取文件

file_recv_max_size: 2000#拉取文件的最大2000m(默认为m)

file_roots:     #修改saltstack管理目录

base:

- /srv/salt

nodegroups:     #配置组

lc1: ‘[email protected],rsync2.a.com‘

minion配置

master: 192.168.100.102

id: rsync1.a.com

schedule:#配置受控端同步,每隔60秒与主控端进行同步一次 编辑/etc/salt/minion

highstate:

function: state.highstate

seconds: 60

证书管理

salt-key -L 列出所有

salt-key -a rsync1.a.com 接受一个证书

通信测试

测试与受控主机网络是否通畅

salt ‘*‘ cmd.run test.ping

可以通过grains查看一些系统信息,例如

salt \* grains.items

查看单个grain,使用grains.item命令

salt \* grains.item os

安装软件

[[email protected] ~]# salt -N lc1 pkg.install telnet

查看已经安装的包

[[email protected] ~]# salt ‘*‘ pkg.list_pkgs

删除包

[[email protected] ~]# salt ‘*‘ pkg.remove telnet

查看你repos

[[email protected] ~]# salt ‘*‘ pkg.list_repos

模板的使用

文件的拷贝

[[email protected] salt]# cat zabbix/zabbix.sls

/etc/zabbix/zabbix_agentd.conf:

file.managed:

- source: salt://zabbix/zabbix_agentd.conf

- mode: 644

- owner: root

- group: root

- template: jinja

将zabbix/zabbix_agentd.conf中的Hostname换成下面

{% if grains[‘os‘] == ‘Ubuntu‘ %}

Hostname={{ grains[‘host‘] }}

{% elif grains[‘os‘] == ‘CentOS‘ %}

Hostname={{ grains[‘fqdn‘] }}

{% endif %}

执行

[[email protected] salt]# salt -N "lc2" state.sls zabbix.zabbix

监控配置文件的更改

[[email protected] salt]# vim apache/httpd.sls

test1: #id宣告

pkg:#安装包管理

- name: httpd#安装哪个软件

- installed #要求是安装

service:#服务管理

- name: httpd#指定服务

- running#服务运行状态

- reload: True#是否重启

- watch:#如果下面文件发生变化,就重启

- file: /etc/httpd/conf/httpd.conf#监控的文件地址

/etc/httpd/conf/httpd.conf: #宣告

file.managed: #文件管理

- source: salt://apache/httpd.conf#源数据在哪里

- user: root#用户

- group: root#组

- mode: 644 #权限

- backup: minion #备份一份

- template: jinja  #使用的模板

执行

[[email protected] salt]# salt -N "lc2" state.sls apache.httpd

创建用户

[[email protected] users]# vim lists.sls

test13:

user.present:

- name: test13

- gid: wheel

- fullname: zhou test13

- workphone: 11111111111

- password: ‘$6$v9/LkY5c$t5OZ/2O0l6gWVd5LH7OHC8OEHMsWvfhYAsMYrZJ8trL5Xmfi02Y9.6XFiT8F6GH2vsjF6g9AefdGdpgp99p7Z1‘

- shell: /bin/bash

- home: /home/test13

/home/test13/.ssh/authorized_keys:

file.managed:

- source: salt://users/keys/test13

- makedirs: True

- mode: 600

- owner: test13

- group: wheel

- template: jinja

执行

[[email protected] salt]# salt "rsync1.a.com" state.sls users.lists

rsync1.a.com:

----------

ID: test13

Function: user.present

Result: True

Comment: User test13 is present and up to date

Changes:

----------

ID: /home/test13/.ssh/authorized_keys

Function: file.managed

Result: True

Comment: File /home/test13/.ssh/authorized_keys is in the correct state

Changes:

Summary

------------

Succeeded: 2

Failed:    0

------------

Total:     2

user.present: 确保指定的账户名存在,并指定其对应的属性. 这些属性包括如下内容:

name: 指定需要管理的账户名.

uid: 指定uid, 如果不设置将配自动分配下一个有效的uid.

gid: 指定默认的组id(group id)

gid_from_name: 如果设置为_True_,默认的组id将自动设置为和本用户同名的组id

groups: 分配给该用户的组列表(a list of groups). 如果组在minion上不存在,则本state会报错. 如果设置会空,将会删除本用户所属的除了默认组之外的其他组

optional_groups: 分配给用户的组列表。 如果组在minion上不存在,则state会忽略它.

home: 关于用户的家目录(home directory).

password: 设置用户hash之后的密码.

enforce_password: 当设置为_False_时,如果设置的_password_与用户原密码不同,将保持原密码不做更改.如果没有设置_password_选项,该选项将自动忽略掉.

shell: 指定用户的login shell。 默认将设置为系统默认shell。

unique: UID唯一,默认为True.

system: 从_FIRST_SYSTEM_UID_和_LAST_SYSTEM_UID_间选择一个随机的UID.

用户描述选项(GECOS)支持(当前只支持Linux和FreeBSD系统):

fullname: 指定用户全名(full name).

roomnumber: 指定用户的房间号.

workphone: 指定用户的工作电话号码.

homephone: 指定用户的家庭电话号码.

user.absent 用于删除用户.其有以下选项:

name: 指定需要删除的用户名.

purge: 设置清除用户的文件(家目录)

force: 如果用户当前已登录,则absent state会失败. 设置_force_选项为True时,就算用户当前处于登录状态也会删除本用户.

当管理用户时,至少需要指定_user.present_或_user.absent_。 其他选项是可选的,比如_uid_、_gid_、_home_等选项没有指定是,将自动使用下一个有效的或者系统默认的

高级部分

cp.get_file用来从master下载文件到客户端,语法如下:

# salt ‘*‘ cp.get_file salt://vimrc /etc/vimrc

对于大文件,cp.get_file支持gzip压缩,在参数中指定gzip的压缩级别,如下:

# salt ‘*‘ cp.get_file salt://vimrc /etc/vimrc gzip=5

cp.get_file默认不在客户端上建立目录,如果客户端上没有这个目录了,文件拷贝将失败,可以指定makedirs=True来创建目录:

# salt ‘*‘ cp.get_file salt://vimrc /etc/vim/vimrc makedirs=True

cp.get_dir可以从master下载整个目录,语法如下:

# salt ‘*‘ cp.get_dir salt://etc/apache2 /etc

cp.get_dir也支持模板和压缩:

# salt ‘*‘ cp.get_dir salt://etc/{{pillar.webserver}} /etc gzip=5 template=jinja

get_url

cp.get_url可以从一个URL地址下载文件,URL可以是msater上的路径(salt://),也可以是http网址。

# salt ‘*‘ cp.get_url salt://my/file /tmp/mine

# salt ‘*‘ cp.get_url http://www.slashdot.org /tmp/index.html

get_template

cp.get_template可以在文件下载之前用模板引擎处理。

# salt ‘*‘ cp.get_template salt://path/to/template /minion/dest

时间: 2024-12-28 16:37:18

saltstack的使用的相关文章

Saltstack批量编译部署nginx(多模块)

最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环境使用,这就需要用到saltstack的批量安装部署功能了.这篇文章主要介绍nginx的批量部署,下篇讲解tomcat多实例的批量部署方法. 环境介绍: Centos 6.5 salt 2015.5.10 nginx 1.12.0 minion:test 1.修改master配置文件,修改后重启服务

saltstack安装配置使用

背景:puppet 用ruby开发,saltstack用python语言开发的包 环境: 修改hostname和hosts文件, 关闭selinux,清空iptables 172.16.115.157  master.huangzp.com  ;hostname master 172.16.115.203  agent.huangzp.com  ;hostname agent 一.配置认证 1. 安装和启动Saltstack服务 master上: yum install  -y epel-rel

  Saltstack实战

一:saltstack简介 部署的工作,不能只用手来做了,我们需要用工具来完成,工具化和标准化是相辅相成的,工具化让线上运行的东西更标准 Saltstack是比较新的自动化工具,是python开发的,也提供了api,saltstack有三大功能,远程执行,配置管理和云管理,配置管理也可以叫做状态管理,运维三板斧,监控,执行,配置 Saltstack对不,Puppet是ruby写的不支持远程执行  ansible 也是python写的.Saltstack的官方网站就是saltstack.com 运

SaltStack 入门到精通 - 第一篇: 安装SaltStack

实际环境的设定: 系统环境: centos6 或centos5 实验机器: 192.168.1.100 软件需求: salt 套件,及其需求环境 实验目的: 成功安装salt,并实现salt主从间通讯 特殊设置: 其它目的: 安装SaltStack(下面简称为salt) epel安装:salt安装需要epel源支持,所以在安装salt前需要先安装epel包 # centos5 下载下面rpm  wget -O    epel.rpm https://dl.fedoraproject.org/pu

SaltStack 入门到精通 - 第七篇: Targeting

什么是Targeting? Targeting minions 是指那些minion会作为运行命令或是执行状态的目标.这些目标可以是一个主机名,系统信息,定义的分组,甚至是自定义的绑定的对象. 例如命令  salt web1 apache.signal restart 可以重启ID 为web1的minion的apache.当然也可以在top文件中使用web1来作为目标匹配的内容: base:   'web1':     - webserver Targing 有哪些匹配方式? Minion Id

使用saltstack集中部署zabbix服务

需求描述:使用saltstack在机器上部署zabbix服务. 思路:通过state sls实现. 安装zabbix的策略目录: 第一部分sls文件: 上面的策略是安装策略,目的是将安装包下载到minion,然后解压到安装目录. 第二部分是配置修改策略,修改后重启agentd服务. 模版配置文件一段信息,这个信息会被sls文件里的server变量替换掉 同步策略 salt '*' state.sls zabbix.config prod 这个会执行策略并安装zabbix. 是不是很简单啊 使用s

saltstack "ImportError: No module named salt.scripts"错误解决

一.问题描述 生产线上使用的自动化管理工具是saltstack,CentOS6.8 x64,python 2.6.6 ,正所谓不作不死,由于有些功能需要python2.7.x ,在升级好python2.7后,写了saltstack api 发现python2.7不好使,原理是python2.7下没有salt模块,因此pip install salt 即在python2.7下安装成功了salt模块,但是发现重启salt-master时报错.如下图: 生产线啊,这可不行,赶紧恢复吧.pip unin

Saltstack报错

最近学习saltstack,出现以下错误 [[email protected] ~]# salt 'minion.saltstack.com' state.sls init.pkg[ERROR   ] An un-handled exception was caught by salt's global exception handler:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 97: ordina

Saltstack Automatic grouping

一.要点: 知道key验证存放的目录 key在验证是手动还自动 对不在线的主机的处理 minion_id的命名规范 二.使用的技术栈 saltstack 相关的库:salt.config,salt.client,salt.runner 使用redis 存放两个数据库,第一个为存为字典,用于存放minion_id与物理IP的对应,另一个存为集合,用于项目_业务命名的方式包含相应的主机 使用watchdog对目录变更监控,事件触发机制 三.完整代码 # coding:utf8 # Created b

SaltStack部署

一.基础介绍 1.简介 SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq.PyCrypto.Pyjinjia2.python-msgpack和PyYAML等)构建. 通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理.分发文件.