saltstack

saltstack 实现一个快速的远程执行系统

 

saltstack的运行方式:
  Local 本地运行,交付管理
  Master/Minion <<< 常用方式
  Salt SSH 不需要客户端

 

salt部署基本架构:
  主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
  salt架构中的一种就是master > minion。

 

salt的安装

0.准备两台主机,一台master,一台minion

master:192.168.11.59

minion:192.168.11.169

master的安装和配置

# 安装
yum -y install salt-master

# 修改配置文件
interface: 0.0.0.0          # 绑定本地的地址
publish_port: 4505        # master的管理端口
user: root                     # salt运行的用户
worker_threads: 1         # salt的运行线程,一般不要超过CPU的个数
ret_port: 4506               # 跟minion的通讯端口,用于文件服务,认证,接受返回结果等
pidfile: /var/run/salt-master.pid       # 指定pid文件位置
log_file: /var/log/salt/master           # 指定log文件位置

#auto_accept: False                       # 自动接收minion的key

# 修改hosts文件
vim /etc/hosts

192.168.11.169 minion

# 启动master
systemctl start salt-master

 

 

minion的安装和配置

# 安装
yum -y install salt-minion

# 修改配置文件
vim /etc/salt/minion

master: master
master_port: 4506
user: root
id: 192.168.11.169-slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion

# 修改hosts文件
vim /etc/hosts

192.168.11.59 master

# 启动
systemctl start salt-minion

 

检测master和minion的密钥

# master
[root@master ~]# salt-key -f slave1
Unaccepted Keys:
slave1:  5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19


# minion
[root@minion ~]# salt-call --local key.finger
local:
    5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19

 

master管理minion的密钥

在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

[root@master ~]# salt-key -L
Accepted Keys:              # 已经接收的minion
Denied Keys:                 # 拒绝的minion
Unaccepted Keys:          # 未加入的minion
slave1                          
Rejected Keys:               # 吊销的minion


#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

#在master端/etc/salt/master配置
auto_accept: True   #如果对Minion信任,可以配置master自动接受请求

 

 日常命令参数

master端

[root@master ~]# rpm -ql salt-master
/etc/salt/master              #  master主配置文件
/usr/bin/salt                    # master 核心操作命令
/usr/bin/salt-cp               # master 文件传输命令
/usr/bin/salt-key             # master 证书管理命令
/usr/bin/salt-master         # master 服务命令
/usr/bin/salt-run              # master runner命令

 

minion端

[root@minion ~]# rpm -ql salt-minion
/etc/salt/minion                  # minion配置文件
/usr/bin/salt-call                  # minion 拉取命令
/usr/bin/salt-minion            # minion 服务命令
/usr/lib/systemd/system/salt-minion.service      # minion启动脚本

 

salt命令,基本都在master上操作

salt '*' test.ping       # 探测minion主机存活命令

salt '*' sys.list_functions test  # 查看test模块的命令

salt '*' sys.list_functions cmd   # 查看cmd模块的命令

salt 'slave1' sys.list_functions   # 查看所有的模块


参数:
--summary         # 显示salt命令的概要
--out=json         # 结果以json格式显示
--out=yaml         # 结果以yaml格式显示

 

JSON格式和YAML格式

[root@master ~]# salt --out=json '*' cmd.run_all 'hostname -I'
{
    "slave1": {
        "pid": 1794, 
        "retcode": 0, 
        "stderr": "", 
        "stdout": "192.168.11.169"
    }
}

[root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname -I'
slave1:
  pid: 1800
  retcode: 0
  stderr: ''
  stdout: 192.168.11.169

 

YAML语法

语法规则
    大小写敏感
    使用缩进表示层级关系   
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行

yaml支持的数据结构
    对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量: 单个不可再分的值
# YAML的编写
slave: 
 pid: 1794
 port:
  - 3306
  - 80
  - 22
 ip: 192.168.11.169


# 对应的json格式
{ slave: { 
    pid: 1794, 
    port: [ 3306, 80, 22 ], 
    ip: '192.168.11.169' } 
}

 

cmd是超级模块,是远程执行命令的模块,用于指定minion执行命令

salt 'minion名字' cmd.run '命令'

'*'   -- 代表所有minion

 

service模块,是远程管理服务的模块,即systemctl

salt 'minion名字' service.start/status/stop/restart '服务'     # 相当于在minion执行systemctl start/status/stop restart 服务

'*'   -- 代表所有minion

 

pkg模块,是远程安装软件的模块,即yum

# salt 'minion节点' pkg.install/remove '软件'

salt 'slave1' pkg.install 'httpd'        # 相当于在minion执行 yum install httpd
salt 'slave1' pkg.version 'httpd'       #  查看安装软件的版本
salt 'slave1' pkg.remove 'httpd'      # 相当于在minion执行 yum remove httpd

 

 slat采集静态信息

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 'slave1' grains.items     # 查看minion主机的所有Grains数据

salt 'slave1' grains.item ipv4 host # 查看minion主机的ipv4和主机名

 

自定义Grains静态数据

# 给minion主机设置grains的自定义数据
salt 'slave1' grains.setval  serial_number ab-cd-ef-01-02

# 清空Grains自定义数据的值,默认变为None
salt 'slave1' grains.delval  serial_number

# 删除Grains自定义数据,需要修改minion的grains配置文件,重启服务
 # 在minion上
[root@minion ~]# vim /etc/salt/grains 
[root@minion ~]# systemctl restart salt-minion
# 给slave1设置静态数据
[root@master ~]# salt 'slave1' grains.setval   serial_number ab-cd-ef-01-02
slave1:
    ----------
    serial_number:
        ab-cd-ef-01-02

# 查询slave1的静态数据
[root@master ~]# salt 'slave1' grains.item serial_number
slave1:
    ----------
    serial_number:
        ab-cd-ef-01-02

# 清空slave1的静态数据
[root@master ~]# salt 'slave1' grains.delval serial_number
slave1:
    None

# 查询slave1的静态数据
[root@master ~]# salt 'slave1' grains.item serial_number
slave1:
    ----------
    serial_number:
        None

# minion上修改grains的配置文件删除了静态数据,所以无法查询
[root@master ~]# salt 'slave1' grains.item serial_number
slave1:
    Minion did not return. [No response]

 

posted @ 2019-01-19 11:46  st--st  阅读(196)  评论(0编辑  收藏  举报