saltstack

saltstack博客地址:
https://www.cnblogs.com/pyyu/p/9465608.html
在线yaml文件编写:
http://www.bejson.com/validators/yaml_editor/ 

  

ansible	#支持ssh,不需要客户端 


saltstack  	#也是只是ssh,不需要客户端的
	安装架构是,master /minion
	

 

安装salt的依赖模块
python 
pyzmp	
pycrypto
msgpack-python
yaml 
jinja2 

  

1、服务器环境准备
master  讲师机
ip  192.168.12.96    node1				安装salt-master

准备多个客户端,被管控端,学生机		安装salt-minion 
	192.168.12.89    minion1
	192.168.12.121	minion2
	192.168.12.8	minion3
2、关闭所有节点的防火墙,以免影响实验
关闭firewalld
systemctl disable firewalld
systemctl stop firewalld

关闭iptables
iptables -F

关闭selinux

关闭安全策略

  

3、配置本地文件解析,用于加速身份验证 编辑 /etc/hosts通过主机名通信
192.168.12.96    node1	
192.168.12.89    minion1
192.168.12.121	minion2
192.168.12.8	minion3

  

4、确保环境准备ok,确保每个节点的yum源配置正确
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存
5、安装salt软件
1.node1端安装salt-master 
yum install salt-master -y

2.在3个minion地址中安装salt-minion 
yum install salt-minion -y
6、修改master和minion的配置文件
1.master的配置文件
	interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
	publish_port: 4505  #管理端口,命令发送
	user: root      #运行salt进程的用户
	worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
	ret_port: 4506  #执行结果返回端口
	pidfile: /var/run/salt-master.pid #pid文件位置
	log_file: /var/log/salt/master  #日志文件地址

	#自动接收minion的key,minion  断开又重新连接
	auto_accept: False
	
2.三个minion的配置文件
	master: node1
	master_port: 4506
	user: root
	id: s14minion1  #表示minion身份信息的,这里要修改,三个节点,为不同的id
	acceptance_wait_time: 10
	log_file: /var/log/salt/minion
7、启动salt-master和salt-minion 
systemctl start salt-master 
systemctl start salt-minion
8、在salt软件启动的时候,会进行通信连接
在salt软件启动的时候,会进行通信连接,master可以检测到minion的身份地址,此时还未接收key,还未通信,需要认证秘钥才可以通信
salt-key -L  #查看所有主机秘钥信息
#salt-key参数解析
	-L  #查看KEY状态
	-A  #允许所有
	-D  #删除所有
	-a  #认证指定的key
	-d  #删除指定的key
	-r  #注销掉指定key(该状态为未被认证)


#在秘钥通信之前,最好进行秘钥检验
master端:
salt-key -f  指明节点id   #查看节点的秘钥信息

minion端:
salt-call --local key.finger  #查看自己的秘钥信息,与master端的进行对比 


salt-key -a  minion-id   #指明接收一个minion

salt-key -A  #  接收所有minion的秘钥

salt  "*" test.ping  #通过salt主命令 匹配所有的已接收的主机  发送ping命令,会得到True 或false

salt "*"  cmd.run   #通过执行命令接口,对所有主机,执行命令

salt "*" cmd.run  "yum install nginx -y #对所有主机发送安装nginx的命令 

  

 

salt常用命令

salt --summary '*' cmd.run 'yum remove nginx -y'
	--summary是返回salt命令的执行成功状态
	"*" 目标匹配字符串
	cmd.run  模块函数,对所有匹配到的机器,执行后面的参数
	'yum remove nginx -y'    #参数如下

 

salt --out=json '*' cmd.run_all 'hostname'
--out=json #返回salt执行结果为json格式  #json数据反馈给API
salt "*" cmd.run "ls /tmp" 

salt "*" cmd.run_all  "ls /tmp"  
#cmd.run和cdm.run_all是返回结果的详细的差别

  

salt 's14minion[1,2,3]' pkg.download redis#只下载redis的rpm包,不安装这是pkg.download函数的功能

  

pkg模块对应着yum工具
pkg.install 
pkg.version 
pkg.remove 
pkg.version
与系统交互的sys模块
#列出pkg所有的方法 salt '*' sys.list_functions pkg 
#service模块,练习远程安装启动nginx
salt 's14minion[1,2,3]' pkg.install nginx
salt "*" service.status/start/stop/restart nginx #通过service模块管理服务

  

#命令执行结果,返回为yaml 
salt --out=yaml  "*" service.status nginx

 

salt命令组成结构

 

salt的命令直接输入,叫做执行模块
saltstack写入到文件中,叫做状态模块               sls文件,遵循yaml语法

语法规则
    大小写敏感
    使用缩进表示层级关系   
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行
yaml支持的数据结构
    对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量: 单个不可再分的值

对象:键值对
yaml
    first_key:
      second_key:second_value

python
    {
        'first_key':{
            'second_key':'second_value',
        }
    }

 

  

状态是对minion的一种描述和定义,运维不需要关心部署是如何完成的,只需要描述minion需要达到什么状态。
接下来通过state.cls   模块部署nginx

master端

vim /etc/salt/master 
#打开注释,写入以下,必须严格遵循yaml语法,空格
file_roots:
  base:
    - /srv/salt/base
 dev:
   - /srv/salt/dev
 test:
   - /srv/salt/test
 prod:
   - / srv/salt/prod


#此步骤在master和minion都需要执行,都需要文件夹,和nginx.sls文件
[root@master  ~]$mkdir -p /srv/salt/{base,dev,test,prod}
[root@slave   ~]$mkdir -p /srv/salt/{base,dev,test,prod}
systemctl restart salt-master
systemctl restart salt-mion

注意需要重新接受秘钥 

  

[root@master /srv/salt/base]$cat nginx.sls
nginx-install:
  pkg.installed:
    - name: nginx

nginx-service:
  service.running:
    - name: nginx
    - enable: True

salt-cp "*"  /srv/salt/base/nginx.sls   /srv/salt/base/  
第一条命令使用pkg.install 安装命令,相对于运行了yum install ,而此时state模块会判断nginx是否安装了,
如果没有安装就进行安装,安装了就什么都不做
状态描述都会遵循这个原则,只有检测到真实状态和所需状态不一致就会执行此功能,这种性质叫做幂等性
#调用state模块,执行nginx.sls文件
[root@master  /srv/salt/base]$salt '*' state.sls nginx

  

 

  saltstack两大数据管理中心 grains(静态采集数据)  与pillar(动态采集数据)

pillar与Grains对比

类型     数据采集方式   应用场景                   定义位置
Grains   静态         minion启动时收集  数据查询  目标选择  配置管理   minion
Pillar   动态         master进行自定义  目标选择  配置管理  敏感数据   master
grains
Grains 是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。
Minions的Grains信息是Minion启动时采集汇报给Master的
Grains是以 key  value形式存储的数据库,可以看做Host的元数据(metadata)
Grains保存着收集到的客户端的详细信息
如果slave机器数据变化,grains就过期了
在生产环境中需要自定义Grains,可以通过
Minion配置文件
Grains相关模块定义
Python脚本定义

salt 'slave' sys.doc grains#查看grains的命令用法
salt '*' grains.ls  #列出所有grains方法
salt '*' grains.item key1 key2 key3
salt '*' -G

salt "*" grains.items  #采集所有minion机器的硬件信息,返回字典数据,key和value
salt "*" grains.item osfullname	#通过item方法,通过key,返回单独的value
salt "*" grains.item ipv4
salt "*" grains.item ipv4 os hostname  #支持多key的方式查看信息

#通过-G参数,指明是grains模块,匹配到所有的 操作系统是7系列的机器,然后执行命令
salt -G 'osrelease:7*' cmd.run "echo 'i am from master....' > /tmp/salt.txt"
#定位Cenots的机器
[root@master 192.168.11.72 ~]$salt -G 'os:CentOS' test.ping
slave:
    True
#定位操作系统系统是7系列的机器
[root@master 192.168.11.72 ~]$salt -G 'osrelease:7*' test.ping
slave:
True

#找出ip地址

salt '*' grains.item fqdn_ip4

  

#自定义设置granis数据 salt "*" grains.setval my_class s14 #
删除自定义grains的值 salt "*" grains.delval my_class
#如果想永久删除这个key,需要删除minion底下的/etc/salt/grains文件

  

Pillar

 

#设置数据
[root@master 192.168.11.72 ~]$salt 'slave' grains.setval cpu_num 8
[root@master 192.168.11.72 ~]$salt 'slave' grains.setval cpu_info '["Intel","Xeon","10"]'
#查询数据 [root@master 192.168.11.72 ~]$salt 'slave' grains.item cpu_num
在master端设置Grains静态数据,原理会将此数据添加到minion服务器的配置文件的/etc/salt/grains

[root@slave 192.168.11.71 ~]$cat /etc/salt/grains
cpu_num: 8

因此Grains数据写入配置文件后,重启salt-minion服务,数据也不会丢失

想要删除可以通过grains.delval命令删除,或者去minion的配置文件删除配置一样完成操作(或者删除文件)

1.方法一,清空值 
[root@master 192.168.11.72 ~]$salt 'slave' grains.delval cpu_num
slave:
    None

2.方法二 删除minion的grains配置文件,重启服务

[root@slave 192.168.11.71 ~]$rm -rf /etc/salt/grains
[root@slave 192.168.11.71 ~]$!sys
systemctl restart salt-minion
检查结果删除成功

 

  

Pillar也是saltstack组件中非常重要的组件之一,称作数据管理中心,经常配合states在大规模的配置管理中使用。

Pillar是动态的,存储在master端,提供和给minion端

Pillar在SaltStack中主要的作用是存储和定义配置管理中需要的一些数据,比如软件版本号,用户账号密码等,保证敏感数据不被其他minion看到

存储格式与Grains类似,都是YAML格式
在master配置文件中有一段Pillar settings选项专门定义Pillar的参数

cat /etc/salt/master #此配置代表pillar的工作根目录,在/srv/pillar下,然后可以新建sls文件 #pillar_roots: # base: # - /srv/pillar
mkdir -p /srv/pillar
#指定环境,标记,引用packages.sls
vim /srv/pillar/top.sls
base:
  '*':
      - packages

vim /srv/pillar/packages.sls
nginx:
    packages-name: nginx
    version: 1.12.2
port: 80
user: root



  

检查我们设置的pillar值
[root@master 192.168.199.155 /srv/pillar]$salt '*' pillar.item nginx
slave:
    ----------
    nginx:
        ----------
        packages-name:
            nginx
        port:
        user:
            root
        version:
            1.12.2

  

 

Python API调用SaltStack

 

SaltStack本身提供salt(usr/bin/salt)来交互管理,但是去服务器上敲命令肯定不是一个长远之计,这时候python就体现了nb的功能。

Python API就是给Python提供的API使用,需要在SaltStack master上运行

  

--------------------------------------------------
import salt.client
local = salt.client.LocalClient()# 只能在salt   master上使用
local.cmd('*','cmd.run',['hostname'])
----------------------------------------------------
import salt.config #导入salt配置模块
m_opts=salt.config.client_config('/etc/salt/master') #读取minion配置文件,得到字典数据,通过字典方法可以查看信息

  

ret=local.cmd_iter('*','test.ping')#  逐条返回结果, 迭代器
local.cmd('*','service.status',['nginx'])
posted @ 2019-03-30 08:06  慕沁  阅读(257)  评论(0)    收藏  举报